tdf#133877 use optimal size for hamburger button

This way it'll properly scale, instead of using the fixed 28 pixel
dimension. This is a hack, which is used a few more times in VCL.
Still this should not be needed, but done automatically.
If there aren't any constraints, just return the optimal size!

Change-Id: I8aa32645ea95cba28d0daf56f0be27c15153b6c9
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/96390
Tested-by: Jenkins
Reviewed-by: Jan-Marek Glogowski <glogow@fbihome.de>
diff --git a/vcl/source/control/tabctrl.cxx b/vcl/source/control/tabctrl.cxx
index 4d483d9..484b457 100644
--- a/vcl/source/control/tabctrl.cxx
+++ b/vcl/source/control/tabctrl.cxx
@@ -85,7 +85,6 @@

// for the Tab positions
#define TAB_PAGERECT        0xFFFF
#define HAMBURGER_DIM       28

void TabControl::ImplInit( vcl::Window* pParent, WinBits nStyle )
{
@@ -2192,9 +2191,9 @@
    , eLastContext(vcl::EnumContext::Context::Any)
{
    m_pOpenMenu = VclPtr<PushButton>::Create( this , WB_CENTER | WB_VCENTER );
    m_pOpenMenu->SetSizePixel(Size(HAMBURGER_DIM, HAMBURGER_DIM));
    m_pOpenMenu->SetClickHdl(LINK(this, NotebookbarTabControlBase, OpenMenu));
    m_pOpenMenu->SetModeImage(Image(StockImage::Yes, SV_RESID_BITMAP_NOTEBOOKBAR));
    m_pOpenMenu->SetSizePixel(m_pOpenMenu->GetOptimalSize());
    m_pOpenMenu->Show();
}

@@ -2301,7 +2300,8 @@
    if (!m_pOpenMenu || m_pOpenMenu->isDisposed())
        return false;

    long nMaxWidth = nWidth - HAMBURGER_DIM;
    const long nHamburgerWidth = m_pOpenMenu->GetSizePixel().Width();
    long nMaxWidth = nWidth - nHamburgerWidth;
    long nShortcutsWidth = m_pShortcuts != nullptr ? m_pShortcuts->GetSizePixel().getWidth() + 1 : 0;
    long nFullWidth = nShortcutsWidth;

@@ -2369,7 +2369,7 @@

    long nPosY = (m_nHeaderHeight - m_pOpenMenu->GetSizePixel().getHeight()) / 2;
    // position the menu
    m_pOpenMenu->SetPosPixel(Point(nWidth - HAMBURGER_DIM, nPosY));
    m_pOpenMenu->SetPosPixel(Point(nWidth - nHamburgerWidth, nPosY));

    return true;
}