]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/scrolwin.cpp
fixed compilation error
[wxWidgets.git] / src / generic / scrolwin.cpp
index 033b08913b6bc3d0136937f3a6c43773d86d283f..cc001c2d47a751fb8a39751155e72a9d90e1352e 100644 (file)
@@ -390,12 +390,22 @@ void wxScrolledWindow::GetScrollUnitsPerPage (int *x_page, int *y_page) const
       *x_page = GetScrollPageSize(wxHORIZONTAL);
       *y_page = GetScrollPageSize(wxVERTICAL);
 }
-#endif
+
+void wxScrolledWindow::CalcUnscrolledPosition(int x, int y, float *xx, float *yy) const
+{
+    if ( xx )
+        *xx = (float)(x + m_xScrollPosition * m_xScrollPixelsPerLine);
+    if ( yy )
+        *yy = (float)(y + m_yScrollPosition * m_yScrollPixelsPerLine);
+}
+#endif // WXWIN_COMPATIBILITY
 
 void wxScrolledWindow::GetScrollPixelsPerUnit (int *x_unit, int *y_unit) const
 {
-      *x_unit = m_xScrollPixelsPerLine;
-      *y_unit = m_yScrollPixelsPerLine;
+    if ( x_unit )
+        *x_unit = m_xScrollPixelsPerLine;
+    if ( y_unit )
+        *y_unit = m_yScrollPixelsPerLine;
 }
 
 int wxScrolledWindow::GetScrollPageSize(int orient) const
@@ -427,6 +437,7 @@ void wxScrolledWindow::Scroll( int x_pos, int y_pos )
 
     if (x_pos != -1)
     {
+        int old_x = m_xScrollPosition;
         m_xScrollPosition = x_pos;
     
        // Calculate page size i.e. number of scroll units you get on the
@@ -440,9 +451,12 @@ void wxScrolledWindow::Scroll( int x_pos, int y_pos )
         m_xScrollPosition = wxMax( 0, m_xScrollPosition );
       
         SetScrollPos( wxHORIZONTAL, m_xScrollPosition, TRUE );
+       
+       ScrollWindow( (old_x-m_xScrollPosition)*m_xScrollPixelsPerLine, 0 );
     }
     if (y_pos != -1)
     {
+        int old_y = m_yScrollPosition;
         m_yScrollPosition = y_pos;
        
        // Calculate page size i.e. number of scroll units you get on the
@@ -456,14 +470,15 @@ void wxScrolledWindow::Scroll( int x_pos, int y_pos )
         m_yScrollPosition = wxMax( 0, m_yScrollPosition );
        
         SetScrollPos( wxVERTICAL, m_yScrollPosition, TRUE );
+       
+       ScrollWindow( 0, (old_y-m_yScrollPosition)*m_yScrollPixelsPerLine );
     }
     
-    // BAD, BAD, can cause event loops if called from OnPaint(). KB.
-    // Refresh();
     
 #ifdef __WXMSW__
-    // Necessary?
-    ::UpdateWindow ((HWND) GetHWND());
+//    ::UpdateWindow ((HWND) GetHWND());
+#else
+//    Refresh();
 #endif
 }
 
@@ -475,27 +490,33 @@ void wxScrolledWindow::EnableScrolling (bool x_scroll, bool y_scroll)
 
 void wxScrolledWindow::GetVirtualSize (int *x, int *y) const
 {
-    *x = m_xScrollPixelsPerLine * m_xScrollLines;
-    *y = m_yScrollPixelsPerLine * m_yScrollLines;
+    if ( x )
+        *x = m_xScrollPixelsPerLine * m_xScrollLines;
+    if ( y )
+        *y = m_yScrollPixelsPerLine * m_yScrollLines;
 }
 
 // Where the current view starts from
 void wxScrolledWindow::ViewStart (int *x, int *y) const
 {
-    *x = m_xScrollPosition;
-    *y = m_yScrollPosition;
+    if ( x )
+        *x = m_xScrollPosition;
+    if ( y )
+        *y = m_yScrollPosition;
 }
 
 void wxScrolledWindow::CalcScrolledPosition(int x, int y, int *xx, int *yy) const
 {
-    *xx = x - m_xScrollPosition * m_xScrollPixelsPerLine;
-    *yy = y - m_yScrollPosition * m_yScrollPixelsPerLine;
+    if ( xx )
+        *xx = x - m_xScrollPosition * m_xScrollPixelsPerLine;
+    if ( yy )
+        *yy = y - m_yScrollPosition * m_yScrollPixelsPerLine;
 }
 
-void wxScrolledWindow::CalcUnscrolledPosition(int x, int y, float *xx, float *yy) const
+void wxScrolledWindow::CalcUnscrolledPosition(int x, int y, int *xx, int *yy) const
 {
-    *xx = (float)(x + m_xScrollPosition * m_xScrollPixelsPerLine);
-    *yy = (float)(y + m_yScrollPosition * m_yScrollPixelsPerLine);
+    if ( xx )
+        *xx = x + m_xScrollPosition * m_xScrollPixelsPerLine;
+    if ( yy )
+        *yy = y + m_yScrollPosition * m_yScrollPixelsPerLine;
 }
-
-