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:
parent
40e32bca6c
commit
c376d80f40
@ -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 );
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
{
|
{
|
||||||
|
@ -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
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user