summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cui/source/inc/backgrnd.hxx4
-rw-r--r--cui/source/inc/cuitabarea.hxx6
-rw-r--r--cui/source/tabpages/backgrnd.cxx40
-rw-r--r--cui/source/tabpages/tpcolor.cxx57
-rw-r--r--cui/uiconfig/ui/backgroundpage.ui2
-rw-r--r--cui/uiconfig/ui/colorpage.ui2
-rw-r--r--include/svtools/accessibilityoptions.hxx14
-rw-r--r--include/svx/SvxColorChildWindow.hxx40
-rw-r--r--include/svx/SvxColorValueSet.hxx51
-rw-r--r--include/svx/colrctrl.hxx36
-rw-r--r--include/vcl/bitmap.hxx31
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Common.xcs80
-rw-r--r--sc/source/ui/inc/tabbgcolordlg.hxx4
-rw-r--r--sc/source/ui/miscdlgs/tabbgcolordlg.cxx90
-rw-r--r--sd/source/ui/app/sddll2.cxx2
-rw-r--r--sd/source/ui/slideshow/slideshowimpl.cxx2
-rw-r--r--sd/source/ui/view/drviews2.cxx1
-rw-r--r--sd/source/ui/view/drviews6.cxx2
-rw-r--r--sd/source/ui/view/drvwshrg.cxx2
-rw-r--r--svtools/source/config/accessibilityoptions.cxx201
-rw-r--r--svtools/source/control/valueset.cxx21
-rw-r--r--svx/Library_svx.mk1
-rw-r--r--svx/Library_svxcore.mk1
-rw-r--r--svx/inc/svx/sidebar/ColorControl.hxx3
-rw-r--r--svx/source/sidebar/tools/ColorControl.cxx46
-rw-r--r--svx/source/tbxctrls/SvxColorChildWindow.cxx47
-rw-r--r--svx/source/tbxctrls/SvxColorValueSet.cxx149
-rw-r--r--svx/source/tbxctrls/colorwindow.hxx3
-rw-r--r--svx/source/tbxctrls/colrctrl.cxx94
-rw-r--r--svx/source/tbxctrls/tbcontrl.cxx77
-rw-r--r--vcl/source/gdi/bitmap4.cxx192
31 files changed, 1030 insertions, 271 deletions
diff --git a/cui/source/inc/backgrnd.hxx b/cui/source/inc/backgrnd.hxx
index c3e13b9e176d..cece693bf2bb 100644
--- a/cui/source/inc/backgrnd.hxx
+++ b/cui/source/inc/backgrnd.hxx
@@ -22,7 +22,7 @@
#include <vcl/group.hxx>
#include <svtools/stdctrl.hxx>
#include <vcl/graph.hxx>
-#include <svtools/valueset.hxx>
+#include <svx/SvxColorValueSet.hxx>
#include <svx/dlgctrl.hxx>
#include <editeng/brushitem.hxx>
@@ -82,7 +82,7 @@ private:
ListBox* m_pParaLBox;
VclFrame* m_pBackGroundColorFrame;
- ValueSet* m_pBackgroundColorSet;
+ SvxColorValueSet* m_pBackgroundColorSet;
BackgroundPreviewImpl* m_pPreviewWin1;
FixedText* m_pColTransFT;///<color transparency
diff --git a/cui/source/inc/cuitabarea.hxx b/cui/source/inc/cuitabarea.hxx
index 548a9018192c..374dd3196a3c 100644
--- a/cui/source/inc/cuitabarea.hxx
+++ b/cui/source/inc/cuitabarea.hxx
@@ -27,6 +27,7 @@
#include <svx/xfillit0.hxx>
#include <svx/xfillit.hxx>
#include <svx/tabarea.hxx>
+#include <svx/SvxColorValueSet.hxx>
class SdrModel;
class SdrView;
@@ -650,7 +651,7 @@ private:
Edit* m_pEdtName;
ColorLB* m_pLbColor;
- ValueSet* m_pValSetColorList;
+ SvxColorValueSet* m_pValSetColorList;
SvxXRectPreview* m_pCtlPreviewOld;
SvxXRectPreview* m_pCtlPreviewNew;
@@ -698,7 +699,8 @@ private:
sal_uInt16 ColorToPercent_Impl( sal_uInt16 nColor );
sal_uInt16 PercentToColor_Impl( sal_uInt16 nPercent );
- void FillValueSet_Impl( ValueSet& rVs );
+ void ImpColorCountChanged();
+
//-----------------------------------------------------------------------------------------------------
DECL_LINK( ClickAddHdl_Impl, void * );
DECL_LINK( ClickModifyHdl_Impl, void * );
diff --git a/cui/source/tabpages/backgrnd.cxx b/cui/source/tabpages/backgrnd.cxx
index 3b94fdfc757d..a8ce0a75eba8 100644
--- a/cui/source/tabpages/backgrnd.cxx
+++ b/cui/source/tabpages/backgrnd.cxx
@@ -413,6 +413,8 @@ SvxBackgroundTabPage::SvxBackgroundTabPage(Window* pParent, const SfxItemSet& rC
FillColorValueSets_Impl();
m_pBackgroundColorSet->SetSelectHdl( HDL(BackgroundColorHdl_Impl) );
+ m_pBackgroundColorSet->SetStyle(m_pBackgroundColorSet->GetStyle() | WB_ITEMBORDER | WB_NAMEFIELD | WB_NONEFIELD);
+ m_pBackgroundColorSet->SetText(SVX_RESSTR(RID_SVXSTR_TRANSPARENT));
}
//------------------------------------------------------------------------
@@ -1169,47 +1171,23 @@ void SvxBackgroundTabPage::FillColorValueSets_Impl()
SfxObjectShell* pDocSh = SfxObjectShell::Current();
const SfxPoolItem* pItem = NULL;
XColorListRef pColorTable = NULL;
- const Size aSize15x15 = Size( 15, 15 );
-
if ( pDocSh && ( 0 != ( pItem = pDocSh->GetItem( SID_COLOR_TABLE ) ) ) )
+ {
pColorTable = ( (SvxColorListItem*)pItem )->GetColorList();
+ }
if ( !pColorTable.is() )
pColorTable = XColorList::CreateStdColorList();
if ( pColorTable.is() )
{
- short i = 0;
- long nCount = pColorTable->Count();
- XColorEntry* pEntry = NULL;
- Color aColWhite( COL_WHITE );
- String aStrWhite( EditResId( RID_SVXITEMS_COLOR_WHITE ) );
- WinBits nBits = ( m_pBackgroundColorSet->GetStyle() | WB_ITEMBORDER | WB_NAMEFIELD | WB_NONEFIELD );
- m_pBackgroundColorSet->SetText( SVX_RESSTR( RID_SVXSTR_TRANSPARENT ) );
- m_pBackgroundColorSet->SetStyle( nBits );
- m_pBackgroundColorSet->SetAccessibleName(m_pBackGroundColorFrame->get_label_widget()->GetText());
- for ( i = 0; i < nCount; i++ )
- {
- pEntry = pColorTable->GetColor(i);
- m_pBackgroundColorSet->InsertItem( i + 1, pEntry->GetColor(), pEntry->GetName() );
- }
-
- while ( i < 104 )
- {
- m_pBackgroundColorSet->InsertItem( i + 1, aColWhite, aStrWhite );
- i++;
- }
-
- if ( nCount > 104 )
- {
- m_pBackgroundColorSet->SetStyle( nBits | WB_VSCROLL );
- }
+ m_pBackgroundColorSet->Clear();
+ m_pBackgroundColorSet->addEntriesForXColorList(*pColorTable);
}
- m_pBackgroundColorSet->SetColCount( 8 );
- m_pBackgroundColorSet->SetLineCount( 13 );
- m_pBackgroundColorSet->CalcWindowSizePixel( aSize15x15 );
-
+ const WinBits nBits(m_pBackgroundColorSet->GetStyle() | WB_ITEMBORDER | WB_NAMEFIELD | WB_NONEFIELD);
+ m_pBackgroundColorSet->SetStyle(nBits);
+ m_pBackgroundColorSet->SetColCount(m_pBackgroundColorSet->getColumnCount());
}
//------------------------------------------------------------------------
diff --git a/cui/source/tabpages/tpcolor.cxx b/cui/source/tabpages/tpcolor.cxx
index 371b61ec27ab..fc209ed5bf37 100644
--- a/cui/source/tabpages/tpcolor.cxx
+++ b/cui/source/tabpages/tpcolor.cxx
@@ -391,10 +391,7 @@ SvxColorTabPage::SvxColorTabPage(Window* pParent, const SfxItemSet& rInAttrs)
LINK( this, SvxColorTabPage, ClickDeleteHdl_Impl ) );
// ValueSet
- m_pValSetColorList->SetStyle( m_pValSetColorList->GetStyle() | WB_VSCROLL | WB_ITEMBORDER );
- m_pValSetColorList->SetColCount( 8 );
- m_pValSetColorList->SetLineCount( 13 );
- m_pValSetColorList->SetExtraSpacing( 0 );
+ m_pValSetColorList->SetStyle( m_pValSetColorList->GetStyle() | WB_ITEMBORDER );
m_pValSetColorList->Show();
}
@@ -405,11 +402,24 @@ SvxColorTabPage::~SvxColorTabPage()
// -----------------------------------------------------------------------
+void SvxColorTabPage::ImpColorCountChanged()
+{
+ if (!pColorList.is())
+ return;
+ m_pValSetColorList->SetColCount(m_pValSetColorList->getColumnCount());
+}
+
+// -----------------------------------------------------------------------
+
void SvxColorTabPage::Construct()
{
- m_pLbColor->Fill(pColorList);
- FillValueSet_Impl(*m_pValSetColorList);
- UpdateTableName();
+ if (pColorList.is())
+ {
+ m_pLbColor->Fill(pColorList);
+ m_pValSetColorList->addEntriesForXColorList(*pColorList);
+ ImpColorCountChanged();
+ UpdateTableName();
+ }
}
// -----------------------------------------------------------------------
@@ -722,6 +732,7 @@ IMPL_LINK_NOARG(SvxColorTabPage, ClickAddHdl_Impl)
m_pLbColor->Append( pEntry );
m_pValSetColorList->InsertItem( m_pValSetColorList->GetItemCount() + 1,
pEntry->GetColor(), pEntry->GetName() );
+ ImpColorCountChanged();
m_pLbColor->SelectEntryPos( m_pLbColor->GetEntryCount() - 1 );
@@ -874,7 +885,9 @@ IMPL_LINK_NOARG(SvxColorTabPage, ClickDeleteHdl_Impl)
// update Listbox and ValueSet
m_pLbColor->RemoveEntry( nPos );
m_pValSetColorList->Clear();
- FillValueSet_Impl(*m_pValSetColorList);
+ m_pValSetColorList->addEntriesForXColorList(*pColorList);
+ ImpColorCountChanged();
+ //FillValueSet_Impl(*m_pValSetColorList);
// positioning
m_pLbColor->SelectEntryPos( nPos );
@@ -1043,20 +1056,20 @@ long SvxColorTabPage::ChangeColorHdl_Impl( void* )
//------------------------------------------------------------------------
-void SvxColorTabPage::FillValueSet_Impl( ValueSet& rVs )
-{
- long nCount = pColorList->Count();
- XColorEntry* pColorEntry;
-
- if( nCount > 104 )
- rVs.SetStyle( rVs.GetStyle() | WB_VSCROLL );
-
- for( long i = 0; i < nCount; i++ )
- {
- pColorEntry = pColorList->GetColor( i );
- rVs.InsertItem( (sal_uInt16) i + 1, pColorEntry->GetColor(), pColorEntry->GetName() );
- }
-}
+//void SvxColorTabPage::FillValueSet_Impl( ValueSet& rVs )
+//{
+// long nCount = pColorList->Count();
+// XColorEntry* pColorEntry;
+//
+// if( nCount > 104 )
+// rVs.SetStyle( rVs.GetStyle() | WB_VSCROLL );
+//
+// for( long i = 0; i < nCount; i++ )
+// {
+// pColorEntry = pColorList->GetColor( i );
+// rVs.InsertItem( (sal_uInt16) i + 1, pColorEntry->GetColor(), pColorEntry->GetName() );
+// }
+//}
//------------------------------------------------------------------------
diff --git a/cui/uiconfig/ui/backgroundpage.ui b/cui/uiconfig/ui/backgroundpage.ui
index 3182e288179f..78d761fb24f8 100644
--- a/cui/uiconfig/ui/backgroundpage.ui
+++ b/cui/uiconfig/ui/backgroundpage.ui
@@ -217,7 +217,7 @@
</packing>
</child>
<child>
- <object class="svtlo-ValueSet" id="backgroundcolorset">
+ <object class="svxlo-SvxColorValueSet" id="backgroundcolorset">
<property name="width_request">150</property>
<property name="height_request">150</property>
<property name="visible">True</property>
diff --git a/cui/uiconfig/ui/colorpage.ui b/cui/uiconfig/ui/colorpage.ui
index 48da1f31b5f6..0146da13b28b 100644
--- a/cui/uiconfig/ui/colorpage.ui
+++ b/cui/uiconfig/ui/colorpage.ui
@@ -129,7 +129,7 @@
</packing>
</child>
<child>
- <object class="svtlo-ValueSet" id="colorset">
+ <object class="svxlo-SvxColorValueSet" id="colorset">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
diff --git a/include/svtools/accessibilityoptions.hxx b/include/svtools/accessibilityoptions.hxx
index 4c168143aff9..52b12b9b60b4 100644
--- a/include/svtools/accessibilityoptions.hxx
+++ b/include/svtools/accessibilityoptions.hxx
@@ -49,6 +49,15 @@ public:
sal_Bool IsSelectionInReadonly() const;
sal_Bool GetAutoDetectSystemHC() const;
+ // options for configuring the look and feel for the ColorValueSet (color selector)
+ sal_Int16 GetColorValueSetMaximumRowCount() const;
+ sal_Int16 GetColorValueSetEntryEdgeLength() const;
+ sal_Int16 GetColorValueSetColumnCount() const;
+
+ // option to activate EdgeBlending for previews in the UI (ColorValueSet, ColorDropDown,
+ // FillStyle/LineStyle previews, etc...). 0 == off, 100% == full paint, in-between == alpha
+ sal_Int16 GetEdgeBlending() const;
+
void SetIsForPagePreviews(sal_Bool bSet);
void SetIsHelpTipsDisappear(sal_Bool bSet);
void SetIsAllowAnimatedGraphics(sal_Bool bSet);
@@ -59,6 +68,11 @@ public:
void SetSelectionInReadonly(sal_Bool bSet);
void SetAutoDetectSystemHC(sal_Bool bSet);
+ void SetColorValueSetMaximumRowCount(sal_Int16 nSet);
+ void SetColorValueSetEntryEdgeLength(sal_Int16 nSet);
+ void SetColorValueSetColumnCount(sal_Int16 nSet);
+ void SetEdgeBlending(sal_Int16 nSet);
+
sal_Bool IsModified() const;
void Commit();
diff --git a/include/svx/SvxColorChildWindow.hxx b/include/svx/SvxColorChildWindow.hxx
new file mode 100644
index 000000000000..0b9b320aad96
--- /dev/null
+++ b/include/svx/SvxColorChildWindow.hxx
@@ -0,0 +1,40 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#ifndef _SVX_COLORCHILDWINDOW_HXX
+#define _SVX_COLORCHILDWINDOW_HXX
+
+#include <sfx2/childwin.hxx>
+#include "svx/svxdllapi.h"
+
+/*************************************************************************
+|*
+|* Ableitung vom SfxChildWindow als "Behaelter" fuer Controller
+|*
+\************************************************************************/
+
+class SVX_DLLPUBLIC SvxColorChildWindow : public SfxChildWindow
+{
+ public:
+ SvxColorChildWindow( Window*, sal_uInt16, SfxBindings*,
+ SfxChildWinInfo* );
+
+ SFX_DECL_CHILDWINDOW_WITHID(SvxColorChildWindow);
+};
+
+
+#endif // _SVX_COLORCHILDWINDOW_HXX
diff --git a/include/svx/SvxColorValueSet.hxx b/include/svx/SvxColorValueSet.hxx
new file mode 100644
index 000000000000..819de02d7483
--- /dev/null
+++ b/include/svx/SvxColorValueSet.hxx
@@ -0,0 +1,51 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#ifndef _SVX_COLORVALUESET_HXX
+#define _SVX_COLORVALUESET_HXX
+
+#include <svtools/valueset.hxx>
+#include "svx/svxdllapi.h"
+
+//////////////////////////////////////////////////////////////////////////////
+
+class XColorList;
+
+//////////////////////////////////////////////////////////////////////////////
+
+class SVX_DLLPUBLIC SvxColorValueSet : public ValueSet
+{
+private:
+protected:
+public:
+ SvxColorValueSet(Window* pParent, WinBits nWinStyle = WB_ITEMBORDER);
+ SvxColorValueSet(Window* pParent, const ResId& rResId);
+
+ sal_uInt32 getMaxRowCount() const;
+ sal_uInt32 getEntryEdgeLength() const;
+ sal_uInt32 getColumnCount() const;
+
+ void addEntriesForXColorList(const XColorList& rXColorList, sal_uInt32 nStartIndex = 1);
+ Size layoutAllVisible(sal_uInt32 nEntryCount);
+ Size layoutToGivenHeight(sal_uInt32 nHeight, sal_uInt32 nEntryCount);
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+#endif // _SVX_COLORVALUESET_HXX
+
+// eof
diff --git a/include/svx/colrctrl.hxx b/include/svx/colrctrl.hxx
index ee3451bc857c..cd0fa07d2748 100644
--- a/include/svx/colrctrl.hxx
+++ b/include/svx/colrctrl.hxx
@@ -21,7 +21,7 @@
#include <sfx2/dockwin.hxx>
#include <sfx2/childwin.hxx>
-#include <svtools/valueset.hxx>
+#include <svx/SvxColorValueSet.hxx>
#include <svtools/transfer.hxx>
#include <svl/lstner.hxx>
#include <svx/svxdllapi.h>
@@ -31,17 +31,16 @@ class SvData;
/*************************************************************************
|*
-|* SvxColorValueSet
+|* SvxColorValueSet_docking
|*
\************************************************************************/
-class SvxColorValueSet : public ValueSet, public DragSourceHelper
+class SvxColorValueSet_docking : public SvxColorValueSet, public DragSourceHelper
{
- using ValueSet::StartDrag;
-
private:
+ using SvxColorValueSet::StartDrag;
- sal_Bool bLeft;
+ bool mbLeftButton;
Point aDragPosPixel;
protected:
@@ -56,27 +55,13 @@ protected:
// DragSourceHelper
virtual void StartDrag( sal_Int8 nAction, const Point& rPtPixel );
- DECL_STATIC_LINK(SvxColorValueSet, ExecDragHdl, void*);
+ DECL_STATIC_LINK(SvxColorValueSet_docking, ExecDragHdl, void*);
public:
- SvxColorValueSet( Window* pParent, const ResId& rResId );
-
- sal_Bool IsLeftButton() const { return bLeft; }
-};
-
-/*************************************************************************
-|*
-|* Derivation from SfxChildWindow as "container" for Controller
-|*
-\************************************************************************/
-
-class SVX_DLLPUBLIC SvxColorChildWindow : public SfxChildWindow
-{
- public:
- SvxColorChildWindow( Window*, sal_uInt16, SfxBindings*,
- SfxChildWinInfo* );
+ SvxColorValueSet_docking( Window* pParent, WinBits nWinStyle = WB_ITEMBORDER );
+ SvxColorValueSet_docking( Window* pParent, const ResId& rResId );
- SFX_DECL_CHILDWINDOW_WITHID(SvxColorChildWindow);
+ bool IsLeftButton() const { return mbLeftButton; }
};
/*************************************************************************
@@ -91,13 +76,12 @@ class SvxColorDockingWindow : public SfxDockingWindow, public SfxListener
private:
XColorListRef pColorList;
- SvxColorValueSet aColorSet;
+ SvxColorValueSet_docking aColorSet;
sal_uInt16 nLeftSlot;
sal_uInt16 nRightSlot;
sal_uInt16 nCols;
sal_uInt16 nLines;
long nCount;
- Size aColorSize;
Size aItemSize;
void FillValueSet();
diff --git a/include/vcl/bitmap.hxx b/include/vcl/bitmap.hxx
index 292c3fb4480f..bacec110ab1a 100644
--- a/include/vcl/bitmap.hxx
+++ b/include/vcl/bitmap.hxx
@@ -20,6 +20,7 @@
#ifndef _SV_BITMAP_HXX
#define _SV_BITMAP_HXX
+#include <tools/color.hxx>
#include <tools/link.hxx>
#include <tools/solar.h>
#include <vcl/dllapi.h>
@@ -823,6 +824,36 @@ public:
bool HasAlpha();
public:
+ /** Draw a blend frame to the Bitmap
+
+ @param nAlpha
+ The blend value defines how strong the frame will be blended with the
+ existing content, 255 == full coverage, 0 == no frame will be drawn
+
+ @param aColorTopLeft, aColorBottomRight, aColorTopRight, aColorBottomLeft
+ The colors defining the frame. If the version without aColorTopRight and
+ aColorBottomLeft is used, these colors are linearly interpolated from
+ aColorTopLeft and aColorBottomRight using the width and height of the area
+
+ @param rTopLeft
+ The start point of the frame in pixels
+
+ @param rSize
+ The size of the frame in pixels
+ */
+ void DrawBlendFrame(
+ sal_uInt8 nAlpha = 128,
+ Color aColorTopLeft = Color(COL_WHITE),
+ Color aColorBottomRight = Color(COL_BLACK));
+ void DrawBlendFrame(
+ const Point& rTopLeft,
+ const Size& rSize,
+ sal_uInt8 nAlpha = 128,
+ Color aColorTopLeft = Color(COL_WHITE),
+ Color aColorTopRight = Color(COL_GRAY),
+ Color aColorBottomRight = Color(COL_BLACK),
+ Color aColorBottomLeft = Color(COL_GRAY));
+
BitmapReadAccess* AcquireReadAccess();
BitmapWriteAccess* AcquireWriteAccess();
void ReleaseAccess( BitmapReadAccess* pAccess );
diff --git a/officecfg/registry/schema/org/openoffice/Office/Common.xcs b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
index fbff56b8ef07..517d8c2b9053 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Common.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
@@ -618,6 +618,86 @@
</constraints>
<value>10000</value>
</prop>
+ <prop oor:name="ColorValueSetMaximumRowCount" oor:type="xs:short">
+ <info>
+ <author>ALG</author>
+ <desc>Defines the maximum row count for ColorValueSets. If more rows are needed, a Scrollbar will be used.</desc>
+ <label>A Scrollbar will be used when more rows are needed.</label>
+ </info>
+ <constraints>
+ <minInclusive oor:value="10">
+ <info>
+ <desc>Specifies the minimum number of rows before a Scrollbar will be used.</desc>
+ </info>
+ </minInclusive>
+ <maxInclusive oor:value="99">
+ <info>
+ <desc>Specifies the maximum number of rows before a Scrollbar will be used.</desc>
+ </info>
+ </maxInclusive>
+ </constraints>
+ <value>40</value>
+ </prop>
+ <prop oor:name="ColorValueSetEntryEdgeLength" oor:type="xs:short">
+ <info>
+ <author>ALG</author>
+ <desc>Defines the EdgeLength in Pixels for Entries generated inside of ColorValueSets. The Entries are quadratic for Colors.</desc>
+ <label>Entries in ColorValueSets will have this quadratic size in Pixels.</label>
+ </info>
+ <constraints>
+ <minInclusive oor:value="8">
+ <info>
+ <desc>Specifies the minimum EdgeLength for Entries in ColorValueSets.</desc>
+ </info>
+ </minInclusive>
+ <maxInclusive oor:value="18">
+ <info>
+ <desc>Specifies the minimum EdgeLength for Entries in ColorValueSets.</desc>
+ </info>
+ </maxInclusive>
+ </constraints>
+ <value>14</value>
+ </prop>
+ <prop oor:name="ColorValueSetColumnCount" oor:type="xs:short">
+ <info>
+ <author>ALG</author>
+ <desc>Defines how many colums are to be used in ColorValueSets. The idea is to use this defined count to have a good visualisation in ColorValueSets which offers the used ColorTable schema nicely layouted to the User.</desc>
+ <label>The ColumnCount used in ColorValueSets.</label>
+ </info>
+ <constraints>
+ <minInclusive oor:value="12">
+ <info>
+ <desc>Specifies the perfect number of columns for ColorValueSet layout.</desc>
+ </info>
+ </minInclusive>
+ <maxInclusive oor:value="24">
+ <info>
+ <desc>Specifies a maximum number of columns for ColorValueSet layout.</desc>
+ </info>
+ </maxInclusive>
+ </constraints>
+ <value>12</value>
+ </prop>
+ <prop oor:name="EdgeBlending" oor:type="xs:short">
+ <info>
+ <author>ALG</author>
+ <desc>Option to use EdgeBlending for previews in the UI (for ColorValueSet, ColorDropDown, FillStyle/LineStyle previews, etc...). EdgeBlending will visualize a one pixel border on the preview object so that a noce 3D effect is shown. It is a percent value describing how strong the effect shall be. The value 0% switches it off, while the value 100% will cover the preview object completely on it's borders.</desc>
+ <label>Defines the EdgeBlending for Previews in percent.</label>
+ </info>
+ <constraints>
+ <minInclusive oor:value="0">
+ <info>
+ <desc>Specifies that no EdgeBlending shall happen.</desc>
+ </info>
+ </minInclusive>
+ <maxInclusive oor:value="99">
+ <info>
+ <desc>Specifies that EdgeBlending will cover the edges of Previews completely.</desc>
+ </info>
+ </maxInclusive>
+ </constraints>
+ <value>35</value>
+ </prop>
</group>
<group oor:name="ObjectNames">
<info>
diff --git a/sc/source/ui/inc/tabbgcolordlg.hxx b/sc/source/ui/inc/tabbgcolordlg.hxx
index 73f6127610ac..3b6de2cba7a4 100644
--- a/sc/source/ui/inc/tabbgcolordlg.hxx
+++ b/sc/source/ui/inc/tabbgcolordlg.hxx
@@ -23,7 +23,7 @@
#include <vcl/dialog.hxx>
#include <vcl/fixed.hxx>
#include <vcl/button.hxx>
-#include <svtools/valueset.hxx>
+#include <svx/SvxColorValueSet.hxx>
//------------------------------------------------------------------------
@@ -40,7 +40,7 @@ public:
void GetSelectedColor( Color& rColor ) const;
private:
- class ScTabBgColorValueSet : public ValueSet
+ class ScTabBgColorValueSet : public SvxColorValueSet
{
public:
ScTabBgColorValueSet(Control* pParent, const ResId& rResId, ScTabBgColorDlg* pTabBgColorDlg);
diff --git a/sc/source/ui/miscdlgs/tabbgcolordlg.cxx b/sc/source/ui/miscdlgs/tabbgcolordlg.cxx
index c2c8fa8db42f..9d1c9c68003e 100644
--- a/sc/source/ui/miscdlgs/tabbgcolordlg.cxx
+++ b/sc/source/ui/miscdlgs/tabbgcolordlg.cxx
@@ -84,7 +84,6 @@ void ScTabBgColorDlg::FillColorValueSets_Impl()
const SfxPoolItem* pItem = NULL;
XColorListRef pColorList;
- const Size aSize15x15 = Size( 15, 15 );
sal_uInt16 nSelectedItem = 0;
OSL_ENSURE( pDocSh, "DocShell not found!" );
@@ -94,39 +93,72 @@ void ScTabBgColorDlg::FillColorValueSets_Impl()
if ( !pColorList.is() )
pColorList = XColorList::CreateStdColorList();
+ long nColorCount(0);
+
if ( pColorList.is() )
{
- sal_uInt16 i = 0;
- long nCount = pColorList->Count();
- XColorEntry* pEntry = NULL;
+ nColorCount = pColorList->Count();
Color aColWhite( COL_WHITE );
String aStrWhite( EditResId( RID_SVXITEMS_COLOR_WHITE ) );
- WinBits nBits = ( aTabBgColorSet.GetStyle() | WB_NAMEFIELD | WB_ITEMBORDER | WB_NONEFIELD | WB_3DLOOK | WB_NO_DIRECTSELECT | WB_NOPOINTERFOCUS);
+ aTabBgColorSet.addEntriesForXColorList(*pColorList);
+ }
+
+ if(nColorCount)
+ {
+ const WinBits nBits(aTabBgColorSet.GetStyle() | WB_NAMEFIELD | WB_ITEMBORDER | WB_NONEFIELD | WB_3DLOOK | WB_NO_DIRECTSELECT | WB_NOPOINTERFOCUS);
aTabBgColorSet.SetText( aTabBgColorNoColorText );
aTabBgColorSet.SetStyle( nBits );
- for ( i = 0; i < nCount; i++ )
- {
- pEntry = pColorList->GetColor(i);
- aTabBgColorSet.InsertItem( i + 1, pEntry->GetColor(), pEntry->GetName() );
- if (pEntry->GetColor() == aTabBgColor)
- nSelectedItem = (i + 1);
- }
-
- while ( i < 80 )
- {
- aTabBgColorSet.InsertItem( i + 1, aColWhite, aStrWhite );
- i++;
- }
-
- if ( nCount > 80 )
- {
- aTabBgColorSet.SetStyle( nBits | WB_VSCROLL );
- }
+ static sal_Int32 nAdd = 4;
+
+ // calculate new size of color control as base, derive size of border win
+ const Size aNewSize(aTabBgColorSet.layoutAllVisible(nColorCount));
+ const Size aNewSizeBorderWin(aNewSize.Width() + nAdd, aNewSize.Height() + nAdd);
+
+ // from that, calculate a new dialog size
+ const Size aCurrentSizeDialog(GetOutputSizePixel());
+ const Size aCurrentSizeBorderWin(aBorderWin.GetOutputSizePixel());
+ const long nOffsetX(aCurrentSizeDialog.Width() - aCurrentSizeBorderWin.Width());
+ const long nOffsetY(aCurrentSizeDialog.Height() - aCurrentSizeBorderWin.Height());
+ const Size aNewSizeDialog(aNewSizeBorderWin.Width() + nOffsetX, aNewSizeBorderWin.Height() + nOffsetY);
+
+ // also need to adapt pos and size for the three buttons; as a base, take their original
+ // distance from the dialog bottom and get new Y-Pos
+ const long aButtonOffsetFromBottom(aCurrentSizeDialog.Height() - aBtnOk.GetPosPixel().Y());
+ const long aNewButtonY(aNewSizeDialog.Height() - aButtonOffsetFromBottom);
+
+ // for each button, scale width and x-pos by old/new dialog sizes and re-layout
+ // for Okay-Button
+ const long aNewWidthOkay((aBtnOk.GetSizePixel().Width() * aNewSizeDialog.Width()) / aCurrentSizeDialog.Width());
+ const long aNewPosOkay((aBtnOk.GetPosPixel().X() * aNewSizeDialog.Width()) / aCurrentSizeDialog.Width());
+ const Size aNewSizeOkay(aNewWidthOkay, aBtnOk.GetOutputSizePixel().Height());
+ aBtnOk.SetOutputSizePixel(aNewSizeOkay);
+ aBtnOk.SetPosSizePixel(Point(aNewPosOkay, aNewButtonY), aNewSizeOkay);
+
+ // for Cancel-Button
+ const long aNewWidthCancel((aBtnCancel.GetSizePixel().Width() * aNewSizeDialog.Width()) / aCurrentSizeDialog.Width());
+ const long aNewPosCancel((aBtnCancel.GetPosPixel().X() * aNewSizeDialog.Width()) / aCurrentSizeDialog.Width());
+ const Size aNewSizeCancel(aNewWidthCancel, aBtnCancel.GetOutputSizePixel().Height());
+ aBtnCancel.SetOutputSizePixel(aNewSizeCancel);
+ aBtnCancel.SetPosSizePixel(Point(aNewPosCancel, aNewButtonY), aNewSizeCancel);
+
+ // for Help-Button
+ const long aNewWidthHelp((aBtnHelp.GetSizePixel().Width() * aNewSizeDialog.Width()) / aCurrentSizeDialog.Width());
+ const long aNewPosHelp((aBtnHelp.GetPosPixel().X() * aNewSizeDialog.Width()) / aCurrentSizeDialog.Width());
+ const Size aNewSizeHelp(aNewWidthHelp, aBtnHelp.GetOutputSizePixel().Height());
+ aBtnHelp.SetOutputSizePixel(aNewSizeHelp);
+ aBtnHelp.SetPosSizePixel(Point(aNewPosHelp, aNewButtonY), aNewSizeHelp);
+
+ // set new sizes for color control
+ aTabBgColorSet.SetOutputSizePixel(aNewSize);
+ aTabBgColorSet.SetPosSizePixel(Point(nAdd/2, nAdd/2), aNewSize);
+
+ // set new size for border win
+ aBorderWin.SetOutputSizePixel(aNewSizeBorderWin);
+
+ // set new size for dialog itself
+ SetOutputSizePixel(aNewSizeDialog);
}
- aTabBgColorSet.SetColCount( 10 );
- aTabBgColorSet.SetLineCount( 10 );
- aTabBgColorSet.CalcWindowSizePixel( aSize15x15 );
- aTabBgColorSet.Format();
+
aTabBgColorSet.SelectItem(nSelectedItem);
aTabBgColorSet.Resize();
}
@@ -156,7 +188,7 @@ IMPL_LINK_NOARG(ScTabBgColorDlg, TabBgColorOKHdl_Impl)
}
ScTabBgColorDlg::ScTabBgColorValueSet::ScTabBgColorValueSet( Control* pParent, const ResId& rResId, ScTabBgColorDlg* pTabBgColorDlg ) :
- ValueSet(pParent, rResId)
+ SvxColorValueSet(pParent, rResId)
{
aTabBgColorDlg = pTabBgColorDlg;
}
@@ -175,7 +207,7 @@ void ScTabBgColorDlg::ScTabBgColorValueSet::KeyInput( const KeyEvent& rKEvt )
}
break;
}
- ValueSet::KeyInput(rKEvt);
+ SvxColorValueSet::KeyInput(rKEvt);
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sd/source/ui/app/sddll2.cxx b/sd/source/ui/app/sddll2.cxx
index e961cbf06c6e..308841523265 100644
--- a/sd/source/ui/app/sddll2.cxx
+++ b/sd/source/ui/app/sddll2.cxx
@@ -28,7 +28,7 @@
#include <svx/galbrws.hxx>
#include <svx/srchdlg.hxx>
#include <svx/fontwork.hxx>
-#include <svx/colrctrl.hxx>
+#include <svx/SvxColorChildWindow.hxx>
#include <svx/verttexttbxctrl.hxx>
#include <svx/hyperdlg.hxx>
#include <svx/fillctrl.hxx>
diff --git a/sd/source/ui/slideshow/slideshowimpl.cxx b/sd/source/ui/slideshow/slideshowimpl.cxx
index 7bb32b86995d..6f67a1b2b7f2 100644
--- a/sd/source/ui/slideshow/slideshowimpl.cxx
+++ b/sd/source/ui/slideshow/slideshowimpl.cxx
@@ -50,7 +50,7 @@
#include <svx/f3dchild.hxx>
#include <svx/imapdlg.hxx>
#include <svx/fontwork.hxx>
-#include <svx/colrctrl.hxx>
+#include <svx/SvxColorChildWindow.hxx>
#include <svx/bmpmask.hxx>
#include <svx/srchdlg.hxx>
#include <svx/hyperdlg.hxx>
diff --git a/sd/source/ui/view/drviews2.cxx b/sd/source/ui/view/drviews2.cxx
index e5c12ca7dbee..37619aa294c2 100644
--- a/sd/source/ui/view/drviews2.cxx
+++ b/sd/source/ui/view/drviews2.cxx
@@ -93,6 +93,7 @@
#include <editeng/shdditem.hxx>
#include <svx/xtable.hxx>
#include <svx/svdobj.hxx>
+#include <svx/SvxColorChildWindow.hxx>
#include <editeng/outlobj.hxx>
#include <editeng/flstitem.hxx>
#include <editeng/scripttypeitem.hxx>
diff --git a/sd/source/ui/view/drviews6.cxx b/sd/source/ui/view/drviews6.cxx
index 8ccc1bd51777..a4b0c2e116ed 100644
--- a/sd/source/ui/view/drviews6.cxx
+++ b/sd/source/ui/view/drviews6.cxx
@@ -30,7 +30,7 @@
#include <svx/galbrws.hxx>
#include <svx/imapdlg.hxx>
#include <svx/xftsfit.hxx>
-#include <svx/colrctrl.hxx>
+#include <svx/SvxColorChildWindow.hxx>
#include <svx/f3dchild.hxx>
#include "optsitem.hxx"
#include <svx/extrusionbar.hxx>
diff --git a/sd/source/ui/view/drvwshrg.cxx b/sd/source/ui/view/drvwshrg.cxx
index abe2d38f8c44..c71959c2f3ff 100644
--- a/sd/source/ui/view/drvwshrg.cxx
+++ b/sd/source/ui/view/drvwshrg.cxx
@@ -26,7 +26,7 @@
#include <svx/bmpmask.hxx>
#include <svx/galbrws.hxx>
#include <svx/imapdlg.hxx>
-#include <svx/colrctrl.hxx>
+#include <svx/SvxColorChildWindow.hxx>
#include <sfx2/objface.hxx>
#include <sfx2/sidebar/SidebarChildWindow.hxx>
#include <svx/f3dchild.hxx>
diff --git a/svtools/source/config/accessibilityoptions.cxx b/svtools/source/config/accessibilityoptions.cxx
index 4bc165317aaf..a830a9998c82 100644
--- a/svtools/source/config/accessibilityoptions.cxx
+++ b/svtools/source/config/accessibilityoptions.cxx
@@ -54,6 +54,10 @@ namespace
const char s_sIsAutomaticFontColor[] = "IsAutomaticFontColor";
const char s_sIsSystemFont[] = "IsSystemFont";
const char s_sIsSelectionInReadonly[] = "IsSelectionInReadonly";
+ const char s_sColorValueSetMaximumRowCount[] = "ColorValueSetMaximumRowCount";
+ const char s_sColorValueSetEntryEdgeLength[] = "ColorValueSetEntryEdgeLength";
+ const char s_sColorValueSetColumnCount[] = "ColorValueSetColumnCount";
+ const char s_sEdgeBlending[] = "EdgeBlending";
}
// class SvtAccessibilityOptions_Impl ---------------------------------------------
@@ -78,6 +82,10 @@ public:
sal_Bool GetIsSystemFont() const;
sal_Int16 GetHelpTipSeconds() const;
sal_Bool IsSelectionInReadonly() const;
+ sal_Int16 GetColorValueSetMaximumRowCount() const;
+ sal_Int16 GetColorValueSetEntryEdgeLength() const;
+ sal_Int16 GetColorValueSetColumnCount() const;
+ sal_Int16 GetEdgeBlending() const;
void SetAutoDetectSystemHC(sal_Bool bSet);
void SetIsForPagePreviews(sal_Bool bSet);
@@ -88,6 +96,10 @@ public:
void SetIsSystemFont(sal_Bool bSet);
void SetHelpTipSeconds(sal_Int16 nSet);
void SetSelectionInReadonly(sal_Bool bSet);
+ void SetColorValueSetMaximumRowCount(sal_Int16 nSet);
+ void SetColorValueSetEntryEdgeLength(sal_Int16 nSet);
+ void SetColorValueSetColumnCount(sal_Int16 nSet);
+ void SetEdgeBlending(sal_Int16 nSet);
sal_Bool IsModified() const { return bIsModified; };
};
@@ -292,6 +304,78 @@ sal_Bool SvtAccessibilityOptions_Impl::IsSelectionInReadonly() const
return bRet;
}
+sal_Int16 SvtAccessibilityOptions_Impl::GetColorValueSetMaximumRowCount() const
+{
+ css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);
+ sal_Int16 nRet = 40;
+
+ try
+ {
+ if(xNode.is())
+ xNode->getPropertyValue(s_sColorValueSetMaximumRowCount) >>= nRet;
+ }
+ catch(const css::uno::Exception& ex)
+ {
+ SAL_WARN("svtools", "Caught unexpected: " << ex.Message);
+ }
+
+ return nRet;
+}
+
+sal_Int16 SvtAccessibilityOptions_Impl::GetColorValueSetEntryEdgeLength() const
+{
+ css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);
+ sal_Int16 nRet = 14;
+
+ try
+ {
+ if(xNode.is())
+ xNode->getPropertyValue(s_sColorValueSetEntryEdgeLength) >>= nRet;
+ }
+ catch(const css::uno::Exception& ex)
+ {
+ SAL_WARN("svtools", "Caught unexpected: " << ex.Message);
+ }
+
+ return nRet;
+}
+
+sal_Int16 SvtAccessibilityOptions_Impl::GetColorValueSetColumnCount() const
+{
+ css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);
+ sal_Int16 nRet = 12;
+
+ try
+ {
+ if(xNode.is())
+ xNode->getPropertyValue(s_sColorValueSetColumnCount) >>= nRet;
+ }
+ catch(const css::uno::Exception& ex)
+ {
+ SAL_WARN("svtools", "Caught unexpected: " << ex.Message);
+ }
+
+ return nRet;
+}
+
+sal_Int16 SvtAccessibilityOptions_Impl::GetEdgeBlending() const
+{
+ css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);
+ sal_Int16 nRet = 35;
+
+ try
+ {
+ if(xNode.is())
+ xNode->getPropertyValue(s_sEdgeBlending) >>= nRet;
+ }
+ catch(const css::uno::Exception& ex)
+ {
+ SAL_WARN("svtools", "Caught unexpected: " << ex.Message);
+ }
+
+ return nRet;
+}
+
void SvtAccessibilityOptions_Impl::SetAutoDetectSystemHC(sal_Bool bSet)
{
css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);
@@ -489,6 +573,86 @@ void SvtAccessibilityOptions_Impl::SetVCLSettings()
Application::SetSettings(aAllSettings);
}
+void SvtAccessibilityOptions_Impl::SetColorValueSetMaximumRowCount(sal_Int16 nSet)
+{
+ css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);
+
+ try
+ {
+ if(xNode.is() && xNode->getPropertyValue(s_sColorValueSetMaximumRowCount)!=nSet)
+ {
+ xNode->setPropertyValue(s_sColorValueSetMaximumRowCount, css::uno::makeAny(nSet));
+ ::comphelper::ConfigurationHelper::flush(m_xCfg);
+
+ bIsModified = sal_True;
+ }
+ }
+ catch(const css::uno::Exception& ex)
+ {
+ SAL_WARN("svtools", "Caught unexpected: " << ex.Message);
+ }
+}
+
+void SvtAccessibilityOptions_Impl::SetColorValueSetEntryEdgeLength(sal_Int16 nSet)
+{
+ css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);
+
+ try
+ {
+ if(xNode.is() && xNode->getPropertyValue(s_sColorValueSetEntryEdgeLength)!=nSet)
+ {
+ xNode->setPropertyValue(s_sColorValueSetEntryEdgeLength, css::uno::makeAny(nSet));
+ ::comphelper::ConfigurationHelper::flush(m_xCfg);
+
+ bIsModified = sal_True;
+ }
+ }
+ catch(const css::uno::Exception& ex)
+ {
+ SAL_WARN("svtools", "Caught unexpected: " << ex.Message);
+ }
+}
+
+void SvtAccessibilityOptions_Impl::SetColorValueSetColumnCount(sal_Int16 nSet)
+{
+ css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);
+
+ try
+ {
+ if(xNode.is() && xNode->getPropertyValue(s_sColorValueSetColumnCount)!=nSet)
+ {
+ xNode->setPropertyValue(s_sColorValueSetColumnCount, css::uno::makeAny(nSet));
+ ::comphelper::ConfigurationHelper::flush(m_xCfg);
+
+ bIsModified = sal_True;
+ }
+ }
+ catch(const css::uno::Exception& ex)
+ {
+ SAL_WARN("svtools", "Caught unexpected: " << ex.Message);
+ }
+}
+
+void SvtAccessibilityOptions_Impl::SetEdgeBlending(sal_Int16 nSet)
+{
+ css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);
+
+ try
+ {
+ if(xNode.is() && xNode->getPropertyValue(s_sEdgeBlending)!=nSet)
+ {
+ xNode->setPropertyValue(s_sEdgeBlending, css::uno::makeAny(nSet));
+ ::comphelper::ConfigurationHelper::flush(m_xCfg);
+
+ bIsModified = sal_True;
+ }
+ }
+ catch(const css::uno::Exception& ex)
+ {
+ SAL_WARN("svtools", "Caught unexpected: " << ex.Message);
+ }
+}
+
// -----------------------------------------------------------------------
// class SvtAccessibilityOptions --------------------------------------------------
@@ -582,6 +746,26 @@ sal_Bool SvtAccessibilityOptions::IsSelectionInReadonly() const
return sm_pSingleImplConfig->IsSelectionInReadonly();
}
+sal_Int16 SvtAccessibilityOptions::GetColorValueSetMaximumRowCount() const
+{
+ return sm_pSingleImplConfig->GetColorValueSetMaximumRowCount();
+}
+
+sal_Int16 SvtAccessibilityOptions::GetColorValueSetEntryEdgeLength() const
+{
+ return sm_pSingleImplConfig->GetColorValueSetEntryEdgeLength();
+}
+
+sal_Int16 SvtAccessibilityOptions::GetColorValueSetColumnCount() const
+{
+ return sm_pSingleImplConfig->GetColorValueSetColumnCount();
+}
+
+sal_Int16 SvtAccessibilityOptions::GetEdgeBlending() const
+{
+ return sm_pSingleImplConfig->GetEdgeBlending();
+}
+
// -----------------------------------------------------------------------
void SvtAccessibilityOptions::SetAutoDetectSystemHC(sal_Bool bSet)
{
@@ -619,11 +803,26 @@ void SvtAccessibilityOptions::SetSelectionInReadonly(sal_Bool bSet)
{
sm_pSingleImplConfig->SetSelectionInReadonly(bSet);
}
-
void SvtAccessibilityOptions::SetVCLSettings()
{
sm_pSingleImplConfig->SetVCLSettings();
}
+void SvtAccessibilityOptions::SetColorValueSetMaximumRowCount(sal_Int16 nSet)
+{
+ sm_pSingleImplConfig->SetColorValueSetMaximumRowCount(nSet);
+}
+void SvtAccessibilityOptions::SetColorValueSetEntryEdgeLength(sal_Int16 nSet)
+{
+ sm_pSingleImplConfig->SetColorValueSetEntryEdgeLength(nSet);
+}
+void SvtAccessibilityOptions::SetColorValueSetColumnCount(sal_Int16 nSet)
+{
+ sm_pSingleImplConfig->SetColorValueSetColumnCount(nSet);
+}
+void SvtAccessibilityOptions::SetEdgeBlending(sal_Int16 nSet)
+{
+ sm_pSingleImplConfig->SetEdgeBlending(nSet);
+}
// -----------------------------------------------------------------------
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/source/control/valueset.cxx b/svtools/source/control/valueset.cxx
index 9eb212488195..1006bf0d6800 100644
--- a/svtools/source/control/valueset.cxx
+++ b/svtools/source/control/valueset.cxx
@@ -28,7 +28,7 @@
#include <com/sun/star/accessibility/AccessibleStateType.hpp>
#include <com/sun/star/lang/XComponent.hpp>
#include <rtl/ustring.hxx>
-
+#include <svtools/accessibilityoptions.hxx>
#include "valueimp.hxx"
#include <svtools/valueset.hxx>
@@ -294,6 +294,25 @@ void ValueSet::ImplFormatItem( ValueSetItem* pItem, Rectangle aRect )
{
maVirDev.SetFillColor( pItem->maColor );
maVirDev.DrawRect( aRect );
+
+ const SvtAccessibilityOptions aOptions;
+ const sal_Int16 nEdgeBlendingPercent(aOptions.GetEdgeBlending());
+ static bool bTest(false);
+
+ if(nEdgeBlendingPercent && bTest)
+ {
+ Bitmap aBitmap(maVirDev.GetBitmap(aRect.TopLeft(), aRect.GetSize()));
+
+ if(!aBitmap.IsEmpty())
+ {
+ const Color aTopLeft(COL_WHITE);
+ const Color aBottomRight(COL_BLACK);
+ const sal_uInt8 nAlpha((nEdgeBlendingPercent * 255) / 100);
+
+ aBitmap.DrawBlendFrame(nAlpha, aTopLeft, aBottomRight);
+ maVirDev.DrawBitmap(aRect.TopLeft(), aBitmap);
+ }
+ }
}
else
{
diff --git a/svx/Library_svx.mk b/svx/Library_svx.mk
index 3089cdebd440..420bb635df4e 100644
--- a/svx/Library_svx.mk
+++ b/svx/Library_svx.mk
@@ -214,6 +214,7 @@ $(eval $(call gb_Library_add_exception_objects,svx,\
svx/source/table/tablertfexporter \
svx/source/table/tablertfimporter \
svx/source/tbxctrls/colrctrl \
+ svx/source/tbxctrls/SvxColorChildWindow \
svx/source/tbxctrls/fillctrl \
svx/source/tbxctrls/formatpaintbrushctrl \
svx/source/tbxctrls/grafctrl \
diff --git a/svx/Library_svxcore.mk b/svx/Library_svxcore.mk
index 2f3eaf9eaffe..94fbf167f8fd 100644
--- a/svx/Library_svxcore.mk
+++ b/svx/Library_svxcore.mk
@@ -334,6 +334,7 @@ $(eval $(call gb_Library_add_exception_objects,svxcore,\
svx/source/tbxctrls/fontworkgallery \
svx/source/tbxctrls/tbcontrl \
svx/source/tbxctrls/tbxcolorupdate \
+ svx/source/tbxctrls/SvxColorValueSet \
svx/source/toolbars/extrusionbar \
svx/source/toolbars/fontworkbar \
svx/source/unodraw/gluepts \
diff --git a/svx/inc/svx/sidebar/ColorControl.hxx b/svx/inc/svx/sidebar/ColorControl.hxx
index 58ab534c1aa1..606a906eccdb 100644
--- a/svx/inc/svx/sidebar/ColorControl.hxx
+++ b/svx/inc/svx/sidebar/ColorControl.hxx
@@ -19,6 +19,7 @@
#include <svtools/valueset.hxx>
#include <boost/function.hpp>
+#include <svx/SvxColorValueSet.hxx>
class Window;
class SfxBindings;
@@ -69,7 +70,7 @@ public:
private:
SfxBindings* mpBindings;
- ValueSet maVSColor;
+ SvxColorValueSet maVSColor;
FloatingWindow* mpFloatingWindow;
const String msNoColorString;
::boost::function<Color(void)> maNoColorGetter;
diff --git a/svx/source/sidebar/tools/ColorControl.cxx b/svx/source/sidebar/tools/ColorControl.cxx
index 85d3f3539fcf..3a517b9fa05f 100644
--- a/svx/source/sidebar/tools/ColorControl.cxx
+++ b/svx/source/sidebar/tools/ColorControl.cxx
@@ -104,6 +104,7 @@ ColorControl::ColorControl (
maColorSetter(rColorSetter)
{
FreeResource();
+ FillColors();
}
@@ -121,40 +122,37 @@ void ColorControl::FillColors (void)
if (xColorTable.is())
{
- const long nColorCount (xColorTable->Count());
+ const long nColorCount(xColorTable->Count());
if (nColorCount <= 0)
return;
- const sal_Int32 nColumnCount (ceil(sqrt(double(nColorCount))));
- const sal_Int32 nRowCount (ceil(double(nColorCount)/nColumnCount));
- maVSColor.SetColCount(nColumnCount);
- maVSColor.SetLineCount(nRowCount);
- const sal_Int32 nItemSize (15*12 / ::std::max<sal_Int32>(nColumnCount, nRowCount));
- maVSColor.CalcWindowSizePixel(Size(nItemSize,nItemSize));
- Link aLink = LINK(this, ColorControl, VSSelectHdl);
- maVSColor.SetSelectHdl(aLink);
- maVSColor.SetStyle(
- (maVSColor.GetStyle()
- | WB_TABSTOP | WB_ITEMBORDER | WB_NAMEFIELD// | WB_FLATVALUESET
- | WB_NO_DIRECTSELECT | WB_MENUSTYLEVALUESET | WB_NO_DIRECTSELECT)
- & ~WB_VSCROLL);
- if (msNoColorString.Len() > 0)
+ const WinBits aWinBits(maVSColor.GetStyle() | WB_TABSTOP | WB_ITEMBORDER | WB_NAMEFIELD |
+ WB_NO_DIRECTSELECT | WB_MENUSTYLEVALUESET | WB_NO_DIRECTSELECT);
+
+ maVSColor.SetStyle(aWinBits);
+
+ // neds to be done *before* layouting
+ if(msNoColorString.Len() > 0)
{
maVSColor.SetStyle(maVSColor.GetStyle() | WB_NONEFIELD);
maVSColor.SetText(msNoColorString);
}
+ const Size aNewSize(maVSColor.layoutAllVisible(nColorCount));
+ maVSColor.SetOutputSizePixel(aNewSize);
+ static sal_Int32 nAdd = 4;
+
+ SetOutputSizePixel(Size(aNewSize.Width() + nAdd, aNewSize.Height() + nAdd));
+ Link aLink = LINK(this, ColorControl, VSSelectHdl);
+ maVSColor.SetSelectHdl(aLink);
+
// Now, after all calls to SetStyle, we can change the
// background color.
maVSColor.SetBackground(Theme::GetWallpaper(Theme::Paint_DropDownBackground));
+ // add entrties
maVSColor.Clear();
- XColorEntry* pEntry = NULL;
- for (sal_Int32 nIndex=0; nIndex<nColorCount; ++nIndex)
- {
- pEntry = xColorTable->GetColor(nIndex);
- maVSColor.InsertItem(nIndex+1, pEntry->GetColor(), pEntry->GetName() );
- }
+ maVSColor.addEntriesForXColorList(*xColorTable);
}
maVSColor.Show();
@@ -173,7 +171,7 @@ void ColorControl::GetFocus (void)
void ColorControl::SetCurColorSelect (Color aCol, bool bAvailable)
{
- FillColors();
+// FillColors();
short nCol = GetItemId_Imp( maVSColor, aCol );
if(! bAvailable)
{
@@ -188,7 +186,9 @@ void ColorControl::SetCurColorSelect (Color aCol, bool bAvailable)
}
else
{
- maVSColor.SelectItem( nCol );
+ // remove selection first to force evtl. scroll when scroll is needed
+ maVSColor.SetNoSelection();
+ maVSColor.SelectItem(nCol);
}
}
diff --git a/svx/source/tbxctrls/SvxColorChildWindow.cxx b/svx/source/tbxctrls/SvxColorChildWindow.cxx
new file mode 100644
index 000000000000..1ce729e90024
--- /dev/null
+++ b/svx/source/tbxctrls/SvxColorChildWindow.cxx
@@ -0,0 +1,47 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <svx/SvxColorChildWindow.hxx>
+#include <sfx2/dockwin.hxx>
+#include <svx/svxids.hrc>
+#include <svx/dialogs.hrc>
+#include <svx/colrctrl.hxx>
+#include <svx/dialmgr.hxx>
+
+SFX_IMPL_DOCKINGWINDOW_WITHID( SvxColorChildWindow, SID_COLOR_CONTROL )
+
+/*************************************************************************
+|*
+|* Ableitung vom SfxChildWindow als "Behaelter" fuer Animator
+|*
+\************************************************************************/
+
+SvxColorChildWindow::SvxColorChildWindow( Window* _pParent,
+ sal_uInt16 nId,
+ SfxBindings* pBindings,
+ SfxChildWinInfo* pInfo ) :
+ SfxChildWindow( _pParent, nId )
+{
+ SvxColorDockingWindow* pWin = new SvxColorDockingWindow( pBindings, this,
+ _pParent, SVX_RES( RID_SVXCTRL_COLOR ) );
+ pWindow = pWin;
+
+ eChildAlignment = SFX_ALIGN_BOTTOM;
+
+ pWin->Initialize( pInfo );
+}
diff --git a/svx/source/tbxctrls/SvxColorValueSet.cxx b/svx/source/tbxctrls/SvxColorValueSet.cxx
new file mode 100644
index 000000000000..34dfa6c07224
--- /dev/null
+++ b/svx/source/tbxctrls/SvxColorValueSet.cxx
@@ -0,0 +1,149 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <svx/SvxColorValueSet.hxx>
+#include <svx/xtable.hxx>
+#include <svtools/accessibilityoptions.hxx>
+
+//////////////////////////////////////////////////////////////////////////////
+
+SvxColorValueSet::SvxColorValueSet(Window* _pParent, WinBits nWinStyle)
+: ValueSet(_pParent, nWinStyle)
+{
+}
+
+SvxColorValueSet::SvxColorValueSet(Window* _pParent, const ResId& rResId)
+: ValueSet(_pParent, rResId)
+{
+}
+
+sal_uInt32 SvxColorValueSet::getMaxRowCount() const
+{
+ const SvtAccessibilityOptions aOptions;
+
+ return aOptions.GetColorValueSetMaximumRowCount();
+}
+
+sal_uInt32 SvxColorValueSet::getEntryEdgeLength() const
+{
+ const SvtAccessibilityOptions aOptions;
+
+ return aOptions.GetColorValueSetEntryEdgeLength();
+}
+
+sal_uInt32 SvxColorValueSet::getColumnCount() const
+{
+ const SvtAccessibilityOptions aOptions;
+
+ return aOptions.GetColorValueSetColumnCount();
+}
+
+void SvxColorValueSet::addEntriesForXColorList(const XColorList& rXColorList, sal_uInt32 nStartIndex)
+{
+ const sal_uInt32 nColorCount(rXColorList.Count());
+
+ for(sal_uInt32 nIndex(0); nIndex < nColorCount; nIndex++, nStartIndex++)
+ {
+ const XColorEntry* pEntry = rXColorList.GetColor(nIndex);
+
+ if(pEntry)
+ {
+ InsertItem(nStartIndex, pEntry->GetColor(), pEntry->GetName());
+ }
+ else
+ {
+ OSL_ENSURE(false, "OOps, XColorList with empty entries (!)");
+ }
+ }
+}
+
+Size SvxColorValueSet::layoutAllVisible(sal_uInt32 nEntryCount)
+{
+ if(!nEntryCount)
+ {
+ nEntryCount++;
+ }
+
+ const sal_uInt32 nRowCount(ceil(double(nEntryCount)/getColumnCount()));
+ const Size aItemSize(getEntryEdgeLength() - 2, getEntryEdgeLength() - 2);
+ const WinBits aWinBits(GetStyle() & ~WB_VSCROLL);
+
+ if(nRowCount > getMaxRowCount())
+ {
+ SetStyle(aWinBits|WB_VSCROLL);
+ }
+ else
+ {
+ SetStyle(aWinBits);
+ }
+
+ SetColCount(getColumnCount());
+ SetLineCount(std::min(nRowCount, getMaxRowCount()));
+ SetItemWidth(aItemSize.Width());
+ SetItemHeight(aItemSize.Height());
+
+ return CalcWindowSizePixel(aItemSize);
+}
+
+Size SvxColorValueSet::layoutToGivenHeight(sal_uInt32 nHeight, sal_uInt32 nEntryCount)
+{
+ if(!nEntryCount)
+ {
+ nEntryCount++;
+ }
+
+ const Size aItemSize(getEntryEdgeLength(), getEntryEdgeLength());
+ const WinBits aWinBits(GetStyle() & ~WB_VSCROLL);
+
+ // get size whith all fields disabled
+ const WinBits aWinBitsNoScrollNoFields(GetStyle() & ~(WB_VSCROLL|WB_NAMEFIELD|WB_NONEFIELD));
+ SetStyle(aWinBitsNoScrollNoFields);
+ const Size aSizeNoScrollNoFields(CalcWindowSizePixel(aItemSize, getColumnCount()));
+
+ // get size with all needed fields
+ SetStyle(aWinBits);
+ Size aNewSize(CalcWindowSizePixel(aItemSize, getColumnCount()));
+
+ // evtl. activate vertical scroll
+ const bool bAdaptHeight(static_cast< sal_uInt32 >(aNewSize.Height()) > nHeight);
+
+ if(bAdaptHeight)
+ {
+ SetStyle(aWinBits|WB_VSCROLL);
+ aNewSize = CalcWindowSizePixel(aItemSize, getColumnCount());
+ }
+
+ // calculate field height and available height for requested height
+ const sal_uInt32 nFieldHeight(aNewSize.Height() - aSizeNoScrollNoFields.Height());
+ const sal_uInt32 nAvailableHeight(nHeight >= nFieldHeight ? nHeight - nFieldHeight : 0);
+
+ // calculate how many lines can be shown there
+ const Size aItemSizePixel(CalcItemSizePixel(aItemSize));
+ const sal_uInt32 nLineCount((nAvailableHeight + aItemSizePixel.Height() - 1) / aItemSizePixel.Height());
+
+ // set height to wanted height
+ aNewSize.Height() = nHeight;
+
+ SetItemWidth(aItemSize.Width());
+ SetItemHeight(aItemSize.Height());
+ SetColCount(getColumnCount());
+ SetLineCount(nLineCount);
+
+ return aNewSize;
+}
+
diff --git a/svx/source/tbxctrls/colorwindow.hxx b/svx/source/tbxctrls/colorwindow.hxx
index 42516081e956..1a0bf5f146e9 100644
--- a/svx/source/tbxctrls/colorwindow.hxx
+++ b/svx/source/tbxctrls/colorwindow.hxx
@@ -28,6 +28,7 @@
#include <svl/lstner.hxx>
#include <rtl/ustring.hxx>
#include <com/sun/star/frame/XFrame.hpp>
+#include <svx/SvxColorValueSet.hxx>
//========================================================================
// class SvxColorWindow_Impl --------------------------------------------------
@@ -39,7 +40,7 @@ class SvxColorWindow_Impl : public SfxPopupWindow
private:
const sal_uInt16 theSlotId;
- ValueSet aColorSet;
+ SvxColorValueSet aColorSet;
OUString maCommand;
const Color mLastColor;
diff --git a/svx/source/tbxctrls/colrctrl.cxx b/svx/source/tbxctrls/colrctrl.cxx
index aec84efc13b4..9f9e89deda82 100644
--- a/svx/source/tbxctrls/colrctrl.cxx
+++ b/svx/source/tbxctrls/colrctrl.cxx
@@ -36,8 +36,6 @@
#include "svx/xexch.hxx"
#include <vcl/svapp.hxx>
-SFX_IMPL_DOCKINGWINDOW_WITHID( SvxColorChildWindow, SID_COLOR_CONTROL )
-
// ------------------------
// - SvxColorValueSetData -
// ------------------------
@@ -92,41 +90,41 @@ sal_Bool SvxColorValueSetData::WriteObject( SotStorageStreamRef& rxOStm, void*,
/*************************************************************************
|*
-|* SvxColorValueSet: Ctor
+|* SvxColorValueSet_docking: Ctor
|*
\************************************************************************/
-SvxColorValueSet::SvxColorValueSet( Window* _pParent, const ResId& rResId ) :
- ValueSet( _pParent, rResId ),
+SvxColorValueSet_docking::SvxColorValueSet_docking( Window* _pParent, const ResId& rResId ) :
+ SvxColorValueSet( _pParent, rResId ),
DragSourceHelper( this ),
- bLeft (sal_True)
+ mbLeftButton(true)
{
SetAccessibleName(String( SVX_RES( STR_COLORTABLE ) ));
}
/*************************************************************************
|*
-|* SvxColorValueSet: MouseButtonDown
+|* SvxColorValueSet_docking: MouseButtonDown
|*
\************************************************************************/
-void SvxColorValueSet::MouseButtonDown( const MouseEvent& rMEvt )
+void SvxColorValueSet_docking::MouseButtonDown( const MouseEvent& rMEvt )
{
// Fuer Mac noch anders handlen !
if( rMEvt.IsLeft() )
{
- bLeft = sal_True;
- ValueSet::MouseButtonDown( rMEvt );
+ mbLeftButton = true;
+ SvxColorValueSet::MouseButtonDown( rMEvt );
}
else
{
- bLeft = sal_False;
+ mbLeftButton = false;
MouseEvent aMEvt( rMEvt.GetPosPixel(),
rMEvt.GetClicks(),
rMEvt.GetMode(),
MOUSE_LEFT,
rMEvt.GetModifier() );
- ValueSet::MouseButtonDown( aMEvt );
+ SvxColorValueSet::MouseButtonDown( aMEvt );
}
aDragPosPixel = GetPointerPosPixel();
@@ -134,27 +132,27 @@ void SvxColorValueSet::MouseButtonDown( const MouseEvent& rMEvt )
/*************************************************************************
|*
-|* SvxColorValueSet: MouseButtonUp
+|* SvxColorValueSet_docking: MouseButtonUp
|*
\************************************************************************/
-void SvxColorValueSet::MouseButtonUp( const MouseEvent& rMEvt )
+void SvxColorValueSet_docking::MouseButtonUp( const MouseEvent& rMEvt )
{
// Fuer Mac noch anders handlen !
if( rMEvt.IsLeft() )
{
- bLeft = sal_True;
- ValueSet::MouseButtonUp( rMEvt );
+ mbLeftButton = true;
+ SvxColorValueSet::MouseButtonUp( rMEvt );
}
else
{
- bLeft = sal_False;
+ mbLeftButton = false;
MouseEvent aMEvt( rMEvt.GetPosPixel(),
rMEvt.GetClicks(),
rMEvt.GetMode(),
MOUSE_LEFT,
rMEvt.GetModifier() );
- ValueSet::MouseButtonUp( aMEvt );
+ SvxColorValueSet::MouseButtonUp( aMEvt );
}
SetNoSelection();
}
@@ -165,10 +163,10 @@ void SvxColorValueSet::MouseButtonUp( const MouseEvent& rMEvt )
|*
\************************************************************************/
-void SvxColorValueSet::Command(const CommandEvent& rCEvt)
+void SvxColorValueSet_docking::Command(const CommandEvent& rCEvt)
{
// Basisklasse
- ValueSet::Command(rCEvt);
+ SvxColorValueSet::Command(rCEvt);
}
/*************************************************************************
@@ -177,9 +175,9 @@ void SvxColorValueSet::Command(const CommandEvent& rCEvt)
|*
\************************************************************************/
-void SvxColorValueSet::StartDrag( sal_Int8 , const Point& )
+void SvxColorValueSet_docking::StartDrag( sal_Int8 , const Point& )
{
- Application::PostUserEvent(STATIC_LINK(this, SvxColorValueSet, ExecDragHdl));
+ Application::PostUserEvent(STATIC_LINK(this, SvxColorValueSet_docking, ExecDragHdl));
}
/*************************************************************************
@@ -188,7 +186,7 @@ void SvxColorValueSet::StartDrag( sal_Int8 , const Point& )
|*
\************************************************************************/
-void SvxColorValueSet::DoDrag()
+void SvxColorValueSet_docking::DoDrag()
{
SfxObjectShell* pDocSh = SfxObjectShell::Current();
sal_uInt16 nItemId = GetItemId( aDragPosPixel );
@@ -207,7 +205,7 @@ void SvxColorValueSet::DoDrag()
}
}
-IMPL_STATIC_LINK(SvxColorValueSet, ExecDragHdl, void*, EMPTYARG)
+IMPL_STATIC_LINK(SvxColorValueSet_docking, ExecDragHdl, void*, EMPTYARG)
{
// Als Link, damit asynchron ohne ImpMouseMoveMsg auf dem Stack auch die
// Farbleiste geloescht werden darf
@@ -217,29 +215,6 @@ IMPL_STATIC_LINK(SvxColorValueSet, ExecDragHdl, void*, EMPTYARG)
/*************************************************************************
|*
-|* Ableitung vom SfxChildWindow als "Behaelter" fuer Animator
-|*
-\************************************************************************/
-
-SvxColorChildWindow::SvxColorChildWindow( Window* _pParent,
- sal_uInt16 nId,
- SfxBindings* pBindings,
- SfxChildWinInfo* pInfo ) :
- SfxChildWindow( _pParent, nId )
-{
- SvxColorDockingWindow* pWin = new SvxColorDockingWindow( pBindings, this,
- _pParent, SVX_RES( RID_SVXCTRL_COLOR ) );
- pWindow = pWin;
-
- eChildAlignment = SFX_ALIGN_BOTTOM;
-
- pWin->Initialize( pInfo );
-}
-
-
-
-/*************************************************************************
-|*
|* Ctor: SvxColorDockingWindow
|*
\************************************************************************/
@@ -258,8 +233,7 @@ SvxColorDockingWindow::SvxColorDockingWindow
nLeftSlot ( SID_ATTR_FILL_COLOR ),
nRightSlot ( SID_ATTR_LINE_COLOR ),
nCols ( 20 ),
- nLines ( 1 ),
- aColorSize ( 14, 14 )
+ nLines ( 1 )
{
FreeResource();
@@ -294,10 +268,11 @@ SvxColorDockingWindow::SvxColorDockingWindow
FillValueSet();
}
}
- aItemSize = aColorSet.CalcItemSizePixel( aColorSize );
- aItemSize.Width() = aItemSize.Width() + aColorSize.Width();
+
+ aItemSize = aColorSet.CalcItemSizePixel(Size(aColorSet.getEntryEdgeLength(), aColorSet.getEntryEdgeLength()));
+ aItemSize.Width() = aItemSize.Width() + aColorSet.getEntryEdgeLength();
aItemSize.Width() /= 2;
- aItemSize.Height() = aItemSize.Height() + aColorSize.Height();
+ aItemSize.Height() = aItemSize.Height() + aColorSet.getEntryEdgeLength();
aItemSize.Height() /= 2;
SetSize();
@@ -345,12 +320,15 @@ void SvxColorDockingWindow::FillValueSet()
{
if( pColorList.is() )
{
+ nCount = pColorList->Count();
aColorSet.Clear();
- // Erster Eintrag: unsichtbar
+ // create the first entry for 'invisible/none'
+ const Size aColorSize(aColorSet.getEntryEdgeLength(), aColorSet.getEntryEdgeLength());
long nPtX = aColorSize.Width() - 1;
long nPtY = aColorSize.Height() - 1;
VirtualDevice aVD;
+
aVD.SetOutputSizePixel( aColorSize );
aVD.SetLineColor( Color( COL_BLACK ) );
aVD.SetBackground( Wallpaper( Color( COL_WHITE ) ) );
@@ -361,15 +339,7 @@ void SvxColorDockingWindow::FillValueSet()
aColorSet.InsertItem( (sal_uInt16)1, Image(aBmp), SVX_RESSTR( RID_SVXSTR_INVISIBLE ) );
- XColorEntry* pEntry;
- nCount = pColorList->Count();
-
- for( long i = 0; i < nCount; i++ )
- {
- pEntry = pColorList->GetColor( i );
- aColorSet.InsertItem( (sal_uInt16)i+2,
- pEntry->GetColor(), pEntry->GetName() );
- }
+ aColorSet.addEntriesForXColorList(*pColorList, 2);
}
}
diff --git a/svx/source/tbxctrls/tbcontrl.cxx b/svx/source/tbxctrls/tbcontrl.cxx
index 981e9fbdc1df..e58ddaef6e8f 100644
--- a/svx/source/tbxctrls/tbcontrl.cxx
+++ b/svx/source/tbxctrls/tbcontrl.cxx
@@ -1065,10 +1065,6 @@ void SvxFontNameBox_Impl::Select()
#define WB_NO_DIRECTSELECT ((WinBits)0x04000000)
#endif
-#define PALETTE_X 8
-#define PALETTE_Y 13
-#define PALETTE_SIZE (PALETTE_X * PALETTE_Y)
-
SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString& rCommand,
sal_uInt16 nSlotId,
const Reference< XFrame >& rFrame,
@@ -1087,7 +1083,6 @@ SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString& rCommand,
SfxObjectShell* pDocSh = SfxObjectShell::Current();
const SfxPoolItem* pItem = NULL;
XColorListRef pColorList;
- const Size aSize12( 13, 13 );
if ( pDocSh )
if ( 0 != ( pItem = pDocSh->GetItem( SID_COLOR_TABLE ) ) )
@@ -1125,41 +1120,19 @@ SvxColorWindow_Impl::SvxColorWindow_Impl( const OUString& rCommand,
if ( pColorList.is() )
{
- short i = 0;
- long nCount = pColorList->Count();
- XColorEntry* pEntry = NULL;
- ::Color aColWhite( COL_WHITE );
- String aStrWhite( EditResId(RID_SVXITEMS_COLOR_WHITE) );
-
- if ( nCount > PALETTE_SIZE )
- // Show scrollbar if more than PALLETTE_SIZE colors are available
- aColorSet.SetStyle( aColorSet.GetStyle() | WB_VSCROLL );
-
- for ( i = 0; i < nCount; i++ )
- {
- pEntry = pColorList->GetColor(i);
- aColorSet.InsertItem( i+1, pEntry->GetColor(), pEntry->GetName() );
- if( pEntry->GetColor() == mLastColor )
- aColorSet.SelectItem( i+1 );
- }
+ const long nColorCount(pColorList->Count());
+ const Size aNewSize(aColorSet.layoutAllVisible(nColorCount));
+ aColorSet.SetOutputSizePixel(aNewSize);
+ static sal_Int32 nAdd = 4;
- while ( i < PALETTE_SIZE )
- {
- // fill empty elements if less then PALLETTE_SIZE colors are available
- aColorSet.InsertItem( i+1, aColWhite, aStrWhite );
- i++;
- }
+ SetOutputSizePixel(Size(aNewSize.Width() + nAdd, aNewSize.Height() + nAdd));
+ aColorSet.Clear();
+ aColorSet.addEntriesForXColorList(*pColorList);
}
aColorSet.SetSelectHdl( LINK( this, SvxColorWindow_Impl, SelectHdl ) );
- aColorSet.SetColCount( PALETTE_X );
- aColorSet.SetLineCount( PALETTE_Y );
-
- lcl_CalcSizeValueSet( *this, aColorSet, aSize12 );
-
SetHelpId( HID_POPUP_COLOR );
aColorSet.SetHelpId( HID_POPUP_COLOR_CTRL );
-
SetText( rWndTitle );
aColorSet.Show();
@@ -1264,34 +1237,14 @@ void SvxColorWindow_Impl::StateChanged( sal_uInt16 nSID, SfxItemState eState, co
if ( pState )
{
XColorListRef pColorList = ((SvxColorListItem *)pState)->GetColorList();
-
- short i = 0;
- long nCount = pColorList->Count();
- XColorEntry* pEntry = NULL;
- ::Color aColWhite( COL_WHITE );
- String aStrWhite( EditResId(RID_SVXITEMS_COLOR_WHITE) );
-
- // ScrollBar on or off
- WinBits nBits = aColorSet.GetStyle();
- if ( nCount > PALETTE_SIZE )
- nBits &= ~WB_VSCROLL;
- else
- nBits |= WB_VSCROLL;
- aColorSet.SetStyle( nBits );
-
- for ( i = 0; i < nCount; ++i )
- {
- pEntry = pColorList->GetColor(i);
- aColorSet.SetItemColor( i + 1, pEntry->GetColor() );
- aColorSet.SetItemText ( i + 1, pEntry->GetName() );
- }
-
- while ( i < PALETTE_SIZE )
- {
- aColorSet.SetItemColor( i + 1, aColWhite );
- aColorSet.SetItemText ( i + 1, aStrWhite );
- i++;
- }
+ const long nColorCount(pColorList->Count());
+ const Size aNewSize(aColorSet.layoutAllVisible(nColorCount));
+ aColorSet.SetOutputSizePixel(aNewSize);
+ static sal_Int32 nAdd = 4;
+
+ SetOutputSizePixel(Size(aNewSize.Width() + nAdd, aNewSize.Height() + nAdd));
+ aColorSet.Clear();
+ aColorSet.addEntriesForXColorList(*pColorList);
}
}
}
diff --git a/vcl/source/gdi/bitmap4.cxx b/vcl/source/gdi/bitmap4.cxx
index b0afd67b2ed0..efe8209129e2 100644
--- a/vcl/source/gdi/bitmap4.cxx
+++ b/vcl/source/gdi/bitmap4.cxx
@@ -1165,4 +1165,196 @@ bool Bitmap::ImplSeparableUnsharpenFilter(const double radius) {
}
+void impMixPixel(BitmapWriteAccess& rAcc, long y, long x, const Color& rColor, sal_uInt8 nAlpha)
+{
+ const BitmapColor aBitmapColor(rColor);
+
+ if(nAlpha)
+ {
+ if(255 != nAlpha)
+ {
+ BitmapColor aTarget(rAcc.GetColor(y, x));
+
+ aTarget.Merge(aBitmapColor, nAlpha);
+ rAcc.SetPixel(y, x, aTarget);
+ }
+ }
+ else
+ {
+ rAcc.SetPixel(y, x, aBitmapColor);
+ }
+}
+
+inline bool impVisibleX(long x, const Size& rSizePixel)
+{
+ return x >= 0 && x < rSizePixel.Width();
+}
+
+inline bool impVisibleY(long y, const Size& rSizePixel)
+{
+ return y >= 0 && y < rSizePixel.Width();
+}
+
+inline bool impVisibleXY(long y, long x, const Size& rSizePixel)
+{
+ return impVisibleX(x, rSizePixel) && impVisibleY(y, rSizePixel);
+}
+
+void Bitmap::DrawBlendFrame(
+ const Point& rTopLeft,
+ const Size& rSize,
+ sal_uInt8 nAlpha,
+ Color aColorTopLeft,
+ Color aColorTopRight,
+ Color aColorBottomRight,
+ Color aColorBottomLeft)
+{
+ if(!IsEmpty())
+ {
+ const Size aSizePixel(GetSizePixel());
+
+ if(aSizePixel.Width() && aSizePixel.Height())
+ {
+ const long nW(rSize.Width());
+ const long nH(rSize.Height());
+
+ if(nW || nH)
+ {
+ BitmapWriteAccess* pAcc = AcquireWriteAccess();
+ const long nStartX(rTopLeft.X());
+ const long nStartY(rTopLeft.X());
+ const long nEndX(rTopLeft.X() + nW);
+ const long nEndY(rTopLeft.X() + nH);
+ long x(nStartX);
+ long y(nStartY);
+
+ if(pAcc)
+ {
+ if(impVisibleXY(y, x, aSizePixel))
+ {
+ // x == nStartX, y == nStartY
+ impMixPixel(*pAcc, y, x, aColorTopLeft, nAlpha);
+ }
+
+ if(impVisibleY(y, aSizePixel))
+ {
+ for(x = 1; x < nEndX - 1; x++) // y == nStartY
+ {
+ if(impVisibleX(x, aSizePixel))
+ {
+ Color aMix(aColorTopLeft);
+ aMix.Merge(aColorTopRight, 255 - sal_uInt8(((x - nStartX) * 255) / nW));
+ impMixPixel(*pAcc, y, x, aMix, nAlpha);
+ }
+ }
+ }
+ else
+ {
+ x = nEndX - 1;
+ }
+
+ if(impVisibleXY(y, x, aSizePixel))
+ {
+ // x == nEndX - 1, y == nStartY
+ impMixPixel(*pAcc, y, x, aColorTopRight, nAlpha);
+ }
+
+ const bool bLeftVisible(impVisibleX(nStartX, aSizePixel));
+ const bool bRightVisible(impVisibleX(x, aSizePixel));
+
+ if(bLeftVisible || bRightVisible)
+ {
+ if(bLeftVisible)
+ {
+ for(y = 1; y < nEndY - 1; y++) // x == nStartX and nEndX-1
+ {
+ if(impVisibleY(y, aSizePixel))
+ {
+ Color aMix(aColorTopLeft);
+ aMix.Merge(aColorBottomLeft, 255 - sal_uInt8(((y - nStartY) * 255) / nH));
+ impMixPixel(*pAcc, y, nStartX, aMix, nAlpha);
+ }
+ }
+ }
+
+ if(bRightVisible)
+ {
+ for(y = 1; y < nEndY - 1; y++) // x == nStartX and nEndX-1
+ {
+ if(impVisibleY(y, aSizePixel))
+ {
+ Color aMix(aColorTopRight);
+ aMix.Merge(aColorBottomRight, 255 - sal_uInt8(((y -nStartY) * 255) / nH));
+ impMixPixel(*pAcc, y, x, aMix, nAlpha);
+ }
+ }
+ }
+ }
+ else
+ {
+ y = nEndY - 1;
+ }
+
+ if(impVisibleXY(y, x, aSizePixel))
+ {
+ x = nStartX; // x == nStartX, y == nEndY-1
+ impMixPixel(*pAcc, y, x, aColorBottomLeft, nAlpha);
+ }
+
+ if(impVisibleY(y, aSizePixel))
+ {
+ for(x = 1; x < nEndX - 1; x++) // y == nEndY-1
+ {
+ if(impVisibleX(x, aSizePixel))
+ {
+ Color aMix(aColorBottomLeft);
+ aMix.Merge(aColorBottomRight, 255 - sal_uInt8(((x - nStartX)* 255) / nW));
+ impMixPixel(*pAcc, y, x, aMix, nAlpha);
+ }
+ }
+ }
+ else
+ {
+ x = nEndX - 1;
+ }
+
+ if(impVisibleXY(y, x, aSizePixel))
+ {
+ // x == nEndX - 1, y == nEndY - 1
+ impMixPixel(*pAcc, y, x, aColorBottomRight, nAlpha);
+ }
+
+ ReleaseAccess(pAcc);
+ }
+ }
+ }
+ }
+}
+
+void Bitmap::DrawBlendFrame(
+ sal_uInt8 nAlpha,
+ Color aColorTopLeft,
+ Color aColorBottomRight)
+{
+ if(!IsEmpty())
+ {
+ const Point aTopLeft(0, 0);
+ const Size aSize(GetSizePixel());
+ const sal_uInt32 nW(aSize.Width());
+ const sal_uInt32 nH(aSize.Height());
+
+ if(nW || nH)
+ {
+ Color aColTopRight(aColorTopLeft);
+ Color aColBottomLeft(aColorTopLeft);
+ const sal_uInt32 nDE(nW + nH);
+
+ aColTopRight.Merge(aColorBottomRight, 255 - sal_uInt8((nW * 255) / nDE));
+ aColBottomLeft.Merge(aColorBottomRight, 255 - sal_uInt8((nH * 255) / nDE));
+
+ DrawBlendFrame(aTopLeft, aSize, nAlpha, aColorTopLeft, aColTopRight, aColorBottomRight, aColBottomLeft);
+ }
+ }
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */