X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4f0eda0e6ee3c289a932ef5fd224ea1d67bb086a..8a16d7370e3cdc7d583a6f14ab11b3a1d27b73df:/src/generic/scrlwing.cpp diff --git a/src/generic/scrlwing.cpp b/src/generic/scrlwing.cpp index ad1b381399..be46007774 100644 --- a/src/generic/scrlwing.cpp +++ b/src/generic/scrlwing.cpp @@ -311,6 +311,8 @@ wxScrollHelper::wxScrollHelper(wxWindow *win) m_handler = NULL; m_win = win; + + m_win->SetScrollHelper( this ); // by default, the associated window is also the target window DoSetTargetWindow(win); @@ -813,8 +815,17 @@ void wxScrollHelper::AdjustScrollbars() void wxScrollHelper::DoPrepareDC(wxDC& dc) { wxPoint pt = dc.GetDeviceOrigin(); - dc.SetDeviceOrigin( pt.x - m_xScrollPosition * m_xScrollPixelsPerLine, - pt.y - m_yScrollPosition * m_yScrollPixelsPerLine ); +#ifdef __WXGTK__ + // It may actually be correct to always query + // the m_sign from the DC here, but I leve the + // #ifdef GTK for now. + if (m_win->GetLayoutDirection() == wxLayout_RightToLeft) + dc.SetDeviceOrigin( pt.x + m_xScrollPosition * m_xScrollPixelsPerLine, + pt.y - m_yScrollPosition * m_yScrollPixelsPerLine ); + else +#endif + dc.SetDeviceOrigin( pt.x - m_xScrollPosition * m_xScrollPixelsPerLine, + pt.y - m_yScrollPosition * m_yScrollPixelsPerLine ); dc.SetUserScale( m_scaleX, m_scaleY ); } @@ -844,6 +855,15 @@ void wxScrollHelper::GetScrollPixelsPerUnit (int *x_unit, int *y_unit) const *y_unit = m_yScrollPixelsPerLine; } + +int wxScrollHelper::GetScrollLines( int orient ) const +{ + if ( orient == wxHORIZONTAL ) + return m_xScrollLines; + else + return m_yScrollLines; +} + int wxScrollHelper::GetScrollPageSize(int orient) const { if ( orient == wxHORIZONTAL ) @@ -881,7 +901,7 @@ void wxScrollHelper::Scroll( int x_pos, int y_pos ) // Calculate page size i.e. number of scroll units you get on the // current client window - int noPagePositions = (int) ( (w/(double)m_xScrollPixelsPerLine) + 0.5 ); + int noPagePositions = w/m_xScrollPixelsPerLine; if (noPagePositions < 1) noPagePositions = 1; // Correct position if greater than extent of canvas minus @@ -889,7 +909,8 @@ void wxScrollHelper::Scroll( int x_pos, int y_pos ) m_xScrollPosition = wxMin( m_xScrollLines-noPagePositions, m_xScrollPosition ); m_xScrollPosition = wxMax( 0, m_xScrollPosition ); - if (old_x != m_xScrollPosition) { + if (old_x != m_xScrollPosition) + { m_win->SetScrollPos( wxHORIZONTAL, m_xScrollPosition ); m_targetWindow->ScrollWindow( (old_x-m_xScrollPosition)*m_xScrollPixelsPerLine, 0, GetScrollRect() ); @@ -902,7 +923,7 @@ void wxScrollHelper::Scroll( int x_pos, int y_pos ) // Calculate page size i.e. number of scroll units you get on the // current client window - int noPagePositions = (int) ( (h/(double)m_yScrollPixelsPerLine) + 0.5 ); + int noPagePositions = h/m_yScrollPixelsPerLine; if (noPagePositions < 1) noPagePositions = 1; // Correct position if greater than extent of canvas minus @@ -910,7 +931,8 @@ void wxScrollHelper::Scroll( int x_pos, int y_pos ) m_yScrollPosition = wxMin( m_yScrollLines-noPagePositions, m_yScrollPosition ); m_yScrollPosition = wxMax( 0, m_yScrollPosition ); - if (old_y != m_yScrollPosition) { + if (old_y != m_yScrollPosition) + { m_win->SetScrollPos( wxVERTICAL, m_yScrollPosition ); m_targetWindow->ScrollWindow( 0, (old_y-m_yScrollPosition)*m_yScrollPixelsPerLine, GetScrollRect() ); @@ -936,33 +958,7 @@ void wxScrollHelper::GetViewStart (int *x, int *y) const void wxScrollHelper::DoCalcScrolledPosition(int x, int y, int *xx, int *yy) const { if ( xx ) - { - if ((m_xScrollLines == 0) || (m_xScrollPixelsPerLine == 0)) - { - // nothing to do - *xx = x; - } - else - { -#ifdef __WXGTK__ - if (m_win->GetLayoutDirection() == wxLayout_RightToLeft) - { - int w = 0, h = 0; - GetTargetSize(&w, &h); - - // Calculate page size i.e. number of scroll units you get on the - // current client window - int noPagePositions = w/m_xScrollPixelsPerLine; - if (noPagePositions < 1) noPagePositions = 1; - *xx = x - ((m_xScrollLines - noPagePositions - m_xScrollPosition) * m_xScrollPixelsPerLine); - } - else -#endif - { - *xx = x - m_xScrollPosition * m_xScrollPixelsPerLine; - } - } - } + *xx = x - m_xScrollPosition * m_xScrollPixelsPerLine; if ( yy ) *yy = y - m_yScrollPosition * m_yScrollPixelsPerLine; } @@ -970,33 +966,7 @@ void wxScrollHelper::DoCalcScrolledPosition(int x, int y, int *xx, int *yy) cons void wxScrollHelper::DoCalcUnscrolledPosition(int x, int y, int *xx, int *yy) const { if ( xx ) - { - if ((m_xScrollLines == 0) || (m_xScrollPixelsPerLine == 0)) - { - // nothing to do - *xx = x; - } - else - { -#ifdef __WXGTK__ - if (m_win->GetLayoutDirection() == wxLayout_RightToLeft) - { - int w = 0, h = 0; - GetTargetSize(&w, &h); - - // Calculate page size i.e. number of scroll units you get on the - // current client window - int noPagePositions = w/m_xScrollPixelsPerLine; - if (noPagePositions < 1) noPagePositions = 1; - *xx = x + ((m_xScrollLines - noPagePositions - m_xScrollPosition) * m_xScrollPixelsPerLine); - } - else -#endif - { - *xx = x + m_xScrollPosition * m_xScrollPixelsPerLine; - } - } - } + *xx = x + m_xScrollPosition * m_xScrollPixelsPerLine; if ( yy ) *yy = y + m_yScrollPosition * m_yScrollPixelsPerLine; }