[Libreoffice-commits] .: vcl/inc vcl/source
Caolán McNamara
caolan at kemper.freedesktop.org
Sat Feb 4 06:01:49 PST 2012
vcl/inc/vcl/combobox.hxx | 1 +
vcl/source/control/combobox.cxx | 27 +++++++++++++++++++++++++--
2 files changed, 26 insertions(+), 2 deletions(-)
New commits:
commit ab0efc3eb1c0b351bcaccd847cd66f986f95781e
Author: Caolán McNamara <caolanm at redhat.com>
Date: Sat Feb 4 12:57:37 2012 +0100
Better optimal combobox width
if dropdown button is wider than scrollbar than use that as
the extra width over the edit widget
diff --git a/vcl/inc/vcl/combobox.hxx b/vcl/inc/vcl/combobox.hxx
index d44a595..85d4e20 100644
--- a/vcl/inc/vcl/combobox.hxx
+++ b/vcl/inc/vcl/combobox.hxx
@@ -78,6 +78,7 @@ protected:
SAL_DLLPRIVATE WinBits ImplInitStyle( WinBits nStyle );
SAL_DLLPRIVATE void ImplLoadRes( const ResId& rResId );
SAL_DLLPRIVATE void ImplCalcEditHeight();
+ SAL_DLLPRIVATE long getMaxWidthScrollBarAndDownButton() const;
protected:
ComboBox( WindowType nType );
diff --git a/vcl/source/control/combobox.cxx b/vcl/source/control/combobox.cxx
index 97abfc1..a93dc67 100644
--- a/vcl/source/control/combobox.cxx
+++ b/vcl/source/control/combobox.cxx
@@ -1078,6 +1078,29 @@ Size ComboBox::GetOptimalSize(WindowSizeType eType) const
// -----------------------------------------------------------------------
+long ComboBox::getMaxWidthScrollBarAndDownButton() const
+{
+ long nButtonDownWidth = 0;
+
+ Window *pBorder = GetWindow( WINDOW_BORDER );
+ ImplControlValue aControlValue;
+ Point aPoint;
+ Rectangle aContent, aBound;
+
+ // use the full extent of the control
+ Rectangle aArea( aPoint, pBorder->GetOutputSizePixel() );
+
+ if ( GetNativeControlRegion(CTRL_COMBOBOX, PART_BUTTON_DOWN,
+ aArea, 0, aControlValue, rtl::OUString(), aBound, aContent) )
+ {
+ nButtonDownWidth = aContent.getWidth();
+ }
+
+ long nScrollBarWidth = GetSettings().GetStyleSettings().GetScrollBarSize();
+
+ return std::max(nScrollBarWidth, nButtonDownWidth);
+}
+
Size ComboBox::CalcMinimumSize() const
{
Size aSz;
@@ -1090,7 +1113,7 @@ Size ComboBox::CalcMinimumSize() const
{
aSz.Height() = mpImplLB->CalcSize( 1 ).Height();
aSz.Width() = mpImplLB->GetMaxEntryWidth();
- aSz.Width() += GetSettings().GetStyleSettings().GetScrollBarSize();
+ aSz.Width() += getMaxWidthScrollBarAndDownButton();
}
aSz = CalcWindowSize( aSz );
@@ -1150,7 +1173,7 @@ Size ComboBox::CalcSize( sal_uInt16 nColumns, sal_uInt16 nLines ) const
aSz.Width() = aMinSz.Width();
if ( IsDropDownBox() )
- aSz.Width() += GetSettings().GetStyleSettings().GetScrollBarSize();
+ aSz.Width() += getMaxWidthScrollBarAndDownButton();
if ( !IsDropDownBox() )
{
More information about the Libreoffice-commits
mailing list