Include the size of any window borders (size vs. clientsize
differences) in the window's bestsize git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@31730 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -39,6 +39,11 @@ All:
|
|||||||
- wxGetPowerType() and wxGetBatteryState() addition
|
- wxGetPowerType() and wxGetBatteryState() addition
|
||||||
- wxSystemSettings::GetSystem*() members deprecated and replaced with
|
- wxSystemSettings::GetSystem*() members deprecated and replaced with
|
||||||
wxSystemSettings::Get*()
|
wxSystemSettings::Get*()
|
||||||
|
- wxWindowBase::DoGetBestSize now includes the difference (if any) between
|
||||||
|
the client size and total size of the window. Code that sets the
|
||||||
|
client size using the best size, or that added extra space to sizers
|
||||||
|
to compensate for this bug may need to be changed.
|
||||||
|
|
||||||
|
|
||||||
All (GUI):
|
All (GUI):
|
||||||
|
|
||||||
|
@@ -508,7 +508,7 @@ void wxWindowBase::Fit()
|
|||||||
{
|
{
|
||||||
if ( GetChildren().GetCount() > 0 )
|
if ( GetChildren().GetCount() > 0 )
|
||||||
{
|
{
|
||||||
SetClientSize(GetBestSize());
|
SetSize(GetBestSize());
|
||||||
}
|
}
|
||||||
//else: do nothing if we have no children
|
//else: do nothing if we have no children
|
||||||
}
|
}
|
||||||
@@ -553,9 +553,11 @@ void wxWindowBase::InvalidateBestSize()
|
|||||||
// return the size best suited for the current window
|
// return the size best suited for the current window
|
||||||
wxSize wxWindowBase::DoGetBestSize() const
|
wxSize wxWindowBase::DoGetBestSize() const
|
||||||
{
|
{
|
||||||
|
wxSize best;
|
||||||
|
|
||||||
if ( m_windowSizer )
|
if ( m_windowSizer )
|
||||||
{
|
{
|
||||||
return m_windowSizer->GetMinSize();
|
best = m_windowSizer->GetMinSize();
|
||||||
}
|
}
|
||||||
#if wxUSE_CONSTRAINTS
|
#if wxUSE_CONSTRAINTS
|
||||||
else if ( m_constraints )
|
else if ( m_constraints )
|
||||||
@@ -591,7 +593,7 @@ wxSize wxWindowBase::DoGetBestSize() const
|
|||||||
// will never return a size bigger than the current one :-(
|
// will never return a size bigger than the current one :-(
|
||||||
}
|
}
|
||||||
|
|
||||||
return wxSize(maxX, maxY);
|
best = wxSize(maxX, maxY);
|
||||||
}
|
}
|
||||||
#endif // wxUSE_CONSTRAINTS
|
#endif // wxUSE_CONSTRAINTS
|
||||||
else if ( !GetChildren().empty()
|
else if ( !GetChildren().empty()
|
||||||
@@ -643,17 +645,25 @@ wxSize wxWindowBase::DoGetBestSize() const
|
|||||||
maxX += 7;
|
maxX += 7;
|
||||||
maxY += 14;
|
maxY += 14;
|
||||||
|
|
||||||
return wxSize(maxX, maxY);
|
best = wxSize(maxX, maxY);
|
||||||
}
|
}
|
||||||
else // ! has children
|
else // ! has children
|
||||||
{
|
{
|
||||||
// for a generic window there is no natural best size - just use either the
|
// For a generic window there is no natural best size - just use
|
||||||
// minimum size if there is one, or the current size
|
// either the minimum size if there is one, or the current size.
|
||||||
|
// These are returned as-is, unadjusted by the client size difference.
|
||||||
if ( GetMinSize().IsFullySpecified() )
|
if ( GetMinSize().IsFullySpecified() )
|
||||||
return GetMinSize();
|
return GetMinSize();
|
||||||
else
|
else
|
||||||
return GetSize();
|
return GetSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add any difference between size and client size
|
||||||
|
wxSize diff = GetSize() - GetClientSize();
|
||||||
|
best.x += wxMax(0, diff.x);
|
||||||
|
best.y += wxMax(0, diff.y);
|
||||||
|
|
||||||
|
return best;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user