From 7fca7a731d1b2bc4a7b1fb6275a1c92ffa49cf75 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sun, 22 Apr 2007 19:32:38 +0000 Subject: [PATCH] don't leave pixels due to rounding errors in wxBoxSizer, allocate the extra pixels to the last item(s) instead, as wxFlexGridSizer (now) does git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45584 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/common/sizer.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/common/sizer.cpp b/src/common/sizer.cpp index 4c54b27d06..1258062d21 100644 --- a/src/common/sizer.cpp +++ b/src/common/sizer.cpp @@ -1660,13 +1660,14 @@ void wxBoxSizer::RecalcSizes() // the amount of free space which we should redistribute among the // stretchable items (i.e. those with non zero proportion) - const int delta = SizeInMajorDir(m_size) - SizeInMajorDir(m_minSize); + int delta = SizeInMajorDir(m_size) - SizeInMajorDir(m_minSize); // the position at which we put the next child wxPoint pt(m_position); const wxCoord totalMinorSize = SizeInMinorDir(m_size); + int totalProportion = m_totalProportion; for ( wxSizerItemList::const_iterator i = m_children.begin(); i != m_children.end(); ++i ) @@ -1681,11 +1682,15 @@ void wxBoxSizer::RecalcSizes() // adjust the size in the major direction using the proportion wxCoord majorSize = SizeInMajorDir(sizeThis); - if ( item->GetProportion() ) + const int propItem = item->GetProportion(); + if ( propItem ) { - // as at least one visible item has non-zero proportion the total - // proportion must be non zero - majorSize += (delta * item->GetProportion()) / m_totalProportion; + const int deltaItem = (delta * propItem) / totalProportion; + + majorSize += deltaItem; + + delta -= deltaItem; + totalProportion -= propItem; }