diff --git a/src/common/stattextcmn.cpp b/src/common/stattextcmn.cpp index 203e1f7a51..811aceb190 100644 --- a/src/common/stattextcmn.cpp +++ b/src/common/stattextcmn.cpp @@ -205,13 +205,22 @@ void wxStaticTextBase::Wrap(int width) void wxStaticTextBase::AutoResizeIfNecessary() { - // adjust the size of the window to fit to the label unless autoresizing is - // disabled - if ( !HasFlag(wxST_NO_AUTORESIZE) ) - { - DoSetSize(wxDefaultCoord, wxDefaultCoord, wxDefaultCoord, wxDefaultCoord, - wxSIZE_AUTO_WIDTH | wxSIZE_AUTO_HEIGHT); - } + // This flag is specifically used to prevent the control from resizing even + // when its label changes. + if ( HasFlag(wxST_NO_AUTORESIZE) ) + return; + + // This method is only called if either the label or the font changed, i.e. + // if the label extent changed, so the best size is not the same neither + // any more. + // + // Note that we don't invalidate it when wxST_NO_AUTORESIZE is on because + // this would result in the control being effectively resized during the + // next Layout() and this style is used expressly to prevent this from + // happening. + InvalidateBestSize(); + + SetSize(GetBestSize()); } // ---------------------------------------------------------------------------- diff --git a/src/generic/stattextg.cpp b/src/generic/stattextg.cpp index a8b4b5c150..fa1db47c4a 100644 --- a/src/generic/stattextg.cpp +++ b/src/generic/stattextg.cpp @@ -102,10 +102,7 @@ void wxGenericStaticText::SetLabel(const wxString& label) wxControl::SetLabel(label); DoSetLabel(GetEllipsizedLabel()); - InvalidateBestSize(); - - if ( !IsEllipsized() ) - AutoResizeIfNecessary(); + AutoResizeIfNecessary(); #if wxUSE_MARKUP if ( m_markupText ) diff --git a/src/gtk/stattext.cpp b/src/gtk/stattext.cpp index 9c1031f9fb..78e154c006 100644 --- a/src/gtk/stattext.cpp +++ b/src/gtk/stattext.cpp @@ -138,14 +138,9 @@ void wxStaticText::GTKDoSetLabel(GTKLabelSetter setter, const wxString& label) { wxCHECK_RET( m_widget != NULL, wxT("invalid static text") ); - InvalidateBestSize(); - (this->*setter)(GTK_LABEL(m_widget), label); - // adjust the label size to the new label unless disabled - if ( !HasFlag(wxST_NO_AUTORESIZE) && - !IsEllipsized() ) // if ellipsization is ON, then we don't want to get resized! - SetSize( GetBestSize() ); + AutoResizeIfNecessary(); } void wxStaticText::SetLabel(const wxString& label) @@ -180,7 +175,8 @@ bool wxStaticText::SetFont( const wxFont &font ) const bool wasUnderlined = GetFont().GetUnderlined(); const bool wasStrickenThrough = GetFont().GetStrikethrough(); - bool ret = wxControl::SetFont(font); + if ( !wxControl::SetFont(font) ) + return false; const bool isUnderlined = GetFont().GetUnderlined(); const bool isStrickenThrough = GetFont().GetStrikethrough(); @@ -222,12 +218,9 @@ bool wxStaticText::SetFont( const wxFont &font ) gtk_label_set_use_underline(GTK_LABEL(m_widget), !isUnderlined); } - // adjust the label size to the new label unless disabled - if (!HasFlag(wxST_NO_AUTORESIZE)) - { - SetSize( GetBestSize() ); - } - return ret; + AutoResizeIfNecessary(); + + return true; } wxSize wxStaticText::DoGetBestSize() const diff --git a/src/msw/stattext.cpp b/src/msw/stattext.cpp index 97b28d06e8..f5a29f380e 100644 --- a/src/msw/stattext.cpp +++ b/src/msw/stattext.cpp @@ -184,12 +184,7 @@ void wxStaticText::SetLabel(const wxString& label) #endif // SS_ENDELLIPSIS DoSetLabel(GetEllipsizedLabel()); - InvalidateBestSize(); - - if ( !IsEllipsized() ) // if ellipsize is ON, then we don't want to get resized! - { - AutoResizeIfNecessary(); - } + AutoResizeIfNecessary(); } bool wxStaticText::SetFont(const wxFont& font) diff --git a/src/osx/stattext_osx.cpp b/src/osx/stattext_osx.cpp index 4176add134..53e0e0ced9 100644 --- a/src/osx/stattext_osx.cpp +++ b/src/osx/stattext_osx.cpp @@ -78,13 +78,7 @@ void wxStaticText::SetLabel(const wxString& label) DoSetLabel(GetEllipsizedLabel()); } - InvalidateBestSize(); - - if ( !(GetWindowStyle() & wxST_NO_AUTORESIZE) && - !IsEllipsized() ) // don't resize if we adjust to current size - { - SetSize( GetBestSize() ); - } + AutoResizeIfNecessary(); Refresh(); @@ -98,11 +92,7 @@ bool wxStaticText::SetFont(const wxFont& font) if ( ret ) { - if ( !(GetWindowStyle() & wxST_NO_AUTORESIZE) ) - { - InvalidateBestSize(); - SetSize( GetBestSize() ); - } + AutoResizeIfNecessary(); } return ret;