vcl/source/window/toolbox.cxx | 63 +++++++++++++++++++++++------------------- 1 file changed, 35 insertions(+), 28 deletions(-)
New commits: commit 0a9b398f3effecfea3b330fdc2f46b6f914cba81 Author: Ivan Timofeev <[email protected]> Date: Sat Jun 9 21:23:46 2012 +0400 fdo#42379: hide separators before calculating line breaks it is nesessary since commit 1703501a100cd6d52578baeb4e8097218b285ffb, ImplCalcBreaks looks for the last visible item. Change-Id: Ifb103d264116930339d8f5cfb267601f0e760fd2 diff --git a/vcl/source/window/toolbox.cxx b/vcl/source/window/toolbox.cxx index e02e3ac..6621a67 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( false ); + 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 _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
