]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/scrlwing.cpp
The Great wxRegion Refactoring:
[wxWidgets.git] / src / generic / scrlwing.cpp
index ad1b3813991b1eb3b57938510db1395a662b95f4..be460077749407c266978a12f696b4c9c2dfa2f6 100644 (file)
@@ -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;
 }