Fold best size and ellipsis handling in AutoResizeIfNecessary()
Refactor wxStaticText code to use AutoResizeIfNecessary() for all the updates done after the label extent changes (whether it's due to the change of the label itself or the font used for rendering it). There should be no changes in behaviour after this commit except for a small bug fix in wxGenericStaticText when setting label with markup: this didn't invalidate the best size before, but does now.
This commit is contained in:
@@ -205,13 +205,20 @@ 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 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.
|
||||
InvalidateBestSize();
|
||||
|
||||
if ( IsEllipsized() ) // if ellipsize is ON, then we don't want to get resized!
|
||||
return;
|
||||
|
||||
// This flag is specifically used to prevent the control from resizing even
|
||||
// when its label changes.
|
||||
if ( HasFlag(wxST_NO_AUTORESIZE) )
|
||||
return;
|
||||
|
||||
SetSize(GetBestSize());
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
@@ -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 )
|
||||
|
@@ -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)
|
||||
@@ -222,11 +217,8 @@ 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() );
|
||||
}
|
||||
AutoResizeIfNecessary();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@@ -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)
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user