]> git.saurik.com Git - wxWidgets.git/blobdiff - src/generic/scrlwing.cpp
post wxUniv merge fixes
[wxWidgets.git] / src / generic / scrlwing.cpp
index 3897dca59f809ee87f6173dab696fe3bc505ac09..e3149ab6018d05fa6e59c58e05b3da888f3fb5b4 100644 (file)
@@ -57,9 +57,7 @@
 #endif
 #endif
 
-#ifndef __WXGTK__
 IMPLEMENT_CLASS(wxScrolledWindow, wxGenericScrolledWindow)
-#endif
 
 // ----------------------------------------------------------------------------
 // wxScrollHelperEvtHandler: intercept the events from the window and forward
@@ -169,6 +167,13 @@ void wxAutoScrollTimer::Notify()
 
 bool wxScrollHelperEvtHandler::ProcessEvent(wxEvent& event)
 {
+    wxEventType evType = event.GetEventType();
+
+    if ( evType == wxEVT_SIZE )
+    {
+        m_scrollHelper->HandleOnSize((wxSizeEvent &)event);
+    }
+
     if ( wxEvtHandler::ProcessEvent(event) )
         return TRUE;
 
@@ -176,8 +181,6 @@ bool wxScrollHelperEvtHandler::ProcessEvent(wxEvent& event)
     // ProcessEvent() above
     event.Skip(FALSE);
 
-    wxEventType evType = event.GetEventType();
-
     if ( evType == wxEVT_PAINT )
     {
         m_scrollHelper->HandleOnPaint((wxPaintEvent &)event);
@@ -211,10 +214,6 @@ bool wxScrollHelperEvtHandler::ProcessEvent(wxEvent& event)
         m_scrollHelper->HandleOnMouseWheel((wxMouseEvent &)event);
     }
 #endif // wxUSE_MOUSEWHEEL
-    else if ( evType == wxEVT_SIZE )
-    {
-        m_scrollHelper->HandleOnSize((wxSizeEvent &)event);
-    }
     else if ( evType == wxEVT_CHAR )
     {
         m_scrollHelper->HandleOnChar((wxKeyEvent &)event);
@@ -321,22 +320,22 @@ void wxScrollHelper::SetScrollbars(int pixelsPerUnitX,
 
         int totalPixelWidth = m_xScrollLines * m_xScrollPixelsPerLine;
         int totalPixelHeight = m_yScrollLines * m_yScrollPixelsPerLine;
-        if (m_targetWindow->m_backingPixmap &&
-           !((m_targetWindow->m_pixmapWidth == totalPixelWidth) &&
-             (m_targetWindow->m_pixmapHeight == totalPixelHeight)))
+        if (m_targetWindow->GetBackingPixmap() &&
+           !((m_targetWindow->GetPixmapWidth() == totalPixelWidth) &&
+             (m_targetWindow->GetPixmapHeight() == totalPixelHeight)))
         {
-            XFreePixmap (dpy, (Pixmap) m_targetWindow->m_backingPixmap);
-            m_targetWindow->m_backingPixmap = (WXPixmap) 0;
+            XFreePixmap (dpy, (Pixmap) m_targetWindow->GetBackingPixmap());
+            m_targetWindow->SetBackingPixmap((WXPixmap) 0);
         }
 
-        if (!m_targetWindow->m_backingPixmap &&
+        if (!m_targetWindow->GetBackingPixmap() &&
            (noUnitsX != 0) && (noUnitsY != 0))
         {
             int depth = wxDisplayDepth();
-            m_pixmapWidth = totalPixelWidth;
-            m_pixmapHeight = totalPixelHeight;
-            m_backingPixmap = (WXPixmap) XCreatePixmap (dpy, RootWindow (dpy, DefaultScreen (dpy)),
-            m_pixmapWidth, m_pixmapHeight, depth);
+            m_targetWindow->SetPixmapWidth(totalPixelWidth);
+            m_targetWindow->SetPixmapHeight(totalPixelHeight);
+            m_targetWindow->SetBackingPixmap((WXPixmap) XCreatePixmap (dpy, RootWindow (dpy, DefaultScreen (dpy)),
+              m_targetWindow->GetPixmapWidth(), m_targetWindow->GetPixmapHeight(), depth));
         }
 
     }
@@ -386,12 +385,12 @@ void wxScrollHelper::HandleOnScroll(wxScrollWinEvent& event)
     if (orient == wxHORIZONTAL)
     {
         m_xScrollPosition += nScrollInc;
-        m_targetWindow->SetScrollPos(wxHORIZONTAL, m_xScrollPosition, FALSE);
+        m_targetWindow->SetScrollPos(wxHORIZONTAL, m_xScrollPosition);
     }
     else
     {
         m_yScrollPosition += nScrollInc;
-        m_targetWindow->SetScrollPos(wxVERTICAL, m_yScrollPosition, FALSE);
+        m_targetWindow->SetScrollPos(wxVERTICAL, m_yScrollPosition);
     }
 
     bool needsRefresh = FALSE;
@@ -679,7 +678,7 @@ void wxScrollHelper::Scroll( int x_pos, int y_pos )
         m_xScrollPosition = wxMax( 0, m_xScrollPosition );
 
         if (old_x != m_xScrollPosition) {
-            m_targetWindow->SetScrollPos( wxHORIZONTAL, m_xScrollPosition, FALSE );
+            m_targetWindow->SetScrollPos( wxHORIZONTAL, m_xScrollPosition );
             m_targetWindow->ScrollWindow( (old_x-m_xScrollPosition)*m_xScrollPixelsPerLine, 0,
                                           GetRect() );
         }
@@ -700,7 +699,7 @@ void wxScrollHelper::Scroll( int x_pos, int y_pos )
         m_yScrollPosition = wxMax( 0, m_yScrollPosition );
 
         if (old_y != m_yScrollPosition) {
-            m_targetWindow->SetScrollPos( wxVERTICAL, m_yScrollPosition, FALSE );
+            m_targetWindow->SetScrollPos( wxVERTICAL, m_yScrollPosition );
             m_targetWindow->ScrollWindow( 0, (old_y-m_yScrollPosition)*m_yScrollPixelsPerLine,
                                           GetRect() );
         }
@@ -811,6 +810,9 @@ void wxScrollHelper::HandleOnChar(wxKeyEvent& event)
         szy = -1;
     }
 
+    int xScrollOld = m_xScrollPosition,
+        yScrollOld = m_yScrollPosition;
+
     int dsty;
     switch ( event.KeyCode() )
     {
@@ -853,6 +855,22 @@ void wxScrollHelper::HandleOnChar(wxKeyEvent& event)
             // not for us
             event.Skip();
     }
+
+    if ( m_xScrollPosition != xScrollOld )
+    {
+        wxScrollWinEvent event(wxEVT_SCROLLWIN_THUMBTRACK, m_xScrollPosition,
+                               wxHORIZONTAL);
+        event.SetEventObject(m_win);
+        m_win->GetEventHandler()->ProcessEvent(event);
+    }
+
+    if ( m_yScrollPosition != yScrollOld )
+    {
+        wxScrollWinEvent event(wxEVT_SCROLLWIN_THUMBTRACK, m_yScrollPosition,
+                               wxVERTICAL);
+        event.SetEventObject(m_win);
+        m_win->GetEventHandler()->ProcessEvent(event);
+    }
 }
 
 // ----------------------------------------------------------------------------