improve the look of the macOS combobox

Change-Id: I4484fabcf6d883deeb3e417e46ce3973f2332f94
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114251
Tested-by: Noel Grandin <noel.grandin@collabora.co.uk>
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
diff --git a/include/vcl/settings.hxx b/include/vcl/settings.hxx
index 6795150..4926c4b 100644
--- a/include/vcl/settings.hxx
+++ b/include/vcl/settings.hxx
@@ -384,6 +384,18 @@ public:
    void                            SetMenuHighlightTextColor( const Color& rColor );
    const Color&                    GetMenuHighlightTextColor() const;

    void                            SetListBoxWindowBackgroundColor( const Color& rColor );
    const Color&                    GetListBoxWindowBackgroundColor() const;

    void                            SetListBoxWindowTextColor( const Color& rColor );
    const Color&                    GetListBoxWindowTextColor() const;

    void                            SetListBoxWindowHighlightColor( const Color& rColor );
    const Color&                    GetListBoxWindowHighlightColor() const;

    void                            SetListBoxWindowHighlightTextColor( const Color& rColor );
    const Color&                    GetListBoxWindowHighlightTextColor() const;

    void                            SetTabTextColor( const Color& rColor );
    const Color&                    GetTabTextColor() const;

diff --git a/vcl/osx/salframe.cxx b/vcl/osx/salframe.cxx
index 984ff8c..574122a 100644
--- a/vcl/osx/salframe.cxx
+++ b/vcl/osx/salframe.cxx
@@ -1283,6 +1283,11 @@ SAL_WNODEPRECATED_DECLARATIONS_POP
    aStyleSettings.SetMenuBarRolloverTextColor( aMenuTextColor );
    aStyleSettings.SetMenuBarHighlightTextColor(aStyleSettings.GetMenuHighlightTextColor());

    aStyleSettings.SetListBoxWindowBackgroundColor( aBackgroundColor );
    aStyleSettings.SetListBoxWindowTextColor( aMenuTextColor );
    aStyleSettings.SetListBoxWindowHighlightColor( aMenuHighlightColor );
    aStyleSettings.SetListBoxWindowHighlightTextColor( aMenuHighlightTextColor );

    // Set text colors for buttons and their different status according to OS settings, typically white for selected buttons,
    // black otherwise

diff --git a/vcl/source/app/settings.cxx b/vcl/source/app/settings.cxx
index f17c828..82093fc 100644
--- a/vcl/source/app/settings.cxx
+++ b/vcl/source/app/settings.cxx
@@ -125,6 +125,10 @@ struct ImplStyleData
    Color                           maMenuHighlightColor;
    Color                           maMenuHighlightTextColor;
    Color                           maMenuTextColor;
    Color                           maListBoxWindowBackgroundColor;
    Color                           maListBoxWindowTextColor;
    Color                           maListBoxWindowHighlightColor;
    Color                           maListBoxWindowHighlightTextColor;
    Color                           maMenuBarTextColor;
    Color                           maMenuBarRolloverTextColor;
    Color                           maMenuBarHighlightTextColor;
@@ -546,6 +550,10 @@ ImplStyleData::ImplStyleData( const ImplStyleData& rData ) :
    maMenuHighlightColor( rData.maMenuHighlightColor ),
    maMenuHighlightTextColor( rData.maMenuHighlightTextColor ),
    maMenuTextColor( rData.maMenuTextColor ),
    maListBoxWindowBackgroundColor( rData.maListBoxWindowBackgroundColor ),
    maListBoxWindowTextColor( rData.maListBoxWindowTextColor ),
    maListBoxWindowHighlightColor( rData.maListBoxWindowHighlightColor ),
    maListBoxWindowHighlightTextColor( rData.maListBoxWindowHighlightTextColor ),
    maMenuBarTextColor( rData.maMenuBarTextColor ),
    maMenuBarRolloverTextColor( rData.maMenuBarRolloverTextColor ),
    maMenuBarHighlightTextColor( rData.maMenuBarHighlightTextColor ),
@@ -692,6 +700,10 @@ void ImplStyleData::SetStandardStyles()
    maMenuBarRolloverColor      = COL_BLUE;
    maMenuBorderColor           = COL_LIGHTGRAY;
    maMenuTextColor             = COL_BLACK;
    maListBoxWindowBackgroundColor = COL_LIGHTGRAY;
    maListBoxWindowTextColor    = COL_BLACK;
    maListBoxWindowHighlightColor = COL_BLUE;
    maListBoxWindowHighlightTextColor = COL_WHITE;
    maMenuBarTextColor          = COL_BLACK;
    maMenuBarRolloverTextColor  = COL_WHITE;
    maMenuBarHighlightTextColor = COL_WHITE;
@@ -1439,6 +1451,58 @@ StyleSettings::GetMenuHighlightTextColor() const
}

void
StyleSettings::SetListBoxWindowBackgroundColor( const Color& rColor )
{
    CopyData();
    mxData->maListBoxWindowBackgroundColor = rColor;
}

const Color&
StyleSettings::GetListBoxWindowBackgroundColor() const
{
    return mxData->maListBoxWindowBackgroundColor;
}

void
StyleSettings::SetListBoxWindowTextColor( const Color& rColor )
{
    CopyData();
    mxData->maListBoxWindowTextColor = rColor;
}

const Color&
StyleSettings::GetListBoxWindowTextColor() const
{
    return mxData->maListBoxWindowTextColor;
}

void
StyleSettings::SetListBoxWindowHighlightColor( const Color& rColor )
{
    CopyData();
    mxData->maListBoxWindowHighlightColor = rColor;
}

const Color&
StyleSettings::GetListBoxWindowHighlightColor() const
{
    return mxData->maListBoxWindowHighlightColor;
}

void
StyleSettings::SetListBoxWindowHighlightTextColor( const Color& rColor )
{
    CopyData();
    mxData->maListBoxWindowHighlightTextColor = rColor;
}

const Color&
StyleSettings::GetListBoxWindowHighlightTextColor() const
{
    return mxData->maListBoxWindowHighlightTextColor;
}

void
StyleSettings::SetTabTextColor( const Color& rColor )
{
    CopyData();
@@ -2476,6 +2540,10 @@ bool StyleSettings::operator ==( const StyleSettings& rSet ) const
         (mxData->maMenuBarRolloverColor    == rSet.mxData->maMenuBarRolloverColor)     &&
         (mxData->maMenuBorderColor         == rSet.mxData->maMenuBorderColor)          &&
         (mxData->maMenuTextColor           == rSet.mxData->maMenuTextColor)            &&
         (mxData->maListBoxWindowBackgroundColor == rSet.mxData->maListBoxWindowBackgroundColor) &&
         (mxData->maListBoxWindowTextColor       == rSet.mxData->maListBoxWindowTextColor) &&
         (mxData->maListBoxWindowHighlightColor  == rSet.mxData->maListBoxWindowHighlightColor) &&
         (mxData->maListBoxWindowHighlightTextColor == rSet.mxData->maListBoxWindowHighlightTextColor) &&
         (mxData->maMenuBarTextColor        == rSet.mxData->maMenuBarTextColor)         &&
         (mxData->maMenuBarRolloverTextColor == rSet.mxData->maMenuBarRolloverTextColor) &&
         (mxData->maMenuHighlightColor      == rSet.mxData->maMenuHighlightColor)       &&
diff --git a/vcl/source/control/imp_listbox.cxx b/vcl/source/control/imp_listbox.cxx
index fa01c64..e0e731a 100644
--- a/vcl/source/control/imp_listbox.cxx
+++ b/vcl/source/control/imp_listbox.cxx
@@ -498,12 +498,12 @@ void ImplListBoxWindow::ApplySettings(vcl::RenderContext& rRenderContext)
    const StyleSettings& rStyleSettings = rRenderContext.GetSettings().GetStyleSettings();

    ApplyControlFont(rRenderContext, rStyleSettings.GetFieldFont());
    ApplyControlForeground(rRenderContext, rStyleSettings.GetFieldTextColor());
    ApplyControlForeground(rRenderContext, rStyleSettings.GetListBoxWindowTextColor());

    if (IsControlBackground())
        rRenderContext.SetBackground(GetControlBackground());
    else
        rRenderContext.SetBackground(rStyleSettings.GetFieldColor());
        rRenderContext.SetBackground(rStyleSettings.GetListBoxWindowBackgroundColor());
}

void ImplListBoxWindow::ImplCalcMetrics()
@@ -1617,8 +1617,8 @@ void ImplListBoxWindow::ImplPaint(vcl::RenderContext& rRenderContext, sal_Int32 
    bool bSelected = maEntryList.IsEntryPosSelected(nPos);
    if (bSelected)
    {
        rRenderContext.SetTextColor(!IsEnabled() ? rStyleSettings.GetDisableColor() : rStyleSettings.GetHighlightTextColor());
        rRenderContext.SetFillColor(rStyleSettings.GetHighlightColor());
        rRenderContext.SetTextColor(!IsEnabled() ? rStyleSettings.GetDisableColor() : rStyleSettings.GetListBoxWindowHighlightTextColor());
        rRenderContext.SetFillColor(rStyleSettings.GetListBoxWindowHighlightColor());
        rRenderContext.SetLineColor();
        rRenderContext.DrawRect(aRect);
    }