Modified wxSizer to use it instead of crushing all windows to
the display size.
Currently only top level windows are limited to display size,
all other windows are unlimited (inside the clipping region of
their tlw).
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14511
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
// override some base class virtuals
virtual bool Destroy();
virtual bool IsTopLevel() const { return TRUE; }
// override some base class virtuals
virtual bool Destroy();
virtual bool IsTopLevel() const { return TRUE; }
+ virtual wxSize GetMaxSize() const;
// event handlers
void OnCloseWindow(wxCloseEvent& event);
// event handlers
void OnCloseWindow(wxCloseEvent& event);
#endif // _WX_TOPLEVEL_BASE_H_
#endif // _WX_TOPLEVEL_BASE_H_
int GetMaxWidth() const { return m_maxWidth; }
int GetMaxHeight() const { return m_maxHeight; }
int GetMaxWidth() const { return m_maxWidth; }
int GetMaxHeight() const { return m_maxHeight; }
+ // Override this method to control the values given to Sizers etc.
+ virtual wxSize GetMaxSize() const { return wxSize( m_maxWidth, m_maxHeight ); }
+
// window state
// ------------
// window state
// ------------
#endif
// _WX_WINDOW_H_BASE_
#endif
// _WX_WINDOW_H_BASE_
void wxSizer::SetSizeHints( wxWindow *window )
{
void wxSizer::SetSizeHints( wxWindow *window )
{
+ // Preserve the window's max size hints, but set the
+ // lower bound according to the sizer calculations.
+
wxSize size = FitSize( window );
wxSize size = FitSize( window );
- window->SetSizeHints( size.x, size.y );
+ window->SetSizeHints( size.x,
+ size.y,
+ window->GetMaxWidth(),
+ window->GetMaxHeight() );
-wxSize wxSizer::GetMaxWindowSize( wxWindow *WXUNUSED(window) )
+wxSize wxSizer::GetMaxWindowSize( wxWindow *window )
- wxRect rect = wxGetClientDisplayRect();
- wxSize sizeMax (rect.width,rect.height);
-
- // Sorry, but this bit is wrong -- it makes a window that should just be
- // able to fit onto the screen, not fit on the screen. -- JACS
-#if 0
- // Make the max size a bit smaller than the visible portion of
- // the screen. A window which takes the entire screen doesn't
- // look very nice either
- sizeMax.x *= 9;
- sizeMax.x /= 10;
-
- sizeMax.y *= 9;
- sizeMax.y /= 10;
-#endif
-
- return sizeMax;
+ return window->GetMaxSize();
}
wxSize wxSizer::GetMinWindowSize( wxWindow *window )
}
wxSize wxSizer::GetMinWindowSize( wxWindow *window )
wxSize size = GetMinWindowSize( window );
wxSize sizeMax = GetMaxWindowSize( window );
wxSize size = GetMinWindowSize( window );
wxSize sizeMax = GetMaxWindowSize( window );
- if ( size.x > sizeMax.x )
+ // Limit the size if sizeMax != wxDefaultSize
+
+ if ( size.x > sizeMax.x && sizeMax.x != -1 )
- if ( size.y > sizeMax.y )
+ if ( size.y > sizeMax.y && sizeMax.y != -1 )
size.y = sizeMax.y;
return size;
size.y = sizeMax.y;
return size;
}
#endif // wxUSE_NOTEBOOK
}
#endif // wxUSE_NOTEBOOK
+wxSize wxTopLevelWindowBase::GetMaxSize() const
+{
+ wxSize size( GetMaxWidth(), GetMaxHeight() );
+ int w, h;
+
+ wxClientDisplayRect( 0, 0, &w, &h );
+
+ if( size.GetWidth() == -1 )
+ size.SetWidth( w );
+
+ if( size.GetHeight() == -1 )
+ size.SetHeight( h );
+
+ return size;
+}
+
// ----------------------------------------------------------------------------
// wxTopLevelWindow size management: we exclude the areas taken by
// menu/status/toolbars from the client area, so the client area is what's
// ----------------------------------------------------------------------------
// wxTopLevelWindow size management: we exclude the areas taken by
// menu/status/toolbars from the client area, so the client area is what's
return GetEventHandler()->ProcessEvent(event);
}
return GetEventHandler()->ProcessEvent(event);
}