// wxTopLevelWindow geometry
// ----------------------------------------------------------------------------
+void wxTopLevelWindowBase::SetMinSize(const wxSize& minSize)
+{
+ SetSizeHints( minSize.x, minSize.y, GetMaxWidth(), GetMaxHeight() );
+}
+
+void wxTopLevelWindowBase::SetMaxSize(const wxSize& maxSize)
+{
+ SetSizeHints( GetMinWidth(), GetMinHeight(), maxSize.x, maxSize.y );
+}
+
+// set the min/max size of the window
+void wxTopLevelWindowBase::DoSetSizeHints(int minW, int minH,
+ int maxW, int maxH,
+ int WXUNUSED(incW), int WXUNUSED(incH))
+{
+ // setting min width greater than max width leads to infinite loops under
+ // X11 and generally doesn't make any sense, so don't allow it
+ wxCHECK_RET( (minW == wxDefaultCoord || maxW == wxDefaultCoord || minW <= maxW) &&
+ (minH == wxDefaultCoord || maxH == wxDefaultCoord || minH <= maxH),
+ _T("min width/height must be less than max width/height!") );
+
+ m_minWidth = minW;
+ m_maxWidth = maxW;
+ m_minHeight = minH;
+ m_maxHeight = maxH;
+}
+
void wxTopLevelWindowBase::GetRectForTopLevelChildren(int *x, int *y, int *w, int *h)
{
GetPosition(x,y);
wxSize wxTopLevelWindowBase::GetMaxSize() const
{
- wxSize size( GetMaxWidth(), GetMaxHeight() );
- int w, h;
+ wxSize size = wxWindow::GetMaxSize();
- wxClientDisplayRect( 0, 0, &w, &h );
+ int w, h;
+ wxClientDisplayRect(NULL, NULL, &w, &h );
- if( size.GetWidth() == wxDefaultCoord )
- size.SetWidth( w );
+ if ( size.GetWidth() == wxDefaultCoord )
+ size.SetWidth(w);
- if( size.GetHeight() == wxDefaultCoord )
- size.SetHeight( h );
+ if ( size.GetHeight() == wxDefaultCoord )
+ size.SetHeight(h);
return size;
}
// parent frame under Mac but could happen elsewhere too if the frame
// was hidden/moved away for some reason), don't use it as otherwise
// this window wouldn't be visible at all
- if ( !rectDisplay.Inside(rectParent.GetTopLeft()) &&
- !rectParent.Inside(rectParent.GetBottomRight()) )
+ if ( !rectDisplay.Contains(rectParent.GetTopLeft()) &&
+ !rectParent.Contains(rectParent.GetBottomRight()) )
{
// this is enough to make IsEmpty() test below pass
rectParent.width = 0;
// we don't want to place the window off screen if Centre() is called as
// this is (almost?) never wanted and it would be very difficult to prevent
// it from happening from the user code if we didn't check for it here
- if ( rectDisplay.Inside(rect.GetTopLeft()) )
+ if ( rectDisplay.Contains(rect.GetTopLeft()) )
{
- if ( !rectDisplay.Inside(rect.GetBottomRight()) )
+ if ( !rectDisplay.Contains(rect.GetBottomRight()) )
{
// check if we can move the window so that the bottom right corner
// is visible without hiding the top left one
// for whatever reasons, wxGTK wants to have a small offset - it
// probably looks better with it?
#ifdef __WXGTK__
- static const int ofs = 1;
+ const int ofs = 1;
+ clientW -= 2 * ofs;
+ clientH -= 2 * ofs;
+ if (clientW < 0)
+ clientW = 0;
+ if (clientH < 0)
+ clientH = 0;
#else
- static const int ofs = 0;
+ const int ofs = 0;
#endif
- child->SetSize(ofs, ofs, clientW - 2*ofs, clientH - 2*ofs);
+ child->SetSize(ofs, ofs, clientW, clientH);
}
}
}