Related: #i122041# More unifications for FillStyles

better defaults and better preview visualizations

(cherry picked from commit 35c9acfc98fc98399005815e0464b1944f327d4e)

Conflicts:
	officecfg/registry/schema/org/openoffice/Office/Common.xcs
	svtools/inc/svtools/accessibilityoptions.hxx
	svtools/inc/svtools/valueset.hxx
	svtools/source/config/accessibilityoptions.cxx
	svtools/source/control/ctrlbox.cxx
	svtools/source/control/valueset.cxx
	svtools/source/inc/configitems/accessibilityoptions_const.hxx
	svx/inc/svx/dlgctrl.hxx
	svx/inc/svx/xtable.hxx
	svx/source/dialog/dlgctrl.cxx
	svx/source/tbxctrls/SvxColorValueSet.cxx
	svx/source/xoutdev/xtabdash.cxx
	svx/source/xoutdev/xtable.cxx
	vcl/inc/ilstbox.hxx
	vcl/inc/vcl/combobox.hxx
	vcl/inc/vcl/lstbox.hxx
	vcl/inc/vcl/settings.hxx
	vcl/source/app/settings.cxx
	vcl/source/control/combobox.cxx
	vcl/source/control/ilstbox.cxx
	vcl/source/control/lstbox.cxx

Change-Id: I905b6814cb796a35aa23fedb9ce716f77e2bfda0
diff --git a/cui/source/tabpages/tpbitmap.cxx b/cui/source/tabpages/tpbitmap.cxx
index 4d3576d..c052931 100644
--- a/cui/source/tabpages/tpbitmap.cxx
+++ b/cui/source/tabpages/tpbitmap.cxx
@@ -555,8 +555,8 @@ IMPL_LINK_NOARG(SvxBitmapTabPage, ClickAddHdl_Impl)
        if( pEntry )
        {
            pBitmapList->Insert( pEntry );
            const Size aUiSize(pBitmapList->getUiBitmapWidth(), pBitmapList->getUiBitmapHeight());
            aLbBitmaps.Append(aUiSize, *pEntry );
            const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
            aLbBitmaps.Append(rStyleSettings.GetListBoxPreviewDefaultPixelSize(), *pEntry );
            aLbBitmaps.SelectEntryPos( aLbBitmaps.GetEntryCount() - 1 );

#ifdef WNT
@@ -657,8 +657,8 @@ IMPL_LINK_NOARG(SvxBitmapTabPage, ClickImportHdl_Impl)
                XBitmapEntry* pEntry = new XBitmapEntry( aGraphic, aName );
                pBitmapList->Insert( pEntry );

                const Size aUiSize(pBitmapList->getUiBitmapWidth(), pBitmapList->getUiBitmapHeight());
                aLbBitmaps.Append(aUiSize, *pEntry );
                const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
                aLbBitmaps.Append(rStyleSettings.GetListBoxPreviewDefaultPixelSize(), *pEntry );
                aLbBitmaps.SelectEntryPos( aLbBitmaps.GetEntryCount() - 1 );

#ifdef WNT
@@ -706,7 +706,7 @@ IMPL_LINK_NOARG(SvxBitmapTabPage, ClickModifyHdl_Impl)
        long nCount = pBitmapList->Count();
        sal_Bool bDifferent = sal_False;
        sal_Bool bLoop = sal_True;
        const Size aUiSize(pBitmapList->getUiBitmapWidth(), pBitmapList->getUiBitmapHeight());
        const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();

        while( bLoop && pDlg->Execute() == RET_OK )
        {
@@ -731,7 +731,7 @@ IMPL_LINK_NOARG(SvxBitmapTabPage, ClickModifyHdl_Impl)

                pEntry->SetGraphicObject(Graphic(aBitmapEx));

                aLbBitmaps.Modify( aUiSize, *pEntry, nPos );
                aLbBitmaps.Modify( rStyleSettings.GetListBoxPreviewDefaultPixelSize(), *pEntry, nPos );
                aLbBitmaps.SelectEntryPos( nPos );

                *pnBitmapListState |= CT_MODIFIED;
diff --git a/include/svtools/accessibilityoptions.hxx b/include/svtools/accessibilityoptions.hxx
index 52b12b9..8760439 100644
--- a/include/svtools/accessibilityoptions.hxx
+++ b/include/svtools/accessibilityoptions.hxx
@@ -49,15 +49,14 @@ 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;

    // option to set a maximum line count for ListBoxes; when less or equal than this count
    // is in a ListBox, all will be shown, else a ScrollBar will be used
    sal_Int16   GetListBoxMaximumLineCount() const;

    void        SetIsForPagePreviews(sal_Bool bSet);
    void        SetIsHelpTipsDisappear(sal_Bool bSet);
    void        SetIsAllowAnimatedGraphics(sal_Bool bSet);
@@ -68,10 +67,8 @@ 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);
    void        SetListBoxMaximumLineCount(sal_Int16 nSet);

    sal_Bool                IsModified() const;
    void                    Commit();
diff --git a/include/svtools/valueset.hxx b/include/svtools/valueset.hxx
index 70fcd00..d26705a 100644
--- a/include/svtools/valueset.hxx
+++ b/include/svtools/valueset.hxx
@@ -214,15 +214,21 @@ private:
    long            mnLines;
    long            mnUserItemWidth;
    long            mnUserItemHeight;
    sal_uInt16          mnSelItemId;
    sal_uInt16          mnHighItemId;
    sal_uInt16          mnCols;
    sal_uInt16          mnCurCol;
    sal_uInt16          mnUserCols;
    sal_uInt16          mnUserVisLines;
    sal_uInt16          mnFirstLine;
    sal_uInt16          mnSpacing;
    sal_uInt16          mnFrameStyle;
    sal_uInt16      mnSelItemId;
    sal_uInt16      mnHighItemId;
    sal_uInt16      mnCols;
    sal_uInt16      mnCurCol;
    sal_uInt16      mnUserCols;
    sal_uInt16      mnUserVisLines;
    sal_uInt16      mnFirstLine;
    sal_uInt16      mnSpacing;
    sal_uInt16      mnFrameStyle;
    Color           maColor;
    Link            maDoubleClickHdl;
    Link            maSelectHdl;
    Link            maHighlightHdl;

    // bitfield
    bool            mbFormat : 1;
    bool            mbHighlight : 1;
    bool            mbSelection : 1;
@@ -232,12 +238,9 @@ private:
    bool            mbDoubleSel : 1;
    bool            mbScroll : 1;
    bool            mbFullMode : 1;
    bool            mbEdgeBlending : 1;
    bool            mbIsTransientChildrenDisabled : 1;
    bool            mbHasVisibleItems : 1;
    Color           maColor;
    Link            maDoubleClickHdl;
    Link            maSelectHdl;
    Link            maHighlightHdl;

    friend class ValueSetAcc;
    friend class ValueItemAcc;
@@ -380,6 +383,9 @@ public:
    const Link&     GetDoubleClickHdl() const { return maDoubleClickHdl; }

    void            SetHighlightHdl( const Link& rLink );

    bool GetEdgeBlending() const { return mbEdgeBlending; }
    void SetEdgeBlending(bool bNew);
};

#endif  // _VALUESET_HXX
diff --git a/include/svx/dlgctrl.hxx b/include/svx/dlgctrl.hxx
index 549b273..a3c56ce 100644
--- a/include/svx/dlgctrl.hxx
+++ b/include/svx/dlgctrl.hxx
@@ -218,12 +218,10 @@ public:
class SVX_DLLPUBLIC HatchingLB : public ListBox
{
    XHatchListRef mpList;
    sal_Bool      mbUserDraw;
public:
    HatchingLB( Window* pParent, ResId Id, sal_Bool bUserDraw = sal_True );
    explicit HatchingLB(Window* pParent, ResId Id);

    virtual void Fill( const XHatchListRef &pList );
    virtual void UserDraw( const UserDrawEvent& rUDEvt );

    void    Append( XHatchEntry* pEntry, Bitmap* pBmp = NULL );
    void    Modify( XHatchEntry* pEntry, sal_uInt16 nPos, Bitmap* pBmp = NULL );
@@ -234,13 +232,11 @@ public:
class SVX_DLLPUBLIC GradientLB : public ListBox
{
    XGradientListRef mpList;
    sal_Bool         mbUserDraw;
public:
    GradientLB( Window* pParent, ResId Id, sal_Bool bUserDraw = sal_True );
    GradientLB( Window* pParent, WinBits aWB, sal_Bool bUserDraw = sal_True );
    explicit GradientLB(Window* pParent, ResId Id);
    explicit GradientLB(Window* pParent, WinBits aWB);

    virtual void Fill( const XGradientListRef &pList );
    virtual void UserDraw( const UserDrawEvent& rUDEvt );

    void    Append( XGradientEntry* pEntry, Bitmap* pBmp = NULL );
    void    Modify( XGradientEntry* pEntry, sal_uInt16 nPos, Bitmap* pBmp = NULL );
@@ -253,23 +249,18 @@ public:
class SVX_DLLPUBLIC BitmapLB : public ListBox
{
public:
    BitmapLB(Window* pParent, ResId Id, bool bUserDraw = true);
    explicit BitmapLB(Window* pParent, ResId Id);

    virtual void Fill(const XBitmapListRef &pList);
    virtual void UserDraw(const UserDrawEvent& rUDEvt);

    void Append(const Size& rSize, const XBitmapEntry& rEntry, BitmapEx* pBmpEx = 0);
    void Modify(const Size& rSize, const XBitmapEntry& rEntry, sal_uInt16 nPos, BitmapEx* pBmpEx = 0);
    void SelectEntryByList(const XBitmapList* pList, const String& rStr);

private:
    VirtualDevice   maVD;
    BitmapEx        maBitmapEx;

    XBitmapListRef  mpList;
    bool            mbUserDraw;

    SVX_DLLPRIVATE void SetVirtualDevice(const Size& rSize);
};

/************************************************************************/
@@ -277,11 +268,8 @@ private:
class FillAttrLB : public ColorListBox
{
private:
    VirtualDevice   maVD;
    BitmapEx        maBitmapEx;

    void SetVirtualDevice(const Size& rSize);

public:
    FillAttrLB( Window* pParent, WinBits aWB );

diff --git a/include/svx/xtable.hxx b/include/svx/xtable.hxx
index 4ceca46..9ac5b2e 100644
--- a/include/svx/xtable.hxx
+++ b/include/svx/xtable.hxx
@@ -282,10 +282,6 @@ public:
    inline XBitmapListRef AsBitmapList();
    inline XLineEndListRef AsLineEndList();
    inline XGradientListRef AsGradientList();

    sal_uInt32 getUiBitmapWidth() const;
    sal_uInt32 getUiBitmapHeight() const;
    sal_uInt32 getUiBitmapLineWidth() const;
};

// ------------------
diff --git a/include/vcl/combobox.hxx b/include/vcl/combobox.hxx
index 6351874..1fcfe31 100644
--- a/include/vcl/combobox.hxx
+++ b/include/vcl/combobox.hxx
@@ -116,6 +116,7 @@ public:

    Rectangle       GetDropDownPosSizePixel() const;

    void AdaptDropDownLineCountToMaximum();
    void            SetDropDownLineCount( sal_uInt16 nLines );
    sal_uInt16      GetDropDownLineCount() const;

diff --git a/include/vcl/lstbox.hxx b/include/vcl/lstbox.hxx
index b662233..61f8b24 100644
--- a/include/vcl/lstbox.hxx
+++ b/include/vcl/lstbox.hxx
@@ -41,13 +41,16 @@ private:
    ImplListBoxFloatingWindow*  mpFloatWin;
    ImplWin*                    mpImplWin;
    ImplBtn*                    mpBtn;
    sal_uInt16                      mnDDHeight;
    sal_uInt16                      mnSaveValue;
    sal_Bool                        mbDDAutoSize;
    sal_uInt16                  mnDDHeight;
    sal_uInt16                  mnSaveValue;
    sal_Int32 m_nMaxWidthChars;
    Link                        maSelectHdl;
    Link                        maDoubleClickHdl;
    sal_uInt16 mnLineCount;
    sal_uInt16                  mnLineCount;

    /// bitfield
    bool            mbDDAutoSize : 1;
    bool            mbEdgeBlending : 1;

private:
    SAL_DLLPRIVATE void    ImplInitListBoxData();
@@ -102,11 +105,12 @@ public:

    Rectangle           GetDropDownPosSizePixel() const;

    void AdaptDropDownLineCountToMaximum();
    void                SetDropDownLineCount( sal_uInt16 nLines );
    sal_uInt16          GetDropDownLineCount() const;

    void                EnableAutoSize( sal_Bool bAuto );
    sal_Bool                IsAutoSizeEnabled() const { return mbDDAutoSize; }
    void                EnableAutoSize( bool bAuto );
    bool                IsAutoSizeEnabled() const { return mbDDAutoSize; }

    void                EnableDDAutoWidth( sal_Bool b );

@@ -199,6 +203,9 @@ public:

    void            EnableMirroring();

    bool GetEdgeBlending() const { return mbEdgeBlending; }
    void SetEdgeBlending(bool bNew);

    /** checks whether a certain point lies within the bounds of
        a listbox item and returns the item as well as the character position
        the point is at.
diff --git a/include/vcl/settings.hxx b/include/vcl/settings.hxx
index 19dc20f..2c861cd 100644
--- a/include/vcl/settings.hxx
+++ b/include/vcl/settings.hxx
@@ -318,29 +318,29 @@ private:
    long                            mnIconHorzSpace;
    long                            mnIconVertSpace;
    long                            mnAntialiasedMin;
    sal_uLong                           mnCursorBlinkTime;
    sal_uLong                           mnDragFullOptions;
    sal_uLong                           mnAnimationOptions;
    sal_uLong                           mnSelectionOptions;
    sal_uLong                           mnLogoDisplayTime;
    sal_uLong                           mnDisplayOptions;
    sal_uLong                           mnToolbarIconSize;
    sal_uLong                           mnUseFlatMenus;
    sal_uLong                           mnOptions;
    sal_uInt16                          mnScreenZoom;
    sal_uInt16                          mnScreenFontZoom;
    sal_uInt16                          mnHighContrast;
    sal_uInt16                          mnUseSystemUIFonts;
    sal_uInt16                          mnAutoMnemonic;
    sal_uInt16                          mnUseImagesInMenus;
    sal_uLong                           mnUseFlatBorders;
    sal_Bool                            mbPreferredUseImagesInMenus;
    sal_uLong                       mnCursorBlinkTime;
    sal_uLong                       mnDragFullOptions;
    sal_uLong                       mnAnimationOptions;
    sal_uLong                       mnSelectionOptions;
    sal_uLong                       mnLogoDisplayTime;
    sal_uLong                       mnDisplayOptions;
    sal_uLong                       mnToolbarIconSize;
    sal_uLong                       mnUseFlatMenus;
    sal_uLong                       mnOptions;
    sal_uInt16                      mnScreenZoom;
    sal_uInt16                      mnScreenFontZoom;
    sal_uInt16                      mnHighContrast;
    sal_uInt16                      mnUseSystemUIFonts;
    sal_uInt16                      mnAutoMnemonic;
    sal_uInt16                      mnUseImagesInMenus;
    sal_uLong                       mnUseFlatBorders;
    sal_Bool                        mbPreferredUseImagesInMenus;
    long                            mnMinThumbSize;
    sal_uLong                           mnSymbolsStyle;
    sal_uLong                           mnPreferredSymbolsStyle;
    sal_uInt16                          mnSkipDisabledInMenus;
    sal_Bool                            mbHideDisabledMenuItems;
    sal_Bool                            mbAcceleratorsInContextMenus;
    sal_uLong                       mnSymbolsStyle;
    sal_uLong                       mnPreferredSymbolsStyle;
    sal_uInt16                      mnSkipDisabledInMenus;
    sal_Bool                        mbHideDisabledMenuItems;
    sal_Bool                        mbAcceleratorsInContextMenus;
    //mbPrimaryButtonWarpsSlider == true for "jump to here" behavior for primary button, otherwise
    //primary means scroll by single page. Secondary button takes the alternative behaviour
    sal_Bool                        mbPrimaryButtonWarpsSlider;
@@ -349,6 +349,16 @@ private:
    FrameStyle                      maFrameStyle;
    const void*                     mpFontOptions;

    sal_uInt16                      mnEdgeBlending;
    Color                           maEdgeBlendingTopLeftColor;
    Color                           maEdgeBlendingBottomRightColor;
    sal_uInt16                      mnListBoxMaximumLineCount;
    sal_uInt16                      mnColorValueSetColumnCount;
    sal_uInt16                      mnColorValueSetMaximumRowCount;
    Size                            maListBoxPreviewDefaultLogicSize;
    Size                            maListBoxPreviewDefaultPixelSize;
    sal_uInt16                      mnListBoxPreviewDefaultLineWidth;

    OUString                        maPersonaHeaderFooter; ///< Cache the settings to detect changes.

    BitmapEx                        maPersonaHeaderBitmap; ///< Cache the header bitmap.
@@ -868,6 +878,49 @@ public:

    const BitmapEx                  GetPersonaHeader() const;

    // global switch to allow EdgeBlenging; currently possible for ValueSet and ListBox
    // when activated there using Get/SetEdgeBlending; default is true
    void SetEdgeBlending(sal_uInt16 nCount) { CopyData(); mpData->mnEdgeBlending = nCount; }
    sal_uInt16 GetEdgeBlending() const { return mpData->mnEdgeBlending; }

    // TopLeft (default RGB_COLORDATA(0xC0, 0xC0, 0xC0)) and BottomRight (default RGB_COLORDATA(0x40, 0x40, 0x40))
    // default colors for EdgeBlending
    void SetEdgeBlendingTopLeftColor(const Color& rTopLeft) { CopyData(); mpData->maEdgeBlendingTopLeftColor = rTopLeft; }
    const Color& GetEdgeBlendingTopLeftColor() const { return mpData->maEdgeBlendingTopLeftColor; }
    void SetEdgeBlendingBottomRightColor(const Color& rBottomRight) { CopyData(); mpData->maEdgeBlendingBottomRightColor = rBottomRight; }
    const Color& GetEdgeBlendingBottomRightColor() const { return mpData->maEdgeBlendingBottomRightColor; }

    // maximum line count for ListBox control; to use this, call AdaptDropDownLineCountToMaximum() at the
    // ListBox after it's ItemCount has changed/got filled. Default is 25. If more Items exist, a scrollbar
    // will be used
    void SetListBoxMaximumLineCount(sal_uInt16 nCount) { CopyData(); mpData->mnListBoxMaximumLineCount = nCount; }
    sal_uInt16 GetListBoxMaximumLineCount() const { return mpData->mnListBoxMaximumLineCount; }

    // maximum column count for the ColorValueSet control. Default is 12 and this is optimized for the
    // color scheme which has 12-color alogned layout for the part taken over from Symphony. Do
    // only change this if you know what you are doing.
    void SetColorValueSetColumnCount(sal_uInt16 nCount) { CopyData(); mpData->mnColorValueSetColumnCount = nCount; }
    sal_uInt16 GetColorValueSetColumnCount() const { return mpData->mnColorValueSetColumnCount; }

    // maximum row/line count for the ColorValueSet control. If more lines would be needed, a scrollbar will
    // be used. Default is 40.
    void SetColorValueSetMaximumRowCount(sal_uInt16 nCount) { CopyData(); mpData->mnColorValueSetMaximumRowCount = nCount; }
    sal_uInt16 GetColorValueSetMaximumRowCount() const { return mpData->mnColorValueSetMaximumRowCount; }

    // the logical size for preview graphics in the ListBoxes (e.g. FillColor, FillGradient, FillHatch, FillGraphic, ..). The
    // default defines a UI-Scale independent setting which will be scaled using MAP_APPFONT. This ensures that the size will
    // fit independent from the used SystemFont (as all the ressources for UI elements). The default is Size(15, 7) which gives
    // the correct height and a decent width. Do not change the height, but you may adapt the width to change the preview width.
    // GetListBoxPreviewDefaultPixelSize() is for convenience so that not everyone has to do the scaling itself and contains
    // the logical size scaled by MAP_APPFONT.
    void SetListBoxPreviewDefaultLogicSize(const Size& rSize) { CopyData(); mpData->maListBoxPreviewDefaultLogicSize = rSize; mpData->maListBoxPreviewDefaultPixelSize = Size(0, 0);}
    const Size& GetListBoxPreviewDefaultLogicSize() const { return mpData->maListBoxPreviewDefaultLogicSize; }
    const Size& GetListBoxPreviewDefaultPixelSize() const;

    // the default LineWidth for ListBox UI previews (LineStyle, LineDash, LineStartEnd). Default is 1.
    void SetListBoxPreviewDefaultLineWidth(sal_uInt16 nWidth) { CopyData(); mpData->mnListBoxPreviewDefaultLineWidth = nWidth; }
    sal_uInt16 GetListBoxPreviewDefaultLineWidth() const { return mpData->mnListBoxPreviewDefaultLineWidth; }

    void                            SetStandardStyles();

    const StyleSettings&            operator =( const StyleSettings& rSet );
diff --git a/officecfg/registry/schema/org/openoffice/Office/Common.xcs b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
index 31b8a1bd..000df4a3 100644
--- a/officecfg/registry/schema/org/openoffice/Office/Common.xcs
+++ b/officecfg/registry/schema/org/openoffice/Office/Common.xcs
@@ -6209,46 +6209,14 @@
        </info>
        <value>false</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>
        <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>
        <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.
            This Schema is layouted to a width of twelve colums, though this value should not be changed.
          </desc>
          <label>The ColumnCount used in ColorValueSets.</label>
        </info>
        <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 
            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 with interpolated
            colors (default: TopLeft White, BottomRight Black) so that a nice 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 
            colors (default: TopLeft White, BottomRight Black) so that a nice 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's border completely with one pixel. Values in-between vill be alpha-blended with
            the original preview image.
          </desc>
@@ -6256,6 +6224,20 @@
        </info>
        <value>35</value>
      </prop>
      <prop oor:name="ListBoxMaximumLineCount" oor:type="xs:short">
        <info>
          <author>ALG</author>
          <desc>
            This option controls how many lines of a ListBox will be shown as a maximum. If the ListBox has less lines,
            all lines will be shown when opening the drop down content. If it has more lines, the visible number of
            lines will be limited to this number. The value 0 disables this feature, negative values are not allowed.
            This feature may not be used automatically by all ListBox implementations,
            but it gives a central hint value to use if an implementation wants to adapt to something useful.
          </desc>
          <label>Defines the maximum number of lines visible in a ListBox.</label>
        </info>
        <value>25</value>
      </prop>
    </group>
    <group oor:name="ExternalApps" oor:extensible="true">
      <info>
diff --git a/svtools/source/config/accessibilityoptions.cxx b/svtools/source/config/accessibilityoptions.cxx
index a830a99..35e612e 100644
--- a/svtools/source/config/accessibilityoptions.cxx
+++ b/svtools/source/config/accessibilityoptions.cxx
@@ -58,6 +58,7 @@ namespace
    const char s_sColorValueSetEntryEdgeLength[] = "ColorValueSetEntryEdgeLength";
    const char s_sColorValueSetColumnCount[] = "ColorValueSetColumnCount";
    const char s_sEdgeBlending[] = "EdgeBlending";
    const char s_sListBoxMaximumLineCount[] = "ListBoxMaximumLineCount";
}

// class SvtAccessibilityOptions_Impl ---------------------------------------------
@@ -82,10 +83,8 @@ 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;
    sal_Int16   GetListBoxMaximumLineCount() const;

    void        SetAutoDetectSystemHC(sal_Bool bSet);
    void        SetIsForPagePreviews(sal_Bool bSet);
@@ -96,10 +95,8 @@ 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);
    void        SetListBoxMaximumLineCount(sal_Int16 nSet);

    sal_Bool    IsModified() const { return bIsModified; };
};
@@ -304,60 +301,6 @@ 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);
@@ -376,6 +319,24 @@ sal_Int16 SvtAccessibilityOptions_Impl::GetEdgeBlending() const
    return nRet;
}

sal_Int16 SvtAccessibilityOptions_Impl::GetListBoxMaximumLineCount() const
{
    css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);
    sal_Int16 nRet = 25;

    try
    {
        if(xNode.is())
            xNode->getPropertyValue(s_sListBoxMaximumLineCount) >>= 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);
@@ -558,81 +519,49 @@ void SvtAccessibilityOptions_Impl::SetSelectionInReadonly(sal_Bool bSet)

void SvtAccessibilityOptions_Impl::SetVCLSettings()
{
    AllSettings aAllSettings = Application::GetSettings();
    HelpSettings aHelpSettings = aAllSettings.GetHelpSettings();
    AllSettings aAllSettings(Application::GetSettings());
    StyleSettings aStyleSettings(aAllSettings.GetStyleSettings());
    HelpSettings aHelpSettings(aAllSettings.GetHelpSettings());
    bool StyleSettingsChanged(false);

    aHelpSettings.SetTipTimeout( GetIsHelpTipsDisappear() ? GetHelpTipSeconds() * 1000 : HELP_TIP_TIMEOUT);
    aAllSettings.SetHelpSettings(aHelpSettings);
    if(aAllSettings.GetStyleSettings().GetUseSystemUIFonts() != GetIsSystemFont() )

    if(aStyleSettings.GetUseSystemUIFonts() != GetIsSystemFont())
    {
        StyleSettings aStyleSettings = aAllSettings.GetStyleSettings();
        aStyleSettings.SetUseSystemUIFonts( GetIsSystemFont()  );
        aStyleSettings.SetUseSystemUIFonts(GetIsSystemFont());
        StyleSettingsChanged = true;
    }

    const sal_Int16 nEdgeBlendingCountA(GetEdgeBlending());
    OSL_ENSURE(nEdgeBlendingCountA >= 0, "OOps, negative values for EdgeBlending are not allowed (!)");
    const sal_uInt16 nEdgeBlendingCountB(static_cast< sal_uInt16 >(nEdgeBlendingCountA >= 0 ? nEdgeBlendingCountA : 0));

    if(aStyleSettings.GetEdgeBlending() != nEdgeBlendingCountB)
    {
        aStyleSettings.SetEdgeBlending(nEdgeBlendingCountB);
        StyleSettingsChanged = true;
    }

    const sal_Int16 nMaxLineCountA(GetListBoxMaximumLineCount());
    OSL_ENSURE(nMaxLineCountA >= 0, "OOps, negative values for ListBoxMaximumLineCount are not allowed (!)");
    const sal_uInt16 nMaxLineCountB(static_cast< sal_uInt16 >(nMaxLineCountA >= 0 ? nMaxLineCountA : 0));

    if(aStyleSettings.GetListBoxMaximumLineCount() != nMaxLineCountB)
    {
        aStyleSettings.SetListBoxMaximumLineCount(nMaxLineCountB);
        StyleSettingsChanged = true;
    }

    if(StyleSettingsChanged)
    {
        aAllSettings.SetStyleSettings(aStyleSettings);
        Application::MergeSystemSettings( aAllSettings );
        Application::MergeSystemSettings(aAllSettings);
    }

    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);
@@ -653,6 +582,26 @@ void SvtAccessibilityOptions_Impl::SetEdgeBlending(sal_Int16 nSet)
    }
}

void SvtAccessibilityOptions_Impl::SetListBoxMaximumLineCount(sal_Int16 nSet)
{
    css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);

    try
    {
        if(xNode.is() && xNode->getPropertyValue(s_sListBoxMaximumLineCount)!=nSet)
        {
            xNode->setPropertyValue(s_sListBoxMaximumLineCount, 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 --------------------------------------------------

@@ -745,26 +694,14 @@ 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();
}
sal_Int16 SvtAccessibilityOptions::GetListBoxMaximumLineCount() const
{
    return sm_pSingleImplConfig->GetListBoxMaximumLineCount();
}

// -----------------------------------------------------------------------
void SvtAccessibilityOptions::SetAutoDetectSystemHC(sal_Bool bSet)
@@ -807,22 +744,14 @@ 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);
}
void SvtAccessibilityOptions::SetListBoxMaximumLineCount(sal_Int16 nSet)
{
    sm_pSingleImplConfig->SetListBoxMaximumLineCount(nSet);
}
// -----------------------------------------------------------------------

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svtools/source/control/ctrlbox.cxx b/svtools/source/control/ctrlbox.cxx
index 603165d..37cf887 100644
--- a/svtools/source/control/ctrlbox.cxx
+++ b/svtools/source/control/ctrlbox.cxx
@@ -80,10 +80,9 @@ public:
void ColorListBox::ImplInit()
{
    pColorList = new ImpColorList();
    aImageSize.Width()  = GetTextWidth( OUString("xxx") );
    aImageSize.Height() = GetTextHeight();
    aImageSize.Height() -= 2;

    const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
    aImageSize = rStyleSettings.GetListBoxPreviewDefaultPixelSize();
    EnableUserDraw( sal_True );
    SetUserItemSize( aImageSize );
}
@@ -103,6 +102,7 @@ ColorListBox::ColorListBox( Window* pParent, WinBits nWinStyle ) :
    ListBox( pParent, nWinStyle )
{
    ImplInit();
    SetEdgeBlending(true);
}

// -----------------------------------------------------------------------
@@ -111,6 +111,7 @@ ColorListBox::ColorListBox( Window* pParent, const ResId& rResId ) :
    ListBox( pParent, rResId )
{
    ImplInit();
    SetEdgeBlending(true);
}

namespace
@@ -289,13 +290,36 @@ void ColorListBox::UserDraw( const UserDrawEvent& rUDEvt )
        if ( pData->bColor )
        {
            Point aPos( rUDEvt.GetRect().TopLeft() );

            aPos.X() += 2;
            aPos.Y() += ( rUDEvt.GetRect().GetHeight() - aImageSize.Height() ) / 2;

            const Rectangle aRect(aPos, aImageSize);

            rUDEvt.GetDevice()->Push();
            rUDEvt.GetDevice()->SetFillColor( pData->aColor );
            rUDEvt.GetDevice()->SetLineColor( rUDEvt.GetDevice()->GetTextColor() );
            rUDEvt.GetDevice()->DrawRect( Rectangle( aPos, aImageSize ) );
            rUDEvt.GetDevice()->DrawRect(aRect);
            rUDEvt.GetDevice()->Pop();

            const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
            const sal_uInt16 nEdgeBlendingPercent(GetEdgeBlending() ? rStyleSettings.GetEdgeBlending() : 0);

            if(nEdgeBlendingPercent)
            {
                Bitmap aBitmap(rUDEvt.GetDevice()->GetBitmap(aRect.TopLeft(), aRect.GetSize()));

                if(!aBitmap.IsEmpty())
                {
                    const Color& rTopLeft(rStyleSettings.GetEdgeBlendingTopLeftColor());
                    const Color& rBottomRight(rStyleSettings.GetEdgeBlendingBottomRightColor());
                    const sal_uInt8 nAlpha((nEdgeBlendingPercent * 255) / 100);

                    aBitmap.DrawBlendFrame(nAlpha, rTopLeft, rBottomRight);
                    rUDEvt.GetDevice()->DrawBitmap(aRect.TopLeft(), aBitmap);
                }
            }

            ListBox::DrawEntry( rUDEvt, sal_False, sal_True, sal_False );
        }
        else
diff --git a/svtools/source/control/valueset.cxx b/svtools/source/control/valueset.cxx
index 1006bf0..9623b29 100644
--- a/svtools/source/control/valueset.cxx
+++ b/svtools/source/control/valueset.cxx
@@ -28,7 +28,6 @@
#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>
@@ -82,6 +81,7 @@ void ValueSet::ImplInit()
    mbDoubleSel         = false;
    mbScroll            = false;
    mbFullMode          = true;
    mbEdgeBlending      = false;
    mbHasVisibleItems   = false;

    // #106446#, #106601# force mirroring of virtual device
@@ -266,9 +266,10 @@ void ValueSet::ImplFormatItem( ValueSetItem* pItem, Rectangle aRect )

    if ( (aRect.GetHeight() > 0) && (aRect.GetWidth() > 0) )
    {
        const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();

        if ( pItem == mpNoneItem )
        {
            const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
            maVirDev.SetFont( GetFont() );
            maVirDev.SetTextColor( ( nStyle & WB_MENUSTYLEVALUESET ) ? rStyleSettings.GetMenuTextColor() : rStyleSettings.GetWindowTextColor() );
            maVirDev.SetTextFillColor();
@@ -294,29 +295,9 @@ 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
        {
            const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
            if ( IsColor() )
                maVirDev.SetFillColor( maColor );
            else if ( nStyle & WB_MENUSTYLEVALUESET )
@@ -355,6 +336,23 @@ void ValueSet::ImplFormatItem( ValueSetItem* pItem, Rectangle aRect )
                    maVirDev.DrawImage( aPos, pItem->maImage, nImageStyle );
            }
        }

        const sal_uInt16 nEdgeBlendingPercent(GetEdgeBlending() ? rStyleSettings.GetEdgeBlending() : 0);

        if(nEdgeBlendingPercent)
        {
            Bitmap aBitmap(maVirDev.GetBitmap(aRect.TopLeft(), aRect.GetSize()));

            if(!aBitmap.IsEmpty())
            {
                const Color& rTopLeft(rStyleSettings.GetEdgeBlendingTopLeftColor());
                const Color& rBottomRight(rStyleSettings.GetEdgeBlendingBottomRightColor());
                const sal_uInt8 nAlpha((nEdgeBlendingPercent * 255) / 100);

                aBitmap.DrawBlendFrame(nAlpha, rTopLeft, rBottomRight);
                maVirDev.DrawBitmap(aRect.TopLeft(), aBitmap);
            }
        }
    }
}

@@ -2466,4 +2464,20 @@ Size ValueSet::GetOptimalSize() const
    return CalcWindowSizePixel(aLargestItemSize);
}

// -----------------------------------------------------------------------

void ValueSet::SetEdgeBlending(bool bNew)
{
    if(mbEdgeBlending != bNew)
    {
        mbEdgeBlending = bNew;
        mbFormat = true;

        if(IsReallyVisible() && IsUpdateMode())
        {
            Invalidate();
        }
    }
}

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/source/dialog/dlgctrl.cxx b/svx/source/dialog/dlgctrl.cxx
index b863c34..832c171 100644
--- a/svx/source/dialog/dlgctrl.cxx
+++ b/svx/source/dialog/dlgctrl.cxx
@@ -927,6 +927,8 @@ void ColorLB::Fill( const XColorListRef &pColorTab )
        pEntry = pColorTab->GetColor( i );
        InsertEntry( pEntry->GetColor(), pEntry->GetName() );
    }

    AdaptDropDownLineCountToMaximum();
    SetUpdateMode( sal_True );
}

@@ -935,6 +937,7 @@ void ColorLB::Fill( const XColorListRef &pColorTab )
void ColorLB::Append( XColorEntry* pEntry, Bitmap* )
{
    InsertEntry( pEntry->GetColor(), pEntry->GetName() );
    AdaptDropDownLineCountToMaximum();
}

/************************************************************************/
@@ -958,17 +961,18 @@ void FillAttrLB::Fill( const XColorListRef &pColorTab )
        pEntry = pColorTab->GetColor( i );
        InsertEntry( pEntry->GetColor(), pEntry->GetName() );
    }

    AdaptDropDownLineCountToMaximum();
    SetUpdateMode( sal_True );
}

// Fills the listbox (provisional) with strings

HatchingLB::HatchingLB( Window* pParent, ResId Id, sal_Bool bUserDraw /*= sal_True*/ )
HatchingLB::HatchingLB( Window* pParent, ResId Id)
: ListBox( pParent, Id ),
  mpList ( NULL ),
  mbUserDraw( bUserDraw )
  mpList ( NULL )
{
    EnableUserDraw( mbUserDraw );
    SetEdgeBlending(true);
}

void HatchingLB::Fill( const XHatchListRef &pList )
@@ -982,65 +986,20 @@ void HatchingLB::Fill( const XHatchListRef &pList )

    SetUpdateMode( sal_False );

    if( mbUserDraw )
    for( long i = 0; i < nCount; i++ )
    {
        for( long i = 0; i < nCount; i++ )
            InsertEntry( pList->GetHatch( i )->GetName() );
    }
    else
    {
        for( long i = 0; i < nCount; i++ )
        {
            pEntry = pList->GetHatch( i );
            const Bitmap aBitmap = pList->GetUiBitmap( i );
            if( !aBitmap.IsEmpty() )
                InsertEntry( pEntry->GetName(), aBitmap );
            else
                InsertEntry( pEntry->GetName() );
        }
        pEntry = pList->GetHatch( i );
        const Bitmap aBitmap = pList->GetUiBitmap( i );
        if( !aBitmap.IsEmpty() )
            InsertEntry( pEntry->GetName(), aBitmap );
        else
            InsertEntry( pEntry->GetName() );
    }

    AdaptDropDownLineCountToMaximum();
    SetUpdateMode( sal_True );
}

void HatchingLB::UserDraw( const UserDrawEvent& rUDEvt )
{
    if( mpList != NULL )
    {
        // Draw gradient with borderrectangle
        const Rectangle& rDrawRect = rUDEvt.GetRect();
        Rectangle aRect( rDrawRect.Left()+1, rDrawRect.Top()+1, rDrawRect.Left()+33, rDrawRect.Bottom()-1 );

        sal_Int32 nId = rUDEvt.GetItemId();
        if( nId >= 0 && nId <= mpList->Count() )
        {
            OutputDevice* pDevice = rUDEvt.GetDevice();

            sal_uIntPtr nOldDrawMode = pDevice->GetDrawMode();
            pDevice->SetDrawMode( GetSettings().GetStyleSettings().GetHighContrastMode() ? OUTPUT_DRAWMODE_CONTRAST : OUTPUT_DRAWMODE_COLOR );

            const XHatch& rXHatch = mpList->GetHatch( rUDEvt.GetItemId() )->GetHatch();
            MapMode aMode( MAP_100TH_MM );
            Hatch aHatch( (HatchStyle) rXHatch.GetHatchStyle(),
                          rXHatch.GetColor(),
                          rUDEvt.GetDevice()->LogicToPixel( Point( rXHatch.GetDistance(), 0 ), aMode ).X(),
                          (sal_uInt16)rXHatch.GetAngle() );
            const Polygon aPolygon( aRect );
            const PolyPolygon aPolypoly( aPolygon );
            pDevice->DrawHatch( aPolypoly, aHatch );

            pDevice->SetLineColor( COL_BLACK );
            pDevice->SetFillColor();
            pDevice->DrawRect( aRect );

            pDevice->SetDrawMode( nOldDrawMode );

            // Draw name
            pDevice->DrawText( Point( aRect.Right()+7, aRect.Top()-1 ), mpList->GetHatch( rUDEvt.GetItemId() )->GetName() );
        }
    }
}

/************************************************************************/

void HatchingLB::Append( XHatchEntry* pEntry, Bitmap* pBmp )
@@ -1049,6 +1008,7 @@ void HatchingLB::Append( XHatchEntry* pEntry, Bitmap* pBmp )
        InsertEntry( pEntry->GetName(), *pBmp );
    else
        InsertEntry( pEntry->GetName() );
    AdaptDropDownLineCountToMaximum();
}

/************************************************************************/
@@ -1080,25 +1040,25 @@ void FillAttrLB::Fill( const XHatchListRef &pList )
        else
            InsertEntry( pEntry->GetName() );
    }

    AdaptDropDownLineCountToMaximum();
    ListBox::SetUpdateMode( sal_True );
}

// Fills the listbox (provisional) with strings

GradientLB::GradientLB( Window* pParent, ResId Id, sal_Bool bUserDraw /*= sal_True*/ )
GradientLB::GradientLB( Window* pParent, ResId Id)
: ListBox( pParent, Id ),
  mpList(NULL),
  mbUserDraw( bUserDraw )
  mpList(NULL)
{
    EnableUserDraw( mbUserDraw);
    SetEdgeBlending(true);
}

GradientLB::GradientLB( Window* pParent, WinBits nWinStyle, sal_Bool bUserDraw /*= sal_True*/ )
: ListBox( pParent, nWinStyle ),
  mpList(NULL),
  mbUserDraw( bUserDraw )
GradientLB::GradientLB( Window* pParent, WinBits aWB)
: ListBox( pParent, aWB ),
  mpList(NULL)
{
    EnableUserDraw( mbUserDraw);
    SetEdgeBlending(true);
}

extern "C" SAL_DLLPUBLIC_EXPORT Window* SAL_CALL makeGradientLB(Window *pParent, VclBuilder::stringmap &rMap)
@@ -1123,78 +1083,20 @@ void GradientLB::Fill( const XGradientListRef &pList )

    SetUpdateMode( sal_False );

    if( mbUserDraw )
    for( long i = 0; i < nCount; i++ )
    {
        for( long i = 0; i < nCount; i++ )
            InsertEntry( pList->GetGradient( i )->GetName() );
    }
    else
    {
        for( long i = 0; i < nCount; i++ )
        {
            pEntry = pList->GetGradient( i );
            const Bitmap aBitmap = pList->GetUiBitmap( i );
            if( !aBitmap.IsEmpty() )
                InsertEntry( pEntry->GetName(), aBitmap );
            else
                InsertEntry( pEntry->GetName() );
        }
        pEntry = pList->GetGradient( i );
        const Bitmap aBitmap = pList->GetUiBitmap( i );
        if( !aBitmap.IsEmpty() )
            InsertEntry( pEntry->GetName(), aBitmap );
        else
            InsertEntry( pEntry->GetName() );
    }

    AdaptDropDownLineCountToMaximum();
    SetUpdateMode( sal_True );
}

void GradientLB::UserDraw( const UserDrawEvent& rUDEvt )
{
    if( mpList != NULL )
    {
        // Draw gradient with borderrectangle
        const Rectangle& rDrawRect = rUDEvt.GetRect();
        Rectangle aRect( rDrawRect.Left()+1, rDrawRect.Top()+1, rDrawRect.Left()+33, rDrawRect.Bottom()-1 );

        sal_Int32 nId = rUDEvt.GetItemId();
        if( nId >= 0 && nId <= mpList->Count() )
        {
            OutputDevice* pDevice = rUDEvt.GetDevice();

            const XGradient& rXGrad = mpList->GetGradient( rUDEvt.GetItemId() )->GetGradient();
            Gradient aGradient( (GradientStyle) rXGrad.GetGradientStyle(), rXGrad.GetStartColor(), rXGrad.GetEndColor() );
            aGradient.SetAngle( (sal_uInt16)rXGrad.GetAngle() );
            aGradient.SetBorder( rXGrad.GetBorder() );
            aGradient.SetOfsX( rXGrad.GetXOffset() );
            aGradient.SetOfsY( rXGrad.GetYOffset() );
            aGradient.SetStartIntensity( rXGrad.GetStartIntens() );
            aGradient.SetEndIntensity( rXGrad.GetEndIntens() );
            aGradient.SetSteps( 255 );

            // #i76307# always paint the preview in LTR, because this is what the document does
            Window* pWin = dynamic_cast<Window*>(pDevice);
            if( pWin && pWin->IsRTLEnabled() && Application::GetSettings().GetLayoutRTL())
            {
                long nWidth = pDevice->GetOutputSize().Width();

                pWin->EnableRTL( sal_False );

                Rectangle aMirrorRect( Point( nWidth - aRect.Left() - aRect.GetWidth(), aRect.Top() ),
                                       aRect.GetSize() );

                pDevice->DrawGradient( aMirrorRect, aGradient );

                pWin->EnableRTL( sal_True );
            }
            else
                pDevice->DrawGradient( aRect, aGradient );

            pDevice->SetLineColor( COL_BLACK );
            pDevice->SetFillColor();
            pDevice->DrawRect( aRect );

            // Draw name
            pDevice->DrawText( Point( aRect.Right()+7, aRect.Top()-1 ), mpList->GetGradient( rUDEvt.GetItemId() )->GetName() );
        }
    }
}

/************************************************************************/

void GradientLB::Append( XGradientEntry* pEntry, Bitmap* pBmp )
@@ -1203,6 +1105,7 @@ void GradientLB::Append( XGradientEntry* pEntry, Bitmap* pBmp )
        InsertEntry( pEntry->GetName(), *pBmp );
    else
        InsertEntry( pEntry->GetName() );
    AdaptDropDownLineCountToMaximum();
}

/************************************************************************/
@@ -1258,46 +1161,66 @@ void FillAttrLB::Fill( const XGradientListRef &pList )
        else
            InsertEntry( pEntry->GetName() );
    }

    AdaptDropDownLineCountToMaximum();
    ListBox::SetUpdateMode( sal_True );
}

// BitmapLB Constructor

BitmapLB::BitmapLB(Window* pParent, ResId Id, bool bUserDraw /*= false*/ )
BitmapLB::BitmapLB(Window* pParent, ResId Id)
:   ListBox(pParent, Id),
    maVD(),
    maBitmapEx(),
    mpList(NULL),
    mbUserDraw(bUserDraw)
    mpList(NULL)
{
    EnableUserDraw(mbUserDraw);
    SetEdgeBlending(true);
}

/************************************************************************/

void BitmapLB::SetVirtualDevice(const Size& rSize)
namespace
{
    maVD.SetOutputSizePixel(rSize);

    if(maBitmapEx.GetSizePixel().Width() > 8 || maBitmapEx.GetSizePixel().Height() > 8)
    void formatBitmapExToSize(BitmapEx& rBitmapEx, const Size& rSize)
    {
        maVD.DrawBitmapEx(Point(0, 0), rSize, maBitmapEx);
    }
    else
    {
        const Size aBitmapSize(maBitmapEx.GetSizePixel());

        for(sal_uInt32 y(0); y < rSize.Height(); y += aBitmapSize.Height())
        if(!rBitmapEx.IsEmpty() && rSize.Width() > 0 && rSize.Height() > 0)
        {
            for(sal_uInt32 x(0); x < rSize.Width(); x += aBitmapSize.Width())
            VirtualDevice aVirtualDevice;
            aVirtualDevice.SetOutputSizePixel(rSize);

            if(rBitmapEx.IsTransparent())
            {
                maVD.DrawBitmapEx(
                    Point(x, y),
                    maBitmapEx);
                const Point aNull(0, 0);
                static const sal_uInt32 nLen(8);
                static const Color aW(COL_WHITE);
                static const Color aG(0xef, 0xef, 0xef);

                aVirtualDevice.DrawCheckered(aNull, rSize, nLen, aW, aG);
            }

            if(rBitmapEx.GetSizePixel().Width() >= rSize.Width() && rBitmapEx.GetSizePixel().Height() >= rSize.Height())
            {
                rBitmapEx.Scale(rSize, BMP_SCALE_DEFAULT);
                aVirtualDevice.DrawBitmapEx(Point(0, 0), rBitmapEx);
            }
            else
            {
                const Size aBitmapSize(rBitmapEx.GetSizePixel());

                for(sal_Int32 y(0); y < rSize.Height(); y += aBitmapSize.Height())
                {
                    for(sal_Int32 x(0); x < rSize.Width(); x += aBitmapSize.Width())
                    {
                        aVirtualDevice.DrawBitmapEx(
                            Point(x, y),
                            rBitmapEx);
                    }
                }
            }

            rBitmapEx = aVirtualDevice.GetBitmap(Point(0, 0), rSize);
        }
    }
}
} // end of anonymous namespace

/************************************************************************/

@@ -1309,76 +1232,23 @@ void BitmapLB::Fill( const XBitmapListRef &pList )
    mpList = pList;
    XBitmapEntry* pEntry;
    const long nCount(pList->Count());
    const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
    const Size aSize(rStyleSettings.GetListBoxPreviewDefaultPixelSize());

    SetUpdateMode(false);

    if(mbUserDraw)
    for(long i(0); i < nCount; i++)
    {
        for(long i(0); i < nCount; i++)
        {
            InsertEntry(pList->GetBitmap(i)->GetName());
        }
    }
    else
    {
        for(long i(0); i < nCount; i++)
        {
            pEntry = pList->GetBitmap(i);
            maBitmapEx = pEntry->GetGraphicObject().GetGraphic().GetBitmapEx();
            const Size aSize(pList->getUiBitmapWidth(), pList->getUiBitmapHeight());
            SetVirtualDevice(aSize);
            InsertEntry(
                pEntry->GetName(),
                maVD.GetBitmap(Point(0, 0),
                aSize));
        }
        pEntry = pList->GetBitmap(i);
        maBitmapEx = pEntry->GetGraphicObject().GetGraphic().GetBitmapEx();
        formatBitmapExToSize(maBitmapEx, aSize);
        InsertEntry(pEntry->GetName(), maBitmapEx);
    }

    AdaptDropDownLineCountToMaximum();
    SetUpdateMode(true);
}

void BitmapLB::UserDraw(const UserDrawEvent& rUDEvt)
{
    if (mpList != NULL)
    {
        // Draw bitmap
        const Rectangle& rDrawRect = rUDEvt.GetRect();
        const Rectangle aRect(rDrawRect.Left() + 1, rDrawRect.Top() + 1, rDrawRect.Left() + 33, rDrawRect.Bottom() - 1);
        const sal_Int32 nId(rUDEvt.GetItemId());

        if(nId >= 0 && nId <= mpList->Count())
        {
            const Rectangle aClipRect(rDrawRect.Left() + 1, rDrawRect.Top() + 1, rDrawRect.Right() - 1, rDrawRect.Bottom() - 1);
            OutputDevice* pDevice = rUDEvt.GetDevice();
            pDevice->SetClipRegion(Region(aClipRect));
            maBitmapEx = mpList->GetBitmap(nId)->GetGraphicObject().GetGraphic().GetBitmapEx();
            long nPosBaseX = aRect.Left();
            long nPosBaseY = aRect.Top();

            if(maBitmapEx.GetSizePixel().Width() > 8 || maBitmapEx.GetSizePixel().Height() > 8)
            {
                pDevice->DrawBitmapEx(Point(nPosBaseX, nPosBaseY), Size(32, 16), maBitmapEx);
            }
            else
            {
                pDevice->DrawBitmapEx(Point(nPosBaseX+ 0, nPosBaseY+0 ), maBitmapEx);
                pDevice->DrawBitmapEx(Point(nPosBaseX+ 8, nPosBaseY+0 ), maBitmapEx);
                pDevice->DrawBitmapEx(Point(nPosBaseX+16, nPosBaseY+0 ), maBitmapEx);
                pDevice->DrawBitmapEx(Point(nPosBaseX+24, nPosBaseY+0 ), maBitmapEx);
                pDevice->DrawBitmapEx(Point(nPosBaseX+ 0, nPosBaseY+8 ), maBitmapEx);
                pDevice->DrawBitmapEx(Point(nPosBaseX+ 8, nPosBaseY+8 ), maBitmapEx);
                pDevice->DrawBitmapEx(Point(nPosBaseX+16, nPosBaseY+8 ), maBitmapEx);
                pDevice->DrawBitmapEx(Point(nPosBaseX+24, nPosBaseY+8 ), maBitmapEx);
            }

            pDevice->SetClipRegion();

            // Draw name
            pDevice->DrawText(Point(aRect.Right() + 7, aRect.Top() - 1), mpList->GetBitmap(nId)->GetName());
        }
    }
}

/************************************************************************/

void BitmapLB::Append(const Size& rSize, const XBitmapEntry& rEntry, BitmapEx* pBmpEx)
@@ -1386,16 +1256,15 @@ void BitmapLB::Append(const Size& rSize, const XBitmapEntry& rEntry, BitmapEx* p
    if(pBmpEx)
    {
        maBitmapEx = rEntry.GetGraphicObject().GetGraphic().GetBitmapEx();
        SetVirtualDevice(rSize);
        InsertEntry(
            rEntry.GetName(),
            maVD.GetBitmap(Point(0, 0),
            rSize));
        formatBitmapExToSize(maBitmapEx, rSize);
        InsertEntry(rEntry.GetName(), maBitmapEx);
    }
    else
    {
        InsertEntry(rEntry.GetName());
    }

    AdaptDropDownLineCountToMaximum();
}

/************************************************************************/
@@ -1407,11 +1276,8 @@ void BitmapLB::Modify(const Size& rSize, const XBitmapEntry& rEntry, sal_uInt16 
    if(pBmpEx)
    {
        maBitmapEx = rEntry.GetGraphicObject().GetGraphic().GetBitmapEx();
        SetVirtualDevice(rSize);
        InsertEntry(
            rEntry.GetName(),
            maVD.GetBitmap(Point(0, 0), rSize),
            nPos);
        formatBitmapExToSize(maBitmapEx, rSize);
        InsertEntry(rEntry.GetName(), maBitmapEx, nPos);
    }
    else
    {
@@ -1426,37 +1292,12 @@ FillAttrLB::FillAttrLB(Window* pParent, WinBits aWB)

/************************************************************************/

void FillAttrLB::SetVirtualDevice(const Size& rSize)
{
    maVD.SetOutputSizePixel(rSize);
    maVD.Erase();

    if(maBitmapEx.GetSizePixel().Width() > 8 || maBitmapEx.GetSizePixel().Height() > 8)
    {
        maVD.DrawBitmapEx(Point(0, 0), rSize, maBitmapEx);
    }
    else
    {
        const Size aBitmapSize(maBitmapEx.GetSizePixel());

        for(sal_uInt32 y(0); y < rSize.Height(); y += aBitmapSize.Height())
        {
            for(sal_uInt32 x(0); x < rSize.Width(); x += aBitmapSize.Width())
            {
                maVD.DrawBitmapEx(
                    Point(x, y),
                    maBitmapEx);
            }
        }
    }
}

/************************************************************************/

void FillAttrLB::Fill( const XBitmapListRef &pList )
{
    const long nCount(pList->Count());
    XBitmapEntry* pEntry;
    const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
    const Size aSize(rStyleSettings.GetListBoxPreviewDefaultPixelSize());

    ListBox::SetUpdateMode(false);

@@ -1464,25 +1305,25 @@ void FillAttrLB::Fill( const XBitmapListRef &pList )
    {
        pEntry = pList->GetBitmap( i );
        maBitmapEx = pEntry->GetGraphicObject().GetGraphic().GetBitmapEx();
        const Size aSize(pList->getUiBitmapWidth(), pList->getUiBitmapHeight());
        SetVirtualDevice(aSize);
        ListBox::InsertEntry(
            pEntry->GetName(),
            maVD.GetBitmap(Point(0, 0),
            aSize));
        formatBitmapExToSize(maBitmapEx, aSize);
        ListBox::InsertEntry(pEntry->GetName(), maBitmapEx);
    }

    AdaptDropDownLineCountToMaximum();
    ListBox::SetUpdateMode(true);
}

void FillTypeLB::Fill()
{
    SetUpdateMode( sal_False );

    InsertEntry( String( SVX_RES( RID_SVXSTR_INVISIBLE ) ) );
    InsertEntry( String( SVX_RES( RID_SVXSTR_COLOR ) ) );
    InsertEntry( String( SVX_RES( RID_SVXSTR_GRADIENT ) ) );
    InsertEntry( String( SVX_RES( RID_SVXSTR_HATCH ) ) );
    InsertEntry( String( SVX_RES( RID_SVXSTR_BITMAP ) ) );

    AdaptDropDownLineCountToMaximum();
    SetUpdateMode( sal_True );
}

@@ -1490,12 +1331,14 @@ LineLB::LineLB(Window* pParent, ResId Id)
:   ListBox(pParent, Id),
    mbAddStandardFields(true)
{
    // No EdgeBlending for LineStyle/Dash SetEdgeBlending(true);
}

LineLB::LineLB(Window* pParent, WinBits aWB)
:   ListBox(pParent, aWB),
    mbAddStandardFields(true)
{
    // No EdgeBlending for LineStyle/Dash SetEdgeBlending(true);
}

LineLB::~LineLB()
@@ -1545,6 +1388,8 @@ void LineLB::Fill( const XDashListRef &pList )
        else
            InsertEntry( pEntry->GetName() );
    }

    AdaptDropDownLineCountToMaximum();
    SetUpdateMode( sal_True );
}

@@ -1556,6 +1401,7 @@ void LineLB::Append( XDashEntry* pEntry, const Bitmap* pBmp )
        InsertEntry( pEntry->GetName(), *pBmp );
    else
        InsertEntry( pEntry->GetName() );
    AdaptDropDownLineCountToMaximum();
}

/************************************************************************/
@@ -1575,11 +1421,13 @@ void LineLB::Modify( XDashEntry* pEntry, sal_uInt16 nPos, const Bitmap* pBmp )
LineEndLB::LineEndLB( Window* pParent, ResId Id )
    : ListBox( pParent, Id )
{
    // No EdgeBlending for LineEnds SetEdgeBlending(true);
}

LineEndLB::LineEndLB( Window* pParent, WinBits aWB )
    : ListBox( pParent, aWB )
{
    // No EdgeBlending for LineEnds SetEdgeBlending(true);
}

LineEndLB::~LineEndLB(void)
@@ -1613,6 +1461,8 @@ void LineEndLB::Fill( const XLineEndListRef &pList, sal_Bool bStart )
        else
            InsertEntry( pEntry->GetName() );
    }

    AdaptDropDownLineCountToMaximum();
    SetUpdateMode( sal_True );
}

@@ -1633,6 +1483,7 @@ void LineEndLB::Append( XLineEndEntry* pEntry, const Bitmap* pBmp, sal_Bool bSta
    }
    else
        InsertEntry( pEntry->GetName() );
    AdaptDropDownLineCountToMaximum();
}

/************************************************************************/
diff --git a/svx/source/sidebar/area/AreaPropertyPanel.cxx b/svx/source/sidebar/area/AreaPropertyPanel.cxx
index ee8d0cc..f4166fa 100644
--- a/svx/source/sidebar/area/AreaPropertyPanel.cxx
+++ b/svx/source/sidebar/area/AreaPropertyPanel.cxx
@@ -318,7 +318,7 @@ IMPL_LINK( AreaPropertyPanel, SelectFillTypeHdl, ListBox *, pToolBox )
                            mpLbFillAttr->Fill( aItem.GetGradientList() );
                        }

                        mpLbFillAttr->SetDropDownLineCount(std::min(sal_uInt16(20), mpLbFillAttr->GetEntryCount()));
                        mpLbFillAttr->AdaptDropDownLineCountToMaximum();

                        if ( mnLastPosGradient != LISTBOX_ENTRY_NOTFOUND)
                        {
@@ -353,7 +353,7 @@ IMPL_LINK( AreaPropertyPanel, SelectFillTypeHdl, ListBox *, pToolBox )
                            mpLbFillAttr->Fill( aItem.GetHatchList() );
                        }

                        mpLbFillAttr->SetDropDownLineCount(std::min(sal_uInt16(20), mpLbFillAttr->GetEntryCount()));
                        mpLbFillAttr->AdaptDropDownLineCountToMaximum();

                        if ( mnLastPosHatch != LISTBOX_ENTRY_NOTFOUND )
                        {
@@ -388,7 +388,7 @@ IMPL_LINK( AreaPropertyPanel, SelectFillTypeHdl, ListBox *, pToolBox )
                            mpLbFillAttr->Fill( aItem.GetBitmapList() );
                        }

                        mpLbFillAttr->SetDropDownLineCount(std::min(sal_uInt16(20), mpLbFillAttr->GetEntryCount()));
                        mpLbFillAttr->AdaptDropDownLineCountToMaximum();

                        if ( mnLastPosBitmap != LISTBOX_ENTRY_NOTFOUND )
                        {
diff --git a/svx/source/sidebar/line/LinePropertyPanel.cxx b/svx/source/sidebar/line/LinePropertyPanel.cxx
index 4f39c5b..c6da700 100644
--- a/svx/source/sidebar/line/LinePropertyPanel.cxx
+++ b/svx/source/sidebar/line/LinePropertyPanel.cxx
@@ -287,7 +287,7 @@ void LinePropertyPanel::Initialize()
    aLink = LINK( this, LinePropertyPanel, ChangeLineStyleHdl );
    mpLBStyle->SetSelectHdl( aLink );
    mpLBStyle->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Style")));
    mpLBStyle->SetDropDownLineCount(std::min(sal_uInt16(20), mpLBStyle->GetEntryCount()));
    mpLBStyle->AdaptDropDownLineCountToMaximum();

    mpTBWidth->SetItemImage(TBI_WIDTH, mpIMGWidthIcon[0]);
    aTbxSize = mpTBWidth->CalcWindowSizePixel() ;
@@ -306,11 +306,11 @@ void LinePropertyPanel::Initialize()
    aLink = LINK( this, LinePropertyPanel, ChangeStartHdl );
    mpLBStart->SetSelectHdl( aLink );
    mpLBStart->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Beginning Style"))); //wj acc
    mpLBStart->SetDropDownLineCount(std::min(sal_uInt16(20), mpLBStart->GetEntryCount()));
    mpLBStart->AdaptDropDownLineCountToMaximum();
    aLink = LINK( this, LinePropertyPanel, ChangeEndHdl );
    mpLBEnd->SetSelectHdl( aLink );
    mpLBEnd->SetAccessibleName(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Ending Style")));  //wj acc
    mpLBEnd->SetDropDownLineCount(std::min(sal_uInt16(20), mpLBEnd->GetEntryCount()));
    mpLBEnd->AdaptDropDownLineCountToMaximum();

    aLink = LINK(this, LinePropertyPanel, ChangeTransparentHdl);
    mpMFTransparent->SetModifyHdl(aLink);
diff --git a/svx/source/sidebar/possize/PosSizePropertyPanel.cxx b/svx/source/sidebar/possize/PosSizePropertyPanel.cxx
index ff95a4d..97abed5 100644
--- a/svx/source/sidebar/possize/PosSizePropertyPanel.cxx
+++ b/svx/source/sidebar/possize/PosSizePropertyPanel.cxx
@@ -201,7 +201,7 @@ void PosSizePropertyPanel::Initialize()
    mpMtrAngle->InsertValue(22500, FUNIT_CUSTOM);
    mpMtrAngle->InsertValue(27000, FUNIT_CUSTOM);
    mpMtrAngle->InsertValue(31500, FUNIT_CUSTOM);
    mpMtrAngle->SetDropDownLineCount(mpMtrAngle->GetEntryCount());
    mpMtrAngle->AdaptDropDownLineCountToMaximum();

    SfxViewShell* pCurSh = SfxViewShell::Current();
    if ( pCurSh )
diff --git a/svx/source/tbxctrls/SvxColorValueSet.cxx b/svx/source/tbxctrls/SvxColorValueSet.cxx
index 4363fa0..d990fab 100644
--- a/svx/source/tbxctrls/SvxColorValueSet.cxx
+++ b/svx/source/tbxctrls/SvxColorValueSet.cxx
@@ -18,14 +18,15 @@

#include <svx/SvxColorValueSet.hxx>
#include <svx/xtable.hxx>
#include <svtools/accessibilityoptions.hxx>
#include <vcl/builder.hxx>
#include <vcl/svapp.hxx>

//////////////////////////////////////////////////////////////////////////////

SvxColorValueSet::SvxColorValueSet(Window* _pParent, WinBits nWinStyle)
:   ValueSet(_pParent, nWinStyle)
{
    SetEdgeBlending(true);
}

extern "C" SAL_DLLPUBLIC_EXPORT Window* SAL_CALL makeSvxColorValueSet(Window *pParent, VclBuilder::stringmap &rMap)
@@ -46,27 +47,28 @@ extern "C" SAL_DLLPUBLIC_EXPORT Window* SAL_CALL makeSvxColorValueSet(Window *pP
SvxColorValueSet::SvxColorValueSet(Window* _pParent, const ResId& rResId)
:   ValueSet(_pParent, rResId)
{
    SetEdgeBlending(true);
}

sal_uInt32 SvxColorValueSet::getMaxRowCount() const
{
    const SvtAccessibilityOptions aOptions;
    const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();

    return aOptions.GetColorValueSetMaximumRowCount();
    return rStyleSettings.GetColorValueSetMaximumRowCount();
}

sal_uInt32 SvxColorValueSet::getEntryEdgeLength() const
{
    const SvtAccessibilityOptions aOptions;
    const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();

    return aOptions.GetColorValueSetEntryEdgeLength();
    return rStyleSettings.GetListBoxPreviewDefaultPixelSize().Height() + 1;
}

sal_uInt32 SvxColorValueSet::getColumnCount() const
{
    const SvtAccessibilityOptions aOptions;
    const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();

    return aOptions.GetColorValueSetColumnCount();
    return rStyleSettings.GetColorValueSetColumnCount();
}

void SvxColorValueSet::addEntriesForXColorList(const XColorList& rXColorList, sal_uInt32 nStartIndex)
diff --git a/svx/source/xoutdev/xtabdash.cxx b/svx/source/xoutdev/xtabdash.cxx
index 40eac34..bf5deff 100644
--- a/svx/source/xoutdev/xtabdash.cxx
+++ b/svx/source/xoutdev/xtabdash.cxx
@@ -82,7 +82,8 @@ void XDashList::impCreate()
        VirtualDevice* pVirDev = new VirtualDevice;
        OSL_ENSURE(0 != pVirDev, "XDashList: no VirtualDevice created!" );
        pVirDev->SetMapMode(MAP_100TH_MM);
        const Size aSize(pVirDev->PixelToLogic(Size(getUiBitmapWidth() * 2, getUiBitmapHeight())));
        const Size& rSize = rStyleSettings.GetListBoxPreviewDefaultPixelSize();
        const Size aSize(pVirDev->PixelToLogic(Size(rSize.Width() * 2, rSize.Height())));
        pVirDev->SetOutputSize(aSize);
        pVirDev->SetDrawMode(rStyleSettings.GetHighContrastMode()
            ? DRAWMODE_SETTINGSLINE | DRAWMODE_SETTINGSFILL | DRAWMODE_SETTINGSTEXT | DRAWMODE_SETTINGSGRADIENT
@@ -111,7 +112,7 @@ void XDashList::impCreate()
        pLineObject->SetModel(pSdrModel);
        pLineObject->SetMergedItem(XLineStyleItem(XLINE_DASH));
        pLineObject->SetMergedItem(XLineColorItem(String(), rStyleSettings.GetFieldTextColor()));
        const Size aLineWidth(pVirDev->PixelToLogic(Size(getUiBitmapLineWidth(), 0)));
        const Size aLineWidth(pVirDev->PixelToLogic(Size(rStyleSettings.GetListBoxPreviewDefaultLineWidth(), 0)));
        pLineObject->SetMergedItem(XLineWidthItem(aLineWidth.getWidth()));
        mpData = new impXDashList(pVirDev, pSdrModel, pBackgroundObject, pLineObject);
        OSL_ENSURE(0 != mpData, "XDashList: data creation went wrong!" );
diff --git a/svx/source/xoutdev/xtabgrdt.cxx b/svx/source/xoutdev/xtabgrdt.cxx
index c753e6e..5815678 100644
--- a/svx/source/xoutdev/xtabgrdt.cxx
+++ b/svx/source/xoutdev/xtabgrdt.cxx
@@ -73,7 +73,8 @@ void XGradientList::impCreate()
        VirtualDevice* pVirDev = new VirtualDevice;
        OSL_ENSURE(0 != pVirDev, "XGradientList: no VirtualDevice created!" );
        pVirDev->SetMapMode(MAP_100TH_MM);
        const Size aSize(pVirDev->PixelToLogic(Size(getUiBitmapWidth(), getUiBitmapHeight())));
        const Size& rSize = rStyleSettings.GetListBoxPreviewDefaultPixelSize();
        const Size aSize(pVirDev->PixelToLogic(rSize));
        pVirDev->SetOutputSize(aSize);
        pVirDev->SetDrawMode(rStyleSettings.GetHighContrastMode()
            ? DRAWMODE_SETTINGSLINE | DRAWMODE_SETTINGSFILL | DRAWMODE_SETTINGSTEXT | DRAWMODE_SETTINGSGRADIENT
@@ -92,7 +93,7 @@ void XGradientList::impCreate()
        pBackgroundObject->SetMergedItem(XFillStyleItem(XFILL_GRADIENT));
        pBackgroundObject->SetMergedItem(XLineStyleItem(XLINE_SOLID));
        pBackgroundObject->SetMergedItem(XLineColorItem(String(), Color(COL_BLACK)));
        pBackgroundObject->SetMergedItem(XGradientStepCountItem(sal_uInt16((getUiBitmapWidth() + getUiBitmapHeight()) / 3)));
        pBackgroundObject->SetMergedItem(XGradientStepCountItem(sal_uInt16((rSize.Width() + rSize.Height()) / 3)));

        mpData = new impXGradientList(pVirDev, pSdrModel, pBackgroundObject);
        OSL_ENSURE(0 != mpData, "XGradientList: data creation went wrong!" );
diff --git a/svx/source/xoutdev/xtabhtch.cxx b/svx/source/xoutdev/xtabhtch.cxx
index da88b32..027953a 100644
--- a/svx/source/xoutdev/xtabhtch.cxx
+++ b/svx/source/xoutdev/xtabhtch.cxx
@@ -79,7 +79,7 @@ void XHatchList::impCreate()
        VirtualDevice* pVirDev = new VirtualDevice;
        OSL_ENSURE(0 != pVirDev, "XDashList: no VirtualDevice created!" );
        pVirDev->SetMapMode(MAP_100TH_MM);
        const Size aSize(pVirDev->PixelToLogic(Size(getUiBitmapWidth(), getUiBitmapHeight())));
        const Size aSize(pVirDev->PixelToLogic(rStyleSettings.GetListBoxPreviewDefaultPixelSize()));
        pVirDev->SetOutputSize(aSize);
        pVirDev->SetDrawMode(rStyleSettings.GetHighContrastMode()
            ? DRAWMODE_SETTINGSLINE | DRAWMODE_SETTINGSFILL | DRAWMODE_SETTINGSTEXT | DRAWMODE_SETTINGSGRADIENT
diff --git a/svx/source/xoutdev/xtable.cxx b/svx/source/xoutdev/xtable.cxx
index 3999ba2..eb21b4d32 100644
--- a/svx/source/xoutdev/xtable.cxx
+++ b/svx/source/xoutdev/xtable.cxx
@@ -299,25 +299,4 @@ OUString XPropertyList::GetDefaultExtFilter( XPropertyListType t )
    return aFilter + GetDefaultExt( t );
}

sal_uInt32 XPropertyList::getUiBitmapWidth() const
{
    static sal_uInt32 nWidth = 32; // alternative: 42;

    return nWidth;
}

sal_uInt32 XPropertyList::getUiBitmapHeight() const
{
    static sal_uInt32 nHeight = 12; // alternative: 16;

    return nHeight;
}

sal_uInt32 XPropertyList::getUiBitmapLineWidth() const
{
    static sal_uInt32 nLineWidth = 3;

    return nLineWidth;
}

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/svx/source/xoutdev/xtablend.cxx b/svx/source/xoutdev/xtablend.cxx
index 1003c1d..30ce2a4 100644
--- a/svx/source/xoutdev/xtablend.cxx
+++ b/svx/source/xoutdev/xtablend.cxx
@@ -88,7 +88,8 @@ void XLineEndList::impCreate()
        VirtualDevice* pVirDev = new VirtualDevice;
        OSL_ENSURE(0 != pVirDev, "XLineEndList: no VirtualDevice created!" );
        pVirDev->SetMapMode(MAP_100TH_MM);
        const Size aSize(pVirDev->PixelToLogic(Size(getUiBitmapWidth() * 2, getUiBitmapHeight())));
        const Size& rSize = rStyleSettings.GetListBoxPreviewDefaultPixelSize();
        const Size aSize(pVirDev->PixelToLogic(Size(rSize.Width() * 2, rSize.Height())));
        pVirDev->SetOutputSize(aSize);
        pVirDev->SetDrawMode(rStyleSettings.GetHighContrastMode()
            ? DRAWMODE_SETTINGSLINE | DRAWMODE_SETTINGSFILL | DRAWMODE_SETTINGSTEXT | DRAWMODE_SETTINGSGRADIENT
@@ -115,7 +116,7 @@ void XLineEndList::impCreate()
        SdrObject* pLineObject = new SdrPathObj(OBJ_LINE, basegfx::B2DPolyPolygon(aPolygon));
        OSL_ENSURE(0 != pLineObject, "XLineEndList: no LineObject created!" );
        pLineObject->SetModel(pSdrModel);
        const Size aLineWidth(pVirDev->PixelToLogic(Size(getUiBitmapLineWidth(), 0)));
        const Size aLineWidth(pVirDev->PixelToLogic(Size(rStyleSettings.GetListBoxPreviewDefaultLineWidth(), 0)));
        pLineObject->SetMergedItem(XLineWidthItem(aLineWidth.getWidth()));
        const sal_uInt32 nArrowHeight((aSize.Height() * 8) / 10);
        pLineObject->SetMergedItem(XLineStartWidthItem(nArrowHeight));
diff --git a/vcl/inc/ilstbox.hxx b/vcl/inc/ilstbox.hxx
index a18b293..8962c1d 100644
--- a/vcl/inc/ilstbox.hxx
+++ b/vcl/inc/ilstbox.hxx
@@ -64,33 +64,33 @@ struct ImplEntryType
    long        mnFlags;
    long        mnHeight;

                ImplEntryType( const OUString& rStr, const Image& rImage ) :
                    maStr( rStr ),
                    maImage( rImage ),
                    mnFlags( 0 ),
                    mnHeight( 0 )
                {
                    mbIsSelected = sal_False;
                    mpUserData = NULL;
                }
    ImplEntryType( const OUString& rStr, const Image& rImage ) :
        maStr( rStr ),
        maImage( rImage ),
        mnFlags( 0 ),
        mnHeight( 0 )
    {
        mbIsSelected = sal_False;
        mpUserData = NULL;
    }

                ImplEntryType( const OUString& rStr ) :
                    maStr( rStr ),
                    mnFlags( 0 ),
                    mnHeight( 0 )
                {
                    mbIsSelected = sal_False;
                    mpUserData = NULL;
                }
    ImplEntryType( const OUString& rStr ) :
        maStr( rStr ),
        mnFlags( 0 ),
        mnHeight( 0 )
    {
        mbIsSelected = sal_False;
        mpUserData = NULL;
    }

                ImplEntryType( const Image& rImage ) :
                    maImage( rImage ),
                    mnFlags( 0 ),
                    mnHeight( 0 )
                {
                    mbIsSelected = sal_False;
                    mpUserData = NULL;
                }
    ImplEntryType( const Image& rImage ) :
        maImage( rImage ),
        mnFlags( 0 ),
        mnHeight( 0 )
    {
        mbIsSelected = sal_False;
        mpUserData = NULL;
    }
};

// -----------------
@@ -226,24 +226,26 @@ private:

    sal_uInt16          mnSelectModifier;   // Modifiers

    sal_Bool            mbHasFocusRect:         1,
                    mbSort:                 1,  // ListBox sorted
                    mbTrack:                1,  // Tracking
                    mbMulti:                1,  // MultiListBox
                    mbStackMode:            1,  // StackSelection
                    mbSimpleMode:           1,  // SimpleMode for MultiListBox
                    mbImgsDiffSz:           1,  // Images have different sizes
                    mbTravelSelect:         1,  // TravelSelect
                    mbTrackingSelect:       1,  // Selected at a MouseMove
                    mbSelectionChanged:     1,  // Do not call Select() too often ...
                    mbMouseMoveSelect:      1,  // Select at MouseMove
                    mbGrabFocus:            1,  // Grab focus at MBDown
                    mbUserDrawEnabled:      1,  // UserDraw possible
                    mbInUserDraw:           1,  // In UserDraw
                    mbReadOnly:             1,  // ReadOnly
                    mbMirroring:            1,  // pb: #106948# explicit mirroring for calc
                    mbRight:                1,  // right align Text output
                    mbCenter:               1;  // center Text output
    /// bitfield
    bool mbHasFocusRect : 1;
    bool mbSort : 1;             // ListBox sorted
    bool mbTrack : 1;            // Tracking
    bool mbMulti : 1;            // MultiListBox
    bool mbStackMode : 1;        // StackSelection
    bool mbSimpleMode : 1;       // SimpleMode for MultiListBox
    bool mbImgsDiffSz : 1;       // Images have different sizes
    bool mbTravelSelect : 1;     // TravelSelect
    bool mbTrackingSelect : 1;   // Selected at a MouseMove
    bool mbSelectionChanged : 1; // Do not call Select() too often ...
    bool mbMouseMoveSelect : 1;  // Select at MouseMove
    bool mbGrabFocus : 1;        // Grab focus at MBDown
    bool mbUserDrawEnabled : 1;  // UserDraw possible
    bool mbInUserDraw : 1;       // In UserDraw
    bool mbReadOnly : 1;         // ReadOnly
    bool mbMirroring : 1;        // pb: #106948# explicit mirroring for calc
    bool mbRight : 1;            // right align Text output
    bool mbCenter : 1;           // center Text output
    bool mbEdgeBlending : 1;

    Link            maScrollHdl;
    Link            maSelectHdl;
@@ -252,8 +254,7 @@ private:
    Link            maUserDrawHdl;
    Link            maMRUChangedHdl;

    ::vcl::QuickSelectionEngine
                    maQuickSelectionEngine;
    ::vcl::QuickSelectionEngine maQuickSelectionEngine;

protected:
    virtual void    KeyInput( const KeyEvent& rKEvt );
@@ -318,31 +319,31 @@ public:
    void            SetLeftIndent( long n );
    void            ScrollHorz( long nDiff );

    void            AllowGrabFocus( sal_Bool b )        { mbGrabFocus = b; }
    sal_Bool            IsGrabFocusAllowed() const      { return mbGrabFocus; }
    void            AllowGrabFocus( bool b )        { mbGrabFocus = b; }
    bool            IsGrabFocusAllowed() const      { return mbGrabFocus; }

    void            SetSeparatorPos( sal_uInt16 n )     { mnSeparatorPos = n; }
    sal_uInt16          GetSeparatorPos() const         { return mnSeparatorPos; }

    void            SetTravelSelect( sal_Bool bTravelSelect ) { mbTravelSelect = bTravelSelect; }
    sal_Bool            IsTravelSelect() const          { return mbTravelSelect; }
    sal_Bool            IsTrackingSelect() const            { return mbTrackingSelect; }
    void            SetTravelSelect( bool bTravelSelect ) { mbTravelSelect = bTravelSelect; }
    bool            IsTravelSelect() const          { return mbTravelSelect; }
    bool            IsTrackingSelect() const        { return mbTrackingSelect; }

    void            SetUserItemSize( const Size& rSz );
    const Size&     GetUserItemSize() const             { return maUserItemSize; }

    void            EnableUserDraw( sal_Bool bUserDraw ) { mbUserDrawEnabled = bUserDraw; }
    sal_Bool            IsUserDrawEnabled() const   { return mbUserDrawEnabled; }
    void            EnableUserDraw( bool bUserDraw ) { mbUserDrawEnabled = bUserDraw; }
    bool            IsUserDrawEnabled() const   { return mbUserDrawEnabled; }

    void            EnableMultiSelection( sal_Bool bMulti, sal_Bool bStackMode ) { mbMulti = bMulti; mbStackMode = bStackMode; }
    sal_Bool            IsMultiSelectionEnabled() const     { return mbMulti; }
    void            EnableMultiSelection( bool bMulti, bool bStackMode ) { mbMulti = bMulti; mbStackMode = bStackMode; }
    bool            IsMultiSelectionEnabled() const     { return mbMulti; }

    void            SetMultiSelectionSimpleMode( sal_Bool bSimple ) { mbSimpleMode = bSimple; }
    sal_Bool            IsMultiSelectionSimpleMode() const          { return mbSimpleMode; }
    void            SetMultiSelectionSimpleMode( bool bSimple ) { mbSimpleMode = bSimple; }
    bool            IsMultiSelectionSimpleMode() const          { return mbSimpleMode; }

    void            EnableMouseMoveSelect( sal_Bool bMouseMoveSelect ) { mbMouseMoveSelect = bMouseMoveSelect; }
    sal_Bool            IsMouseMoveSelectEnabled() const    { return mbMouseMoveSelect; }
    sal_Bool            IsMouseMoveSelect() const   { return mbMouseMoveSelect||mbStackMode; }
    void            EnableMouseMoveSelect( bool bMouseMoveSelect ) { mbMouseMoveSelect = bMouseMoveSelect; }
    bool            IsMouseMoveSelectEnabled() const    { return mbMouseMoveSelect; }
    bool            IsMouseMoveSelect() const   { return mbMouseMoveSelect||mbStackMode; }

    Size            CalcSize( sal_uInt16 nMaxLines ) const;
    Rectangle       GetBoundingRectangle( sal_uInt16 nItem ) const;
@@ -363,21 +364,24 @@ public:
    void            SetMRUChangedHdl( const Link& rLink )   { maMRUChangedHdl = rLink; }
    const Link&     GetMRUChangedHdl() const                { return maMRUChangedHdl; }

    sal_Bool            IsSelectionChanged() const { return mbSelectionChanged; }
    bool            IsSelectionChanged() const { return mbSelectionChanged; }
    sal_uInt16          GetSelectModifier() const { return mnSelectModifier; }

    void            EnableSort( sal_Bool b ) { mbSort = b; }
    void            EnableSort( bool b ) { mbSort = b; }

    void            SetReadOnly( sal_Bool bReadOnly )   { mbReadOnly = bReadOnly; }
    sal_Bool            IsReadOnly() const              { return mbReadOnly; }
    void            SetReadOnly( bool bReadOnly )   { mbReadOnly = bReadOnly; }
    bool            IsReadOnly() const              { return mbReadOnly; }

    using Control::ImplInitSettings;
    void            ImplInitSettings( sal_Bool bFont, sal_Bool bForeground, sal_Bool bBackground );
    sal_uInt16          ImplGetTextStyle() const;

    // pb: #106948# explicit mirroring for calc
    inline void     EnableMirroring()       { mbMirroring = sal_True; }
    inline sal_Bool     IsMirroring() const { return mbMirroring; }
    inline void     EnableMirroring()       { mbMirroring = true; }
    inline bool     IsMirroring() const { return mbMirroring; }

    bool GetEdgeBlending() const { return mbEdgeBlending; }
    void SetEdgeBlending(bool bNew) { mbEdgeBlending = bNew; }

protected:
    // ISearchableStringList
@@ -397,9 +401,13 @@ private:
    ScrollBar*          mpHScrollBar;
    ScrollBar*          mpVScrollBar;
    ScrollBarBox*       mpScrollBarBox;
    sal_Bool                mbVScroll       : 1,    // VScroll an oder aus
                        mbHScroll       : 1,    // HScroll an oder aus
                        mbAutoHScroll   : 1;    // AutoHScroll an oder aus

    /// bitfield
    bool mbVScroll : 1;     // VScroll an oder aus
    bool mbHScroll : 1;     // HScroll an oder aus
    bool mbAutoHScroll : 1; // AutoHScroll an oder aus
    bool mbEdgeBlending : 1;

    Link                maScrollHdl;    // Weil der vom ImplListBoxWindow selbst benoetigt wird.
    ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > mxDNDListenerContainer;

@@ -503,6 +511,9 @@ public:
    sal_uInt16          GetDisplayLineCount() const
    { return maLBWindow.GetDisplayLineCount(); }

    bool GetEdgeBlending() const { return mbEdgeBlending; }
    void SetEdgeBlending(bool bNew);

    // pb: #106948# explicit mirroring for calc
    inline void     EnableMirroring()   { maLBWindow.EnableMirroring(); }
    inline void     SetDropTraget(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& i_xDNDListenerContainer){ mxDNDListenerContainer= i_xDNDListenerContainer; }
@@ -569,9 +580,10 @@ private:
    Link            maMBDownHdl;
    Link            maUserDrawHdl;

    sal_Bool        mbUserDrawEnabled   : 1,
                    mbInUserDraw        : 1;

    /// bitfield
    bool            mbUserDrawEnabled : 1;
    bool            mbInUserDraw : 1;
    bool            mbEdgeBlending : 1;

    void ImplDraw( bool bLayout = false );
protected:
@@ -607,10 +619,13 @@ public:
    void            SetUserItemSize( const Size& rSz )  { maUserItemSize = rSz; }
    const Size&     GetUserItemSize() const             { return maUserItemSize; }

    void            EnableUserDraw( sal_Bool bUserDraw )    { mbUserDrawEnabled = bUserDraw; }
    sal_Bool            IsUserDrawEnabled() const           { return mbUserDrawEnabled; }
    void            EnableUserDraw( bool bUserDraw )    { mbUserDrawEnabled = bUserDraw; }
    bool            IsUserDrawEnabled() const           { return mbUserDrawEnabled; }

    void            DrawEntry( sal_Bool bDrawImage, sal_Bool bDrawText, sal_Bool bDrawTextAtImagePos = sal_False, bool bLayout = false );

    bool GetEdgeBlending() const { return mbEdgeBlending; }
    void SetEdgeBlending(bool bNew) { mbEdgeBlending = bNew; }
};

// -----------
diff --git a/vcl/source/app/settings.cxx b/vcl/source/app/settings.cxx
index 638d27f..94f1752 100644
--- a/vcl/source/app/settings.cxx
+++ b/vcl/source/app/settings.cxx
@@ -34,6 +34,7 @@
#include "vcl/i18nhelp.hxx"
#include "vcl/configsettings.hxx"
#include "vcl/gradient.hxx"
#include "vcl/outdev.hxx"

#include "unotools/fontcfg.hxx"
#include "unotools/localedatawrapper.hxx"
@@ -233,6 +234,15 @@ ImplStyleData::ImplStyleData() :
    mnUseImagesInMenus          = STYLE_MENUIMAGES_AUTO;
    mnPreferredSymbolsStyle         = STYLE_SYMBOLS_AUTO;
    mpFontOptions              = NULL;
    mnEdgeBlending = 35;
    maEdgeBlendingTopLeftColor = RGB_COLORDATA(0xC0, 0xC0, 0xC0);
    maEdgeBlendingBottomRightColor = RGB_COLORDATA(0x40, 0x40, 0x40);
    mnListBoxMaximumLineCount = 25;
    mnColorValueSetColumnCount = 12;
    mnColorValueSetMaximumRowCount = 40;
    maListBoxPreviewDefaultLogicSize = Size(15, 7);
    maListBoxPreviewDefaultPixelSize = Size(0, 0); // on-demand calculated in GetListBoxPreviewDefaultPixelSize()
    mnListBoxPreviewDefaultLineWidth = 1;

    SetStandardStyles();
}
@@ -345,6 +355,15 @@ ImplStyleData::ImplStyleData( const ImplStyleData& rData ) :
    mnSymbolsStyle              = rData.mnSymbolsStyle;
    mnPreferredSymbolsStyle     = rData.mnPreferredSymbolsStyle;
    mpFontOptions               = rData.mpFontOptions;
    mnEdgeBlending              = rData.mnEdgeBlending;
    maEdgeBlendingTopLeftColor  = rData.maEdgeBlendingTopLeftColor;
    maEdgeBlendingBottomRightColor = rData.maEdgeBlendingBottomRightColor;
    mnListBoxMaximumLineCount   = rData.mnListBoxMaximumLineCount;
    mnColorValueSetColumnCount  = rData.mnColorValueSetColumnCount;
    mnColorValueSetMaximumRowCount = rData.mnColorValueSetMaximumRowCount;
    maListBoxPreviewDefaultLogicSize = rData.maListBoxPreviewDefaultLogicSize;
    maListBoxPreviewDefaultPixelSize = rData.maListBoxPreviewDefaultPixelSize;
    mnListBoxPreviewDefaultLineWidth = rData.mnListBoxPreviewDefaultLineWidth;
}

// -----------------------------------------------------------------------
@@ -466,6 +485,17 @@ StyleSettings::~StyleSettings()
        mpData->mnRefCount--;
}

const Size& StyleSettings::GetListBoxPreviewDefaultPixelSize() const
{
    if(0 == mpData->maListBoxPreviewDefaultPixelSize.Width() || 0 == mpData->maListBoxPreviewDefaultPixelSize.Height())
    {
        const_cast< StyleSettings* >(this)->mpData->maListBoxPreviewDefaultPixelSize =
            Application::GetDefaultDevice()->LogicToPixel(mpData->maListBoxPreviewDefaultLogicSize, MAP_APPFONT);
    }

    return mpData->maListBoxPreviewDefaultPixelSize;
}

// -----------------------------------------------------------------------

void StyleSettings::Set3DColors( const Color& rColor )
@@ -934,7 +964,16 @@ sal_Bool StyleSettings::operator ==( const StyleSettings& rSet ) const
         (mpData->mbHideDisabledMenuItems   == rSet.mpData->mbHideDisabledMenuItems)    &&
         (mpData->mbAcceleratorsInContextMenus  == rSet.mpData->mbAcceleratorsInContextMenus)&&
         (mpData->mbPrimaryButtonWarpsSlider == rSet.mpData->mbPrimaryButtonWarpsSlider) &&
         (mpData->maFontColor               == rSet.mpData->maFontColor ))
         (mpData->maFontColor               == rSet.mpData->maFontColor)                &&
         (mpData->mnEdgeBlending                    == rSet.mpData->mnEdgeBlending)                     &&
         (mpData->maEdgeBlendingTopLeftColor        == rSet.mpData->maEdgeBlendingTopLeftColor)         &&
         (mpData->maEdgeBlendingBottomRightColor    == rSet.mpData->maEdgeBlendingBottomRightColor)     &&
         (mpData->mnListBoxMaximumLineCount         == rSet.mpData->mnListBoxMaximumLineCount)          &&
         (mpData->mnColorValueSetColumnCount        == rSet.mpData->mnColorValueSetColumnCount)         &&
         (mpData->mnColorValueSetMaximumRowCount    == rSet.mpData->mnColorValueSetMaximumRowCount)     &&
         (mpData->maListBoxPreviewDefaultLogicSize  == rSet.mpData->maListBoxPreviewDefaultLogicSize)   &&
         (mpData->maListBoxPreviewDefaultPixelSize  == rSet.mpData->maListBoxPreviewDefaultPixelSize)   &&
         (mpData->mnListBoxPreviewDefaultLineWidth  == rSet.mpData->mnListBoxPreviewDefaultLineWidth))
        return sal_True;
    else
        return sal_False;
diff --git a/vcl/source/control/combobox.cxx b/vcl/source/control/combobox.cxx
index 6c2387a..425bd5e 100644
--- a/vcl/source/control/combobox.cxx
+++ b/vcl/source/control/combobox.cxx
@@ -537,9 +537,14 @@ void ComboBox::EnableAutoSize( sal_Bool bAuto )
    if ( mpFloatWin )
    {
        if ( bAuto && !mpFloatWin->GetDropDownLineCount() )
            mpFloatWin->SetDropDownLineCount( 16 );
        {
            // Adapt to GetListBoxMaximumLineCount here; was on fixed number of five before
            AdaptDropDownLineCountToMaximum();
        }
        else if ( !bAuto )
        {
            mpFloatWin->SetDropDownLineCount( 0 );
        }
    }
}

@@ -561,6 +566,14 @@ void ComboBox::SetDropDownLineCount( sal_uInt16 nLines )

// -----------------------------------------------------------------------

void ComboBox::AdaptDropDownLineCountToMaximum()
{
    // adapt to maximum allowed number
    SetDropDownLineCount(std::min(GetEntryCount(), GetSettings().GetStyleSettings().GetListBoxMaximumLineCount()));
}

// -----------------------------------------------------------------------

sal_uInt16 ComboBox::GetDropDownLineCount() const
{
    sal_uInt16 nLines = 0;
diff --git a/vcl/source/control/ilstbox.cxx b/vcl/source/control/ilstbox.cxx
index 2fc66bb..b15bfc3 100644
--- a/vcl/source/control/ilstbox.cxx
+++ b/vcl/source/control/ilstbox.cxx
@@ -544,26 +544,27 @@ ImplListBoxWindow::ImplListBoxWindow( Window* pParent, WinBits nWinStyle ) :
    mnBorder            = 1;
    mnSelectModifier    = 0;
    mnUserDrawEntry     = LISTBOX_ENTRY_NOTFOUND;
    mbTrack             = sal_False;
    mbImgsDiffSz        = sal_False;
    mbTravelSelect      = sal_False;
    mbTrackingSelect    = sal_False;
    mbSelectionChanged  = sal_False;
    mbMouseMoveSelect   = sal_False;
    mbMulti             = sal_False;
    mbStackMode         = sal_False;
    mbGrabFocus         = sal_False;
    mbUserDrawEnabled   = sal_False;
    mbInUserDraw        = sal_False;
    mbReadOnly          = sal_False;
    mbHasFocusRect      = sal_False;
    mbRight             = ( nWinStyle & WB_RIGHT )      ? sal_True : sal_False;
    mbCenter            = ( nWinStyle & WB_CENTER )     ? sal_True : sal_False;
    mbSimpleMode        = ( nWinStyle & WB_SIMPLEMODE ) ? sal_True : sal_False;
    mbSort              = ( nWinStyle & WB_SORT )       ? sal_True : sal_False;
    mbTrack             = false;
    mbImgsDiffSz        = false;
    mbTravelSelect      = false;
    mbTrackingSelect    = false;
    mbSelectionChanged  = false;
    mbMouseMoveSelect   = false;
    mbMulti             = false;
    mbStackMode         = false;
    mbGrabFocus         = false;
    mbUserDrawEnabled   = false;
    mbInUserDraw        = false;
    mbReadOnly          = false;
    mbHasFocusRect      = false;
    mbRight             = ( nWinStyle & WB_RIGHT );
    mbCenter            = ( nWinStyle & WB_CENTER );
    mbSimpleMode        = ( nWinStyle & WB_SIMPLEMODE );
    mbSort              = ( nWinStyle & WB_SORT );
    mbEdgeBlending      = false;

    // pb: #106948# explicit mirroring for calc
    mbMirroring         = sal_False;
    mbMirroring         = false;

    mnCurrentPos            = LISTBOX_ENTRY_NOTFOUND;
    mnTrackingSaveSelection = LISTBOX_ENTRY_NOTFOUND;
@@ -638,7 +639,7 @@ void ImplListBoxWindow::Clear()
    mnMaxImgHeight  = 0;
    mnTop           = 0;
    mnLeft          = 0;
    mbImgsDiffSz    = sal_False;
    mbImgsDiffSz    = false;
    ImplClearLayoutData();

    mnCurrentPos = LISTBOX_ENTRY_NOTFOUND;
@@ -714,9 +715,9 @@ void ImplListBoxWindow::ImplUpdateEntryMetrics( ImplEntryType& rEntry )
        aMetrics.nImgHeight = (sal_uInt16) CalcZoom( aImgSz.Height() );

        if( mnMaxImgWidth && ( aMetrics.nImgWidth != mnMaxImgWidth ) )
            mbImgsDiffSz = sal_True;
            mbImgsDiffSz = true;
        else if ( mnMaxImgHeight && ( aMetrics.nImgHeight != mnMaxImgHeight ) )
            mbImgsDiffSz = sal_True;
            mbImgsDiffSz = true;

        if( aMetrics.nImgWidth > mnMaxImgWidth )
            mnMaxImgWidth = aMetrics.nImgWidth;
@@ -791,7 +792,7 @@ void ImplListBoxWindow::ImplCallSelect()
    }

    maSelectHdl.Call( NULL );
    mbSelectionChanged = sal_False;
    mbSelectionChanged = false;
}

// -----------------------------------------------------------------------
@@ -836,7 +837,7 @@ void ImplListBoxWindow::ImplShowFocusRect()
    if ( mbHasFocusRect )
        HideFocus();
    ShowFocus( maFocusRect );
    mbHasFocusRect = sal_True;
    mbHasFocusRect = true;
}

// -----------------------------------------------------------------------
@@ -846,7 +847,7 @@ void ImplListBoxWindow::ImplHideFocusRect()
    if ( mbHasFocusRect )
    {
        HideFocus();
        mbHasFocusRect = sal_False;
        mbHasFocusRect = false;
    }
}

@@ -912,7 +913,7 @@ sal_uInt16 ImplListBoxWindow::GetLastVisibleEntry() const

void ImplListBoxWindow::MouseButtonDown( const MouseEvent& rMEvt )
{
    mbMouseMoveSelect = sal_False;  // only till the first MouseButtonDown
    mbMouseMoveSelect = false;  // only till the first MouseButtonDown
    maQuickSelectionEngine.Reset();

    if ( !IsReadOnly() )
@@ -928,9 +929,9 @@ void ImplListBoxWindow::MouseButtonDown( const MouseEvent& rMEvt )
                    mnTrackingSaveSelection = LISTBOX_ENTRY_NOTFOUND;

                mnCurrentPos = nSelect;
                mbTrackingSelect = sal_True;
                mbTrackingSelect = true;
                SelectEntries( nSelect, LET_MBDOWN, rMEvt.IsShift(), rMEvt.IsMod1() );
                mbTrackingSelect = sal_False;
                mbTrackingSelect = false;
                if ( mbGrabFocus )
                    GrabFocus();

@@ -963,10 +964,10 @@ void ImplListBoxWindow::MouseMove( const MouseEvent& rMEvt )
                SetTopEntry( 0 );
                if ( mbStackMode ) // #87072#, #92323#
                {
                    mbTravelSelect = sal_True;
                    mbTravelSelect = true;
                    mnSelectModifier = rMEvt.GetModifier();
                    ImplCallSelect();
                    mbTravelSelect = sal_False;
                    mbTravelSelect = false;
                }

            }
@@ -990,18 +991,18 @@ void ImplListBoxWindow::MouseMove( const MouseEvent& rMEvt )
                    mpEntryList->IsEntrySelectable( nSelect ) &&
                    ( ( nSelect != mnCurrentPos ) || !GetEntryList()->GetSelectEntryCount() || ( nSelect != GetEntryList()->GetSelectEntryPos( 0 ) ) ) )
                {
                    mbTrackingSelect = sal_True;
                    mbTrackingSelect = true;
                    if ( SelectEntries( nSelect, LET_TRACKING, sal_False, sal_False ) )
                    {
                        if ( mbStackMode ) // #87072#
                        {
                            mbTravelSelect = sal_True;
                            mbTravelSelect = true;
                            mnSelectModifier = rMEvt.GetModifier();
                            ImplCallSelect();
                            mbTravelSelect = sal_False;
                            mbTravelSelect = false;
                        }
                    }
                    mbTrackingSelect = sal_False;
                    mbTrackingSelect = false;
                }
            }

@@ -1081,7 +1082,7 @@ void ImplListBoxWindow::SelectEntry( sal_uInt16 nPos, sal_Bool bSelect )
            mpEntryList->SelectEntry( nPos, sal_False );
            ImplPaint( nPos, sal_True );
        }
        mbSelectionChanged = sal_True;
        mbSelectionChanged = true;
    }
}

@@ -1221,7 +1222,7 @@ sal_Bool ImplListBoxWindow::SelectEntries( sal_uInt16 nSelect, LB_EVENT_TYPE eLE
        }

        if( bSelectionChanged )
            mbSelectionChanged = sal_True;
            mbSelectionChanged = true;

        if( bFocusChanged )
        {
@@ -1258,9 +1259,9 @@ void ImplListBoxWindow::Tracking( const TrackingEvent& rTEvt )
            maCancelHdl.Call( NULL );
            if ( !mbMulti )
            {
                mbTrackingSelect = sal_True;
                mbTrackingSelect = true;
                SelectEntry( mnTrackingSaveSelection, sal_True );
                mbTrackingSelect = sal_False;
                mbTrackingSelect = false;
                if ( mnTrackingSaveSelection != LISTBOX_ENTRY_NOTFOUND )
                {
                    long nHeightDiff = mpEntryList->GetAddedHeight( mnCurrentPos, mnTop, 0 );
@@ -1273,7 +1274,7 @@ void ImplListBoxWindow::Tracking( const TrackingEvent& rTEvt )
            }
        }

        mbTrack = sal_False;
        mbTrack = false;
    }
    else
    {
@@ -1282,14 +1283,14 @@ void ImplListBoxWindow::Tracking( const TrackingEvent& rTEvt )
        {
            if ( bInside )
            {
                mbTrack = sal_True;
                mbTrack = true;
            }

            // this case only happens, if the mouse button is pressed very briefly
            if( rTEvt.IsTrackingEnded() && mbTrack )
            {
                bTrackOrQuickClick = sal_True;
                mbTrack = sal_False;
                mbTrack = false;
            }
        }

@@ -1330,27 +1331,27 @@ void ImplListBoxWindow::Tracking( const TrackingEvent& rTEvt )
            {
                if ( ( nSelect != mnCurrentPos ) || !GetEntryList()->GetSelectEntryCount() )
                {
                    mbTrackingSelect = sal_True;
                    mbTrackingSelect = true;
                    if ( SelectEntries( nSelect, LET_TRACKING, bShift, bCtrl ) )
                    {
                        if ( mbStackMode ) // #87734# (#87072#)
                        {
                            mbTravelSelect = sal_True;
                            mbTravelSelect = true;
                            mnSelectModifier = rTEvt.GetMouseEvent().GetModifier();
                            ImplCallSelect();
                            mbTravelSelect = sal_False;
                            mbTravelSelect = false;
                        }
                    }
                    mbTrackingSelect = sal_False;
                    mbTrackingSelect = false;
                }
            }
            else
            {
                if ( !mbMulti && GetEntryList()->GetSelectEntryCount() )
                {
                    mbTrackingSelect = sal_True;
                    mbTrackingSelect = true;
                    SelectEntry( GetEntryList()->GetSelectEntryPos( 0 ), sal_False );
                    mbTrackingSelect = sal_False;
                    mbTrackingSelect = false;
                }
                else if ( mbStackMode )
                {
@@ -1372,18 +1373,18 @@ void ImplListBoxWindow::Tracking( const TrackingEvent& rTEvt )
                            }
                            else
                            {
                                mbTrackingSelect = sal_True;
                                mbTrackingSelect = true;
                                bSelectionChanged = SelectEntries( nSelect, LET_TRACKING, bShift, bCtrl );
                                mbTrackingSelect = sal_False;
                                mbTrackingSelect = false;
                            }

                            if ( bSelectionChanged )
                            {
                                mbSelectionChanged = sal_True;
                                mbTravelSelect = sal_True;
                                mbSelectionChanged = true;
                                mbTravelSelect = true;
                                mnSelectModifier = rTEvt.GetMouseEvent().GetModifier();
                                ImplCallSelect();
                                mbTravelSelect = sal_False;
                                mbTravelSelect = false;
                            }
                        }
                    }
@@ -1693,10 +1694,10 @@ sal_Bool ImplListBoxWindow::ProcessKeyInput( const KeyEvent& rKEvt )
        mnCurrentPos = nSelect;
        if ( SelectEntries( nSelect, eLET, bShift, bCtrl ) )
        {
            mbTravelSelect = sal_True;
            mbTravelSelect = true;
            mnSelectModifier = rKEvt.GetKeyCode().GetModifier();
            ImplCallSelect();
            mbTravelSelect = sal_False;
            mbTravelSelect = false;
        }
    }

@@ -1762,10 +1763,10 @@ void ImplListBoxWindow::SelectEntry( ::vcl::StringEntryIdentifier _entry )
    mnCurrentPos = nSelect;
    if ( SelectEntries( nSelect, LET_KEYMOVE, sal_False, sal_False ) )
    {
        mbTravelSelect = sal_True;
        mbTravelSelect = true;
        mnSelectModifier = 0;
        ImplCallSelect();
        mbTravelSelect = sal_False;
        mbTravelSelect = false;
    }
}

@@ -1805,7 +1806,7 @@ void ImplListBoxWindow::ImplPaint( sal_uInt16 nPos, sal_Bool bErase, bool bLayou

    if ( IsUserDrawEnabled() )
    {
        mbInUserDraw = sal_True;
        mbInUserDraw = true;
        mnUserDrawEntry = nPos;
        aRect.Left() -= mnLeft;
        if ( nPos < GetEntryList()->GetMRUCount() )
@@ -1818,7 +1819,7 @@ void ImplListBoxWindow::ImplPaint( sal_uInt16 nPos, sal_Bool bErase, bool bLayou

        UserDrawEvent aUDEvt( this, aRect, nPos, nCurr );
        maUserDrawHdl.Call( &aUDEvt );
        mbInUserDraw = sal_False;
        mbInUserDraw = false;
    }
    else
    {
@@ -1865,6 +1866,25 @@ void ImplListBoxWindow::DrawEntry( sal_uInt16 nPos, sal_Bool bDrawImage, sal_Boo
                aImgSz.Height() = CalcZoom( aImgSz.Height() );
                DrawImage( aPtImg, aImgSz, aImage );
            }

            const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
            const sal_uInt16 nEdgeBlendingPercent(GetEdgeBlending() ? rStyleSettings.GetEdgeBlending() : 0);

            if(nEdgeBlendingPercent)
            {
                const Rectangle aRect(aPtImg, aImgSz);
                Bitmap aBitmap(GetBitmap(aRect.TopLeft(), aRect.GetSize()));

                if(!aBitmap.IsEmpty())
                {
                    const Color& rTopLeft(rStyleSettings.GetEdgeBlendingTopLeftColor());
                    const Color& rBottomRight(rStyleSettings.GetEdgeBlendingBottomRightColor());
                    const sal_uInt8 nAlpha((nEdgeBlendingPercent * 255) / 100);

                    aBitmap.DrawBlendFrame(nAlpha, rTopLeft, rBottomRight);
                    DrawBitmap(aRect.TopLeft(), aBitmap);
                }
            }
        }
    }

@@ -2238,12 +2258,14 @@ ImplListBox::ImplListBox( Window* pParent, WinBits nWinStyle ) :
    mpVScrollBar->SetScrollHdl( aLink );
    mpHScrollBar->SetScrollHdl( aLink );

    mbVScroll       = sal_False;
    mbHScroll       = sal_False;
    mbAutoHScroll   = ( nWinStyle & WB_AUTOHSCROLL ) ? sal_True : sal_False;
    mbVScroll       = false;
    mbHScroll       = false;
    mbAutoHScroll   = ( nWinStyle & WB_AUTOHSCROLL );
    mbEdgeBlending  = false;

    maLBWindow.SetScrollHdl( LINK( this, ImplListBox, LBWindowScrolled ) );
    maLBWindow.SetMRUChangedHdl( LINK( this, ImplListBox, MRUChanged ) );
    maLBWindow.SetEdgeBlending(GetEdgeBlending());
    maLBWindow.Show();
}

@@ -2406,7 +2428,7 @@ void ImplListBox::ImplCheckScrollBars()
    {
        if( !mbVScroll )
            bArrange = true;
        mbVScroll = sal_True;
        mbVScroll = true;

        // check of the scrolled-out region
        if( GetEntryList()->GetSelectEntryCount() == 1 &&
@@ -2419,7 +2441,7 @@ void ImplListBox::ImplCheckScrollBars()
    {
        if( mbVScroll )
            bArrange = true;
        mbVScroll = sal_False;
        mbVScroll = false;
        SetTopEntry( 0 );
    }

@@ -2435,7 +2457,7 @@ void ImplListBox::ImplCheckScrollBars()
        {
            if( !mbHScroll )
                bArrange = true;
            mbHScroll = sal_True;
            mbHScroll = true;

            if ( !mbVScroll )   // maybe we do need one now
            {
@@ -2443,7 +2465,7 @@ void ImplListBox::ImplCheckScrollBars()
                if( nEntries > nMaxVisEntries )
                {
                    bArrange = true;
                    mbVScroll = sal_True;
                    mbVScroll = true;

                    // check of the scrolled-out region
                    if( GetEntryList()->GetSelectEntryCount() == 1 &&
@@ -2463,7 +2485,7 @@ void ImplListBox::ImplCheckScrollBars()
        {
            if( mbHScroll )
                bArrange = true;
            mbHScroll = sal_False;
            mbHScroll = false;
            SetLeftIndent( 0 );
        }
    }
@@ -2712,6 +2734,17 @@ OUString ImplListBox::GetMRUEntries( sal_Unicode cSep ) const
    return aEntries.makeStringAndClear();
}

// -----------------------------------------------------------------------

void ImplListBox::SetEdgeBlending(bool bNew)
{
    if(mbEdgeBlending != bNew)
    {
        mbEdgeBlending = bNew;
        maLBWindow.SetEdgeBlending(GetEdgeBlending());
    }
}

// =======================================================================

ImplWin::ImplWin( Window* pParent, WinBits nWinStyle ) :
@@ -2723,8 +2756,9 @@ ImplWin::ImplWin( Window* pParent, WinBits nWinStyle ) :
    else
        SetBackground( Wallpaper( GetSettings().GetStyleSettings().GetFieldColor() ) );

    mbInUserDraw = sal_False;
    mbUserDrawEnabled = sal_False;
    mbInUserDraw = false;
    mbUserDrawEnabled = false;
    mbEdgeBlending = false;
    mnItemPos = LISTBOX_ENTRY_NOTFOUND;
}

@@ -2878,10 +2912,10 @@ void ImplWin::ImplDraw( bool bLayout )

    if ( IsUserDrawEnabled() )
    {
        mbInUserDraw = sal_True;
        mbInUserDraw = true;
        UserDrawEvent aUDEvt( this, maFocusRect, mnItemPos, 0 );
        maUserDrawHdl.Call( &aUDEvt );
        mbInUserDraw = sal_False;
        mbInUserDraw = false;
    }
    else
    {
@@ -2909,6 +2943,7 @@ void ImplWin::DrawEntry( sal_Bool bDrawImage, sal_Bool bDrawText, sal_Bool bDraw
        sal_uInt16 nStyle = 0;
        Size aImgSz = maImage.GetSizePixel();
        Point aPtImg( nBorder, ( ( aOutSz.Height() - aImgSz.Height() ) / 2 ) );
        const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();

        // check for HC mode
        Image *pImage = &maImage;
@@ -2923,6 +2958,24 @@ void ImplWin::DrawEntry( sal_Bool bDrawImage, sal_Bool bDrawText, sal_Bool bDraw
            aImgSz.Height() = CalcZoom( aImgSz.Height() );
            DrawImage( aPtImg, aImgSz, *pImage, nStyle );
        }

        const sal_uInt16 nEdgeBlendingPercent(GetEdgeBlending() ? rStyleSettings.GetEdgeBlending() : 0);

        if(nEdgeBlendingPercent)
        {
            const Rectangle aRect(aPtImg, aImgSz);
            Bitmap aBitmap(GetBitmap(aRect.TopLeft(), aRect.GetSize()));

            if(!aBitmap.IsEmpty())
            {
                const Color& rTopLeft(rStyleSettings.GetEdgeBlendingTopLeftColor());
                const Color& rBottomRight(rStyleSettings.GetEdgeBlendingBottomRightColor());
                const sal_uInt8 nAlpha((nEdgeBlendingPercent * 255) / 100);

                aBitmap.DrawBlendFrame(nAlpha, rTopLeft, rBottomRight);
                DrawBitmap(aRect.TopLeft(), aBitmap);
            }
        }
    }

    if( bDrawText && !maString.isEmpty() )
diff --git a/vcl/source/control/lstbox.cxx b/vcl/source/control/lstbox.cxx
index 6278f8e..741558e 100644
--- a/vcl/source/control/lstbox.cxx
+++ b/vcl/source/control/lstbox.cxx
@@ -87,12 +87,12 @@ void ListBox::ImplInitListBoxData()
    mpFloatWin      = NULL;
    mpImplWin       = NULL;
    mpBtn           = NULL;

    mnDDHeight      = 0;
    mbDDAutoSize    = sal_True;
    mnSaveValue     = LISTBOX_ENTRY_NOTFOUND;
    mnLineCount     = 0;
    m_nMaxWidthChars = -1;
    mbDDAutoSize    = true;
    mbEdgeBlending  = false;
}


@@ -140,13 +140,13 @@ void ListBox::ImplInit( Window* pParent, WinBits nStyle )
        mpImplWin->SetUserDrawHdl( LINK( this, ListBox, ImplUserDrawHdl ) );
        mpImplWin->Show();
        mpImplWin->GetDropTarget()->addDropTargetListener(xDrop);
        mpImplWin->SetEdgeBlending(GetEdgeBlending());

        mpBtn = new ImplBtn( this, WB_NOLIGHTBORDER | WB_RECTSTYLE );
        ImplInitDropDownButton( mpBtn );
        mpBtn->SetMBDownHdl( LINK( this, ListBox, ImplClickBtnHdl ) );
        mpBtn->Show();
        mpBtn->GetDropTarget()->addDropTargetListener(xDrop);

    }

    Window* pLBParent = this;
@@ -159,6 +159,7 @@ void ListBox::ImplInit( Window* pParent, WinBits nStyle )
    mpImplLB->SetDoubleClickHdl( LINK( this, ListBox, ImplDoubleClickHdl ) );
    mpImplLB->SetUserDrawHdl( LINK( this, ListBox, ImplUserDrawHdl ) );
    mpImplLB->SetPosPixel( Point() );
    mpImplLB->SetEdgeBlending(GetEdgeBlending());
    mpImplLB->Show();

    mpImplLB->GetDropTarget()->addDropTargetListener(xDrop);
@@ -556,15 +557,20 @@ void ListBox::DataChanged( const DataChangedEvent& rDCEvt )
}


void ListBox::EnableAutoSize( sal_Bool bAuto )
void ListBox::EnableAutoSize( bool bAuto )
{
    mbDDAutoSize = bAuto;
    if ( mpFloatWin )
    {
        if ( bAuto && !mpFloatWin->GetDropDownLineCount() )
            mpFloatWin->SetDropDownLineCount( 16 );
        {
            // use GetListBoxMaximumLineCount here; before, was on fixed number of five
            AdaptDropDownLineCountToMaximum();
        }
        else if ( !bAuto )
        {
            mpFloatWin->SetDropDownLineCount( 0 );
        }
    }
}

@@ -584,6 +590,14 @@ void ListBox::SetDropDownLineCount( sal_uInt16 nLines )
}


void ListBox::AdaptDropDownLineCountToMaximum()
{
    // adapt to maximum allowed number
    SetDropDownLineCount(std::min(GetEntryCount(), GetSettings().GetStyleSettings().GetListBoxMaximumLineCount()));
}

// -----------------------------------------------------------------------

sal_uInt16 ListBox::GetDropDownLineCount() const
{
    if ( mpFloatWin )
@@ -1498,6 +1512,38 @@ bool ListBox::set_property(const OString &rKey, const OString &rValue)
    return true;
}

// -----------------------------------------------------------------------

void ListBox::SetEdgeBlending(bool bNew)
{
    if(mbEdgeBlending != bNew)
    {
        mbEdgeBlending = bNew;

        if(IsDropDownBox())
        {
            mpImplWin->Invalidate();
        }
        else
        {
            mpImplLB->Invalidate();
        }

        if(mpImplWin)
        {
            mpImplWin->SetEdgeBlending(GetEdgeBlending());
        }

        if(mpImplLB)
        {
            mpImplLB->SetEdgeBlending(GetEdgeBlending());
        }

        Invalidate();
    }
}

// =======================================================================
MultiListBox::MultiListBox( Window* pParent, WinBits nStyle ) :
    ListBox( WINDOW_MULTILISTBOX )
{