diff options
author | Ivan Timofeev <timofeev.i.s@gmail.com> | 2012-06-09 21:23:46 +0400 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2012-06-11 15:59:04 +0100 |
commit | b29d04e9360920045cfa87f1e6263434915ae9a7 (patch) | |
tree | 62d1d85c34058e9bfcd5ed639e31519c45a25954 | |
parent | f11040c27f60e3b3c4e31c43de6b74f5b8676c31 (diff) |
fdo#42379: hide separators before calculating line breaks
it is nesessary since commit 1703501a100cd6d52578baeb4e8097218b285ffb,
ImplCalcBreaks looks for the last visible item.
(cherry picked from commit 243fefb72897f45448d946d571397b7bc4893e7d)
Signed-off-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r-- | vcl/source/window/toolbox.cxx | 62 |
1 files changed, 34 insertions, 28 deletions
diff --git a/vcl/source/window/toolbox.cxx b/vcl/source/window/toolbox.cxx index 9da3a7adb588..a055c6a8e28a 100644 --- a/vcl/source/window/toolbox.cxx +++ b/vcl/source/window/toolbox.cxx @@ -2336,6 +2336,38 @@ Size ToolBox::ImplGetOptimalFloatingSize( FloatingSizeMode eMode ) return aCurrentSize; } +namespace +{ +static void lcl_hideDoubleSeparators( std::vector< ImplToolItem >& rItems ) +{ + bool bLastSep( true ); + std::vector< ImplToolItem >::iterator it; + for ( it = rItems.begin(); it != rItems.end(); ++it ) + { + if ( it->meType == TOOLBOXITEM_SEPARATOR ) + { + it->mbVisible = sal_False; + if ( !bLastSep ) + { + // check if any visible items have to appear behind it + std::vector< ImplToolItem >::iterator temp_it; + for ( temp_it = it+1; temp_it != rItems.end(); ++temp_it ) + { + if ( ((temp_it->meType == TOOLBOXITEM_BUTTON) && + temp_it->mbVisible) ) + { + it->mbVisible = sal_True; + break; + } + } + } + bLastSep = true; + } + else if ( it->mbVisible ) + bLastSep = false; + } +} +} void ToolBox::ImplFormat( sal_Bool bResize ) { @@ -2355,10 +2387,8 @@ void ToolBox::ImplFormat( sal_Bool bResize ) long nMax; // width of layoutarea in pixels sal_uInt16 nFormatLine; sal_Bool bMustFullPaint; - sal_Bool bLastSep; std::vector< ImplToolItem >::iterator it; - std::vector< ImplToolItem >::iterator temp_it; ImplDockingWindowWrapper *pWrapper = ImplGetDockingManager()->GetDockingWindowWrapper( this ); sal_Bool bIsInPopupMode = ImplIsInPopupMode(); @@ -2517,7 +2547,6 @@ void ToolBox::ImplFormat( sal_Bool bResize ) long nX = nLeft; // top-left offset long nY = nTop; nFormatLine = 1; - bLastSep = sal_True; // save old scroll rectangles and reset them Rectangle aOldLowerRect = maLowerRect; @@ -2552,6 +2581,8 @@ void ToolBox::ImplFormat( sal_Bool bResize ) // do we have any toolbox items at all ? if ( !mpData->m_aItems.empty() || IsMenuEnabled() ) { + lcl_hideDoubleSeparators( mpData->m_aItems ); + // compute line breaks and visible lines give the current window width (nMax) // the break indicators will be stored within each item (it->mbBreak) mnCurLines = ImplCalcBreaks( nMax, NULL, mbHorz ); @@ -2648,31 +2679,6 @@ void ToolBox::ImplFormat( sal_Bool bResize ) it = mpData->m_aItems.begin(); while ( it != mpData->m_aItems.end() ) { - // hide double separators - if ( it->meType == TOOLBOXITEM_SEPARATOR ) - { - it->mbVisible = sal_False; - if ( !bLastSep ) - { - // check if any visible items have to appear behind it - temp_it = it+1; - while ( temp_it != mpData->m_aItems.end() ) - { - if ( (temp_it->meType == TOOLBOXITEM_SEPARATOR) || - ((temp_it->meType == TOOLBOXITEM_BUTTON) && - temp_it->mbVisible) ) - { - it->mbVisible = sal_True; - break; - } - ++temp_it; - } - } - bLastSep = sal_True; - } - else if ( it->mbVisible ) - bLastSep = sal_False; - it->mbShowWindow = sal_False; // check for line break and advance nX/nY accordingly |