]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/scrolwin.cpp
ping method almost there
[wxWidgets.git] / src / generic / scrolwin.cpp
index de7ed95ef1b826883082036d12e1723ce626f94d..5dccb848c1694cd44b1f37883cd39f8368c9cb94 100644 (file)
 #endif
 
 #include "wx/generic/scrolwin.h"
+#include "wx/panel.h"
 
 #if !USE_SHARED_LIBRARY
-BEGIN_EVENT_TABLE(wxScrolledWindow, wxWindow)
+BEGIN_EVENT_TABLE(wxScrolledWindow, wxPanel)
     EVT_SCROLLWIN(wxScrolledWindow::OnScroll)
     EVT_SIZE(wxScrolledWindow::OnSize)
     EVT_PAINT(wxScrolledWindow::OnPaint)
 END_EVENT_TABLE()
 
-IMPLEMENT_DYNAMIC_CLASS(wxScrolledWindow, wxWindow)
+IMPLEMENT_DYNAMIC_CLASS(wxScrolledWindow, wxPanel)
 #endif
 
 #ifdef __WXMSW__
@@ -80,7 +81,7 @@ bool wxScrolledWindow::Create(wxWindow *parent, wxWindowID id,
     m_scaleX = 1.0;
     m_scaleY = 1.0;
 
-    return wxWindow::Create(parent, id, pos, size, style, name);
+    return wxPanel::Create(parent, id, pos, size, style, name);
 }
 
 /*
@@ -94,9 +95,9 @@ void wxScrolledWindow::SetScrollbars (int pixelsPerUnitX, int pixelsPerUnitY,
     bool do_refresh =
     (
       (noUnitsX != 0 && m_xScrollLines == 0) ||
-      (noUnitsX < m_xScrollPosition) ||
+      (noUnitsX < m_xScrollLines) ||
       (noUnitsY != 0 && m_yScrollLines == 0) ||
-      (noUnitsY < m_yScrollPosition) ||
+      (noUnitsY < m_yScrollLines) ||
       (xPos != m_xScrollPosition) ||
       (yPos != m_yScrollPosition) ||
       (pixelsPerUnitX != m_xScrollPixelsPerLine) ||
@@ -145,7 +146,8 @@ void wxScrolledWindow::SetScrollbars (int pixelsPerUnitX, int pixelsPerUnitY,
       
     AdjustScrollbars();
    
-   if (do_refresh && !noRefresh) Refresh();
+    if (do_refresh && !noRefresh) 
+       Refresh(); 
    
 #ifdef __WXMSW__
    // Necessary?
@@ -388,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
@@ -456,12 +468,11 @@ void wxScrolledWindow::Scroll( int x_pos, int y_pos )
         SetScrollPos( wxVERTICAL, m_yScrollPosition, TRUE );
     }
     
-    // BAD, BAD, can cause event loops if called from OnPaint(). (KB)
-    // Refresh();
     
 #ifdef __WXMSW__
-    // Necessary?
     ::UpdateWindow ((HWND) GetHWND());
+#else
+    Refresh();
 #endif
 }
 
@@ -473,27 +484,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;
 }
-
-