From: Paul Cornett Date: Wed, 4 Feb 2009 08:01:58 +0000 (+0000) Subject: revert last commit, it re-introduces the first problem X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/0295d4483b9095d68f62085cb7455175edc7e743 revert last commit, it re-introduces the first problem git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58642 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/gtk/scrolwin.cpp b/src/gtk/scrolwin.cpp index f36296fe94..c4739a30a6 100644 --- a/src/gtk/scrolwin.cpp +++ b/src/gtk/scrolwin.cpp @@ -41,9 +41,6 @@ void wxScrollHelper::SetScrollbars(int pixelsPerUnitX, int pixelsPerUnitY, int xPos, int yPos, bool noRefresh) { - int old_x = m_xScrollPosition * m_xScrollPixelsPerLine; - int old_y = m_yScrollPosition * m_yScrollPixelsPerLine; - m_xScrollPixelsPerLine = pixelsPerUnitX; m_yScrollPixelsPerLine = pixelsPerUnitY; @@ -52,28 +49,17 @@ void wxScrollHelper::SetScrollbars(int pixelsPerUnitX, int pixelsPerUnitY, m_win->m_scrollBar[wxWindow::ScrollDir_Vert]->adjustment->value = m_yScrollPosition = yPos; - // To get everything right, have to call ScrollWindow() - // both before and after calling SetVirtualSize() - int new_x = m_xScrollPosition * m_xScrollPixelsPerLine; - int new_y = m_yScrollPosition * m_yScrollPixelsPerLine; - if (!noRefresh) - { - m_targetWindow->ScrollWindow(old_x - new_x, old_y - new_y); - old_x = new_x; - old_y = new_y; - } - int w = noUnitsX * pixelsPerUnitX; int h = noUnitsY * pixelsPerUnitY; m_targetWindow->SetVirtualSize( w ? w : wxDefaultCoord, h ? h : wxDefaultCoord); - if (!noRefresh) - { - new_x = m_xScrollPosition * m_xScrollPixelsPerLine; - new_y = m_yScrollPosition * m_yScrollPixelsPerLine; - m_targetWindow->ScrollWindow(old_x - new_x, old_y - new_y); - } + // Query view start after m_targetWindow->SetVirtualSize(...) since + // that call can change the current=old scrolling position! + int xs, ys; + GetViewStart(& xs, & ys); + int old_x = m_xScrollPixelsPerLine * xs; + int old_y = m_yScrollPixelsPerLine * ys; // If the target is not the same as the window with the scrollbars, // then we need to update the scrollbars here, since they won't have @@ -82,6 +68,14 @@ void wxScrollHelper::SetScrollbars(int pixelsPerUnitX, int pixelsPerUnitY, { AdjustScrollbars(); } + + if (!noRefresh) + { + int new_x = m_xScrollPixelsPerLine * m_xScrollPosition; + int new_y = m_yScrollPixelsPerLine * m_yScrollPosition; + + m_targetWindow->ScrollWindow( old_x - new_x, old_y - new_y ); + } } void wxScrollHelper::DoAdjustScrollbar(GtkRange* range,