tdf#136918 restrict symbol size to button width

... and scale the button based on the DPI scaling factor.

The symbol size is based on pDev->GetTextHeight(), but the button
itself is fixed to 20px, which would break at some point. So this
at least scales the button witdh based on DPI, just like commit
1eba1c4597f8c2698aa91e2218d8452ad0fbc39c ("tdf#130991 Scale the
drop-down arrow size-request") did for the toolbar buttons.

OTOH this should probably just use the full button width ignoring
the GetTextHeight()...

Change-Id: I43010443265c10ad92f46cdecd1d7155a7a07a3e
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113710
Tested-by: Jenkins
Reviewed-by: Jan-Marek Glogowski <glogow@fbihome.de>
(cherry picked from commit ea4fb1559f7b99a0bfaf18f26cb3b6972c9cde1c)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113648
Reviewed-by: Adolfo Jayme Barrientos <fitojb@ubuntu.com>
diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx
index 0702cb1..d13a348 100644
--- a/vcl/inc/salvtables.hxx
+++ b/vcl/inc/salvtables.hxx
@@ -828,8 +828,8 @@ public:

    int get_menu_button_width() const override
    {
        const int nButtonWidth = 20;
        return nButtonWidth;
        OutputDevice* pDefault = Application::GetDefaultDevice();
        return 20 * (pDefault ? pDefault->GetDPIScaleFactor() : 1.0);
    }

    void CallHandleEventListener(VclWindowEvent& rEvent)
diff --git a/vcl/source/control/button.cxx b/vcl/source/control/button.cxx
index 37586da..91a4aa4 100644
--- a/vcl/source/control/button.cxx
+++ b/vcl/source/control/button.cxx
@@ -821,6 +821,8 @@ void PushButton::ImplDrawPushButtonContent(OutputDevice *pDev, DrawFlags nDrawFl

        // calculate symbol size
        tools::Long nSymbolSize    = pDev->GetTextHeight() / 2 + 1;
        if (nSymbolSize > aSize.Width() / 2)
            nSymbolSize = aSize.Width() / 2;

        nSeparatorX = aInRect.Right() - 2*nSymbolSize;
        aSize.AdjustWidth( -(2*nSymbolSize) );