m_xScrollPosition = xPos;
m_yScrollPosition = yPos;
+ // For better backward compatibility we set persisting limits
+ // here not just the size. It makes SetScrollbars 'sticky'
+ // emulating the old non-autoscroll behaviour.
+
m_targetWindow->SetVirtualSizeHints( noUnitsX * pixelsPerUnitX, noUnitsY * pixelsPerUnitY );
+ // The above should arguably be deprecated, this however we still need.
+
+ m_targetWindow->SetVirtualSize( noUnitsX * pixelsPerUnitX, noUnitsY * pixelsPerUnitY );
+
if (do_refresh && !noRefresh)
m_targetWindow->Refresh(TRUE, GetRect());
// Default OnSize resets scrollbars, if any
void wxScrollHelper::HandleOnSize(wxSizeEvent& WXUNUSED(event))
{
- if( m_targetWindow != m_win )
- m_targetWindow->SetVirtualSize( m_targetWindow->GetClientSize() );
+ if( m_win->GetAutoLayout() )
+ {
+ if ( m_targetWindow != m_win )
+ m_targetWindow->FitInside();
- m_win->SetVirtualSize( m_win->GetClientSize() );
+ m_win->FitInside();
#if wxUSE_CONSTRAINTS
- if (m_win->GetAutoLayout())
m_win->Layout();
#endif
+ }
+ else
+ AdjustScrollbars();
}
// This calls OnDraw, having adjusted the origin according to the current
if (lines != 0)
{
- lines *= event.GetLinesPerAction();
wxScrollWinEvent newEvent;
newEvent.SetPosition(0);
newEvent.SetOrientation(wxVERTICAL);
newEvent.m_eventObject = m_win;
- if (lines > 0)
- newEvent.m_eventType = wxEVT_SCROLLWIN_LINEUP;
- else
- newEvent.m_eventType = wxEVT_SCROLLWIN_LINEDOWN;
- int times = abs(lines);
- for (; times > 0; times --)
+ if (event.IsPageScroll())
+ {
+ if (lines > 0)
+ newEvent.m_eventType = wxEVT_SCROLLWIN_PAGEUP;
+ else
+ newEvent.m_eventType = wxEVT_SCROLLWIN_PAGEDOWN;
+
m_win->GetEventHandler()->ProcessEvent(newEvent);
+ }
+ else
+ {
+ lines *= event.GetLinesPerAction();
+ if (lines > 0)
+ newEvent.m_eventType = wxEVT_SCROLLWIN_LINEUP;
+ else
+ newEvent.m_eventType = wxEVT_SCROLLWIN_LINEDOWN;
- /* Old Way */
- // int vsx, vsy;
- // GetViewStart(&vsx, &vsy);
- // Scroll(-1, vsy - lines);
+ int times = abs(lines);
+ for (; times > 0; times--)
+ m_win->GetEventHandler()->ProcessEvent(newEvent);
+ }
}
}
return wxPanel::Layout();
}
-void wxGenericScrolledWindow::DoSetVirtualSize( int x, int y )
+void wxGenericScrolledWindow::DoSetVirtualSize(int x, int y)
{
wxPanel::DoSetVirtualSize( x, y );
AdjustScrollbars();
+
+#if wxUSE_CONSTRAINTS
+ if (GetAutoLayout())
+ Layout();
+#endif
}
void wxGenericScrolledWindow::OnPaint(wxPaintEvent& event)