Override OnSize in the scrollsub sample to disable

sizer and scrollarea interferance.
  Made some code in wxScrolledWindow slightly clearer
    and removed a hack for something that shouldn't
    happen any more.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@32688 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling 2005-03-08 22:37:46 +00:00
parent 40e32bca6c
commit c376d80f40
4 changed files with 34 additions and 38 deletions

View File

@ -40,7 +40,7 @@ public:
MyScrolledWindow( wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size ); MyScrolledWindow( wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size );
~MyScrolledWindow(){}; ~MyScrolledWindow(){};
void OnPaint( wxPaintEvent &event ); void OnPaint( wxPaintEvent &event );
void OnSize( wxSizeEvent &event );
private: private:
MyCanvas *m_canvas; MyCanvas *m_canvas;
@ -141,7 +141,8 @@ IMPLEMENT_APP(MyApp)
IMPLEMENT_DYNAMIC_CLASS(MyScrolledWindow, wxScrolledWindow) IMPLEMENT_DYNAMIC_CLASS(MyScrolledWindow, wxScrolledWindow)
BEGIN_EVENT_TABLE(MyScrolledWindow, wxScrolledWindow) BEGIN_EVENT_TABLE(MyScrolledWindow, wxScrolledWindow)
EVT_PAINT( MyScrolledWindow::OnPaint) EVT_PAINT( MyScrolledWindow::OnPaint)
EVT_SIZE( MyScrolledWindow::OnSize)
END_EVENT_TABLE() END_EVENT_TABLE()
MyScrolledWindow::MyScrolledWindow( wxWindow *parent, wxWindowID id, MyScrolledWindow::MyScrolledWindow( wxWindow *parent, wxWindowID id,
@ -177,6 +178,20 @@ MyScrolledWindow::MyScrolledWindow( wxWindow *parent, wxWindowID id,
SetSizer( mainsizer ); SetSizer( mainsizer );
} }
void MyScrolledWindow::OnSize( wxSizeEvent &WXUNUSED(event) )
{
// We need to override OnSize so that our scrolled
// window a) does call Layout() to use sizers for
// positioning the controls but b) does not query
// the sizer for their size and use that for setting
// the scrollable area as set that ourselves by
// calling SetScrollbar() further down.
Layout();
AdjustScrollbars();
}
void MyScrolledWindow::OnPaint( wxPaintEvent &WXUNUSED(event) ) void MyScrolledWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
{ {
wxPaintDC dc( this ); wxPaintDC dc( this );

View File

@ -963,22 +963,17 @@ void wxScrollHelper::DoCalcUnscrolledPosition(int x, int y, int *xx, int *yy) co
// Default OnSize resets scrollbars, if any // Default OnSize resets scrollbars, if any
void wxScrollHelper::HandleOnSize(wxSizeEvent& WXUNUSED(event)) void wxScrollHelper::HandleOnSize(wxSizeEvent& WXUNUSED(event))
{ {
if( m_win->GetAutoLayout() || m_targetWindow->GetAutoLayout() ) if ( m_targetWindow->GetAutoLayout() )
{ {
if ( m_targetWindow != m_win ) wxSize size = m_targetWindow->GetBestVirtualSize();
m_targetWindow->FitInside();
// This will call ::Layout() and ::AdjustScrollbars()
m_win->FitInside(); SetVirtualSize( size );
// FIXME: Something is really weird here... This should be
// called by FitInside above (and apparently is), yet the
// scrollsub sample will get the scrollbar wrong if resized
// quickly. This masks the bug, but is surely not the right
// answer at all.
AdjustScrollbars();
} }
else else
{
AdjustScrollbars(); AdjustScrollbars();
}
} }
// This calls OnDraw, having adjusted the origin according to the current // This calls OnDraw, having adjusted the origin according to the current

View File

@ -852,19 +852,12 @@ bool wxScrolledWindow::Layout()
// Default OnSize resets scrollbars, if any // Default OnSize resets scrollbars, if any
void wxScrolledWindow::OnSize(wxSizeEvent& WXUNUSED(event)) void wxScrolledWindow::OnSize(wxSizeEvent& WXUNUSED(event))
{ {
if( GetAutoLayout() || m_targetWindow->GetAutoLayout() ) if ( m_targetWindow->GetAutoLayout() )
{ {
if( m_targetWindow != this ) wxSize size = m_targetWindow->GetBestVirtualSize();
m_targetWindow->FitInside();
// This will call ::Layout() and ::AdjustScrollbars()
FitInside(); SetVirtualSize( size );
// FIXME: Something is really weird here... This should be
// called by FitInside above (and apparently is), yet the
// scrollsub sample will get the scrollbar wrong if resized
// quickly. This masks the bug, but is surely not the right
// answer at all.
AdjustScrollbars();
} }
else else
{ {

View File

@ -852,19 +852,12 @@ bool wxScrolledWindow::Layout()
// Default OnSize resets scrollbars, if any // Default OnSize resets scrollbars, if any
void wxScrolledWindow::OnSize(wxSizeEvent& WXUNUSED(event)) void wxScrolledWindow::OnSize(wxSizeEvent& WXUNUSED(event))
{ {
if( GetAutoLayout() || m_targetWindow->GetAutoLayout() ) if ( m_targetWindow->GetAutoLayout() )
{ {
if( m_targetWindow != this ) wxSize size = m_targetWindow->GetBestVirtualSize();
m_targetWindow->FitInside();
// This will call ::Layout() and ::AdjustScrollbars()
FitInside(); SetVirtualSize( size );
// FIXME: Something is really weird here... This should be
// called by FitInside above (and apparently is), yet the
// scrollsub sample will get the scrollbar wrong if resized
// quickly. This masks the bug, but is surely not the right
// answer at all.
AdjustScrollbars();
} }
else else
{ {