]> git.saurik.com Git - wxWidgets.git/commitdiff
More RTL fixes.
authorRobert Roebling <robert@roebling.de>
Tue, 12 Sep 2006 09:48:27 +0000 (09:48 +0000)
committerRobert Roebling <robert@roebling.de>
Tue, 12 Sep 2006 09:48:27 +0000 (09:48 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41172 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/generic/scrlwing.cpp
src/gtk/window.cpp

index 42c47c89042f56e7dd6cfd2d88b5b1eb4ed8161b..ad1b3813991b1eb3b57938510db1395a662b95f4 100644 (file)
@@ -936,7 +936,33 @@ void wxScrollHelper::GetViewStart (int *x, int *y) const
 void wxScrollHelper::DoCalcScrolledPosition(int x, int y, int *xx, int *yy) const
 {
     if ( xx )
-        *xx = x - m_xScrollPosition * m_xScrollPixelsPerLine;
+    {
+        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;
+            }
+        }
+    }
     if ( yy )
         *yy = y - m_yScrollPosition * m_yScrollPixelsPerLine;
 }
@@ -944,7 +970,33 @@ 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 )
-        *xx = x + m_xScrollPosition * m_xScrollPixelsPerLine;
+    {
+        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;
+            }
+        }
+    }
     if ( yy )
         *yy = y + m_yScrollPosition * m_yScrollPixelsPerLine;
 }
index a18ed12377d571085bd9e2cd7365e86b3a61e089..9f639a35865efbb6e2cfdb520696b8c814a86fd2 100644 (file)
@@ -1286,10 +1286,7 @@ template<typename T> void InitMouseEvent(wxWindowGTK *win,
     if ((win->m_wxwindow) && (win->GetLayoutDirection() == wxLayout_RightToLeft))
     {
         // origin in the upper right corner
-        int virtual_width = win->GetVirtualSize().x;
         int window_width = gtk_pizza_get_rtl_offset( GTK_PIZZA(win->m_wxwindow) );
-        //wxPrintf( wxT("event.m_x %d virtual_width %d window_width %d m_xoffset %d\n"), 
-        //              event.m_x, virtual_width, window_width, GTK_PIZZA(win->m_wxwindow)->m_xoffset );
         event.m_x = window_width - event.m_x;
     }