X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6115b1b5d90ffac0ead7082fb8106f44d45783e6..b2238cc3156f4e15e567d2218c88301bc2af9adb:/src/common/sizer.cpp diff --git a/src/common/sizer.cpp b/src/common/sizer.cpp index af8275b478..c5efdf4e36 100644 --- a/src/common/sizer.cpp +++ b/src/common/sizer.cpp @@ -480,10 +480,21 @@ void wxSizerItem::SetDimension( const wxPoint& pos_, const wxSize& size_ ) break; case Item_Window: + { + // Use wxSIZE_FORCE_EVENT here since a sizer item might + // have changed alignment or some other property which would + // not change the size of the window. In such a case, no + // wxSizeEvent would normally be generated and thus the + // control wouldn't get layed out correctly here. +#if 1 + m_window->SetSize(pos.x, pos.y, size.x, size.y, + wxSIZE_ALLOW_MINUS_ONE|wxSIZE_FORCE_EVENT ); +#else m_window->SetSize(pos.x, pos.y, size.x, size.y, - wxSIZE_ALLOW_MINUS_ONE); + wxSIZE_ALLOW_MINUS_ONE ); +#endif break; - + } case Item_Sizer: m_sizer->SetDimension(pos, size); break; @@ -1328,9 +1339,12 @@ int wxGridSizer::CalcRowsCols(int& nrows, int& ncols) const if ( m_cols && m_rows ) { // if both rows and columns are specified by user, use the provided - // values even if we don't have enough items + // values even if we don't have enough items but check that we don't + // have too many of them as this is going to result in problems later ncols = m_cols; nrows = m_rows; + + wxASSERT_MSG( ncols*nrows >= nitems, "too many items in grid sizer" ); } else if ( m_cols ) { @@ -1984,7 +1998,7 @@ void wxBoxSizer::RecalcSizes() } // NB: wxCENTRE is used here only for backwards compatibility, // wxALIGN_CENTRE should be used in new code - else if ( flag & (wxCENTER | wxALIGN_CENTRE) ) + else if ( flag & (wxCENTER | (IsVertical() ? wxALIGN_CENTRE_HORIZONTAL : wxALIGN_CENTRE_VERTICAL))) { PosInMinorDir(posChild) += (totalMinorSize - minorSize) / 2; }