diff options
author | Ivan Timofeev <timofeev.i.s@gmail.com> | 2012-06-09 21:23:46 +0400 |
---|---|---|
committer | Ivan Timofeev <timofeev.i.s@gmail.com> | 2012-06-09 21:47:37 +0400 |
commit | 243fefb72897f45448d946d571397b7bc4893e7d (patch) | |
tree | 1361816195bd7845a69ee2b472d8d58e8c04247e /vcl | |
parent | 214c3b9002944ff5d05e249051e45f135e1b4943 (diff) |
fdo#42379: hide separators before calculating line breaks
it is nesessary since commit 1703501a100cd6d52578baeb4e8097218b285ffb,
ImplCalcBreaks looks for the last visible item.
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/source/window/toolbox.cxx | 63 |
1 files changed, 35 insertions, 28 deletions
diff --git a/vcl/source/window/toolbox.cxx b/vcl/source/window/toolbox.cxx index e02e3acac3bc..370eb0d4cf69 100644 --- a/vcl/source/window/toolbox.cxx +++ b/vcl/source/window/toolbox.cxx @@ -2336,6 +2336,39 @@ 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_SEPARATOR) || + ((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 +2388,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 +2548,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 +2582,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 +2680,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 |