X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/dc429f89a68f4e45c11dd8638d10a270b2d82505..fcf77487edae715c75f0f802a96e203d88dd56c6:/src/generic/scrlwing.cpp diff --git a/src/generic/scrlwing.cpp b/src/generic/scrlwing.cpp index b36eace80e..f65fb4b487 100644 --- a/src/generic/scrlwing.cpp +++ b/src/generic/scrlwing.cpp @@ -340,9 +340,15 @@ void wxScrollHelper::SetScrollbars(int pixelsPerUnitX, 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 ); - AdjustScrollbars(); + // 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()); @@ -867,17 +873,19 @@ void wxScrollHelper::DoCalcUnscrolledPosition(int x, int y, int *xx, int *yy) co // Default OnSize resets scrollbars, if any void wxScrollHelper::HandleOnSize(wxSizeEvent& WXUNUSED(event)) { - if ( m_targetWindow != m_win ) - m_targetWindow->SetVirtualSize( m_targetWindow->GetClientSize() ); - - m_win->SetVirtualSize( m_win->GetClientSize() ); + if( m_win->GetAutoLayout() ) + { + if ( m_targetWindow != m_win ) + m_targetWindow->FitInside(); - AdjustScrollbars(); + 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 @@ -1092,26 +1100,34 @@ void wxScrollHelper::HandleOnMouseWheel(wxMouseEvent& event) 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); + } } } @@ -1163,6 +1179,17 @@ bool wxGenericScrolledWindow::Layout() return wxPanel::Layout(); } +void wxGenericScrolledWindow::DoSetVirtualSize(int x, int y) +{ + wxPanel::DoSetVirtualSize( x, y ); + AdjustScrollbars(); + +#if wxUSE_CONSTRAINTS + if (GetAutoLayout()) + Layout(); +#endif +} + void wxGenericScrolledWindow::OnPaint(wxPaintEvent& event) { // the user code didn't really draw the window if we got here, so set this