From b8885bb39b61f599b16d059a17ea4d9cae7018e7 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sun, 30 Sep 2012 22:19:47 +0000 Subject: [PATCH] Fix handling of not fully specified min/max size in wxBoxSizer. wxSizerItem::AddBorderToSize() added in r72344 (see #11497) didn't work correctly as it replaced unspecified (i.e. set to -1) components of wxSize with the small positive values that did take effect, contrary to the intention. Fix it to only adjust the actually set component(s) of wxSize. Closes #14696. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72586 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/common/sizer.cpp | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/src/common/sizer.cpp b/src/common/sizer.cpp index 88c971ab58..bcc5bad25b 100644 --- a/src/common/sizer.cpp +++ b/src/common/sizer.cpp @@ -209,18 +209,28 @@ void wxSizerItem::DoSetSpacer(const wxSize& size) wxSize wxSizerItem::AddBorderToSize(const wxSize& size) const { - if (size == wxDefaultSize) - return size; - wxSize result = size; - if (m_flag & wxWEST) - result.x += m_border; - if (m_flag & wxEAST) - result.x += m_border; - if (m_flag & wxNORTH) - result.y += m_border; - if (m_flag & wxSOUTH) - result.y += m_border; + + // Notice that we shouldn't modify the unspecified component(s) of the + // size, it's perfectly valid to have either min or max size specified in + // one direction only and it shouldn't be applied in the other one then. + + if ( result.x != wxDefaultCoord ) + { + if (m_flag & wxWEST) + result.x += m_border; + if (m_flag & wxEAST) + result.x += m_border; + } + + if ( result.y != wxDefaultCoord ) + { + if (m_flag & wxNORTH) + result.y += m_border; + if (m_flag & wxSOUTH) + result.y += m_border; + } + return result; } -- 2.45.2