]> git.saurik.com Git - wxWidgets.git/commitdiff
More RTL work. Now transform m_updateRegion and
authorRobert Roebling <robert@roebling.de>
Mon, 18 Sep 2006 14:29:16 +0000 (14:29 +0000)
committerRobert Roebling <robert@roebling.de>
Mon, 18 Sep 2006 14:29:16 +0000 (14:29 +0000)
   do nothing special in IsExposed() since some
   code may use m_updateRegion directly. Keep
   untransformed version around for use with
   GTK clipping in the DC.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41277 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/gtk/window.h
src/generic/grid.cpp
src/gtk/dcclient.cpp
src/gtk/window.cpp

index c009ff693a39a9d89b8817ce428644843c2775e1..f1857ba42d3e613624f5fe56186c966e51937284 100644 (file)
@@ -307,6 +307,7 @@ public:
     bool                 m_hasFocus:1;          // true if == FindFocus()
     bool                 m_isScrolling:1;       // dragging scrollbar thumb?
     bool                 m_clipPaintRegion:1;   // true after ScrollWindow()
+    wxRegion             m_nativeUpdateRegion;  // not transformed for RTL
     bool                 m_dirtyTabOrder:1;     // tab order changed, GTK focus
                                                 // chain needs update
     bool                 m_needsStyleChange:1;  // May not be able to change
index 5fcffb809e5681f3bd71cf5019027e27fec2ced7..1c007dd1ca3a09a318032de90b3c08d7bbb933b7 100644 (file)
@@ -6826,6 +6826,14 @@ void wxGrid::OnKeyDown( wxKeyEvent& event )
 
     if ( !parent->GetEventHandler()->ProcessEvent( keyEvt ) )
     {
+        if (GetLayoutDirection() == wxLayout_RightToLeft)
+        {
+            if (event.GetKeyCode() == WXK_RIGHT)
+                event.m_keyCode = WXK_LEFT;
+            else if (event.GetKeyCode() == WXK_LEFT)
+                event.m_keyCode = WXK_RIGHT;
+        }
+    
         // try local handlers
         switch ( event.GetKeyCode() )
         {
@@ -7506,6 +7514,12 @@ void wxGrid::DrawCellHighlight( wxDC& dc, const wxGridCellAttr *attr )
         rect.width -= penWidth - 1;
         rect.height -= penWidth - 1;
 
+#ifdef __WXGTK__
+        // FIXME: why is the rect drawn off-by-one?
+        if ((penWidth == 2) && (GetLayoutDirection() == wxLayout_RightToLeft))
+            rect.x -= 1;
+#endif
+
         // Now draw the rectangle
         // use the cellHighlightColour if the cell is inside a selection, this
         // will ensure the cell is always visible.
index 71c58be3d2f69fd82f0b6ce034f6f67478cf9ab1..4c47974d553c53069df1c4f6b93c4d358eb42cab 100644 (file)
@@ -2332,7 +2332,7 @@ wxPaintDC::wxPaintDC( wxWindow *win )
         return;
 
     wxSize sz = win->GetSize();
-    m_paintClippingRegion = win->GetUpdateRegion();
+    m_paintClippingRegion = win->m_nativeUpdateRegion;
     wxLimitRegionToSize(m_paintClippingRegion, sz);
 
     GdkRegion *region = m_paintClippingRegion.GetRegion();
index 616ac2f8364098b155ba446dd7651fd5e9513625..a83c1c551ef0230e0d44489470b1e6edc4cf050e 100644 (file)
@@ -3824,9 +3824,11 @@ bool wxWindowGTK::DoIsExposed( int x, int y ) const
 
 bool wxWindowGTK::DoIsExposed( int x, int y, int w, int h ) const
 {
+#if 0
     if (GetLayoutDirection() == wxLayout_RightToLeft)
         return m_updateRegion.Contains(x-w, y, w, h) != wxOutRegion;
     else
+#endif
         return m_updateRegion.Contains(x, y, w, h) != wxOutRegion;
 }
 
@@ -3841,16 +3843,18 @@ void wxWindowGTK::GtkSendPaintEvents()
     // Clip to paint region in wxClientDC
     m_clipPaintRegion = true;
 
-#if 0
+    m_nativeUpdateRegion = m_updateRegion;
+
     if (GetLayoutDirection() == wxLayout_RightToLeft)
     {
-        maybe_rtl_region.Clear();
+        // Transform m_updateRegion under RTL
+        m_updateRegion.Clear();
         
         gint width;
         gdk_window_get_geometry( GTK_PIZZA(m_wxwindow)->bin_window,
                                  NULL, NULL, &width, NULL, NULL );
         
-        wxRegionIterator upd( m_updateRegion );
+        wxRegionIterator upd( m_nativeUpdateRegion );
         while (upd)
         {
             wxRect rect;
@@ -3860,12 +3864,11 @@ void wxWindowGTK::GtkSendPaintEvents()
             rect.height = upd.GetHeight();
             
             rect.x = width - rect.x - rect.width;
-            maybe_rtl_region.Union( rect );
+            m_updateRegion.Union( rect );
             
             ++upd;
         }
     }
-#endif
     
     // widget to draw on
     GtkPizza *pizza = GTK_PIZZA (m_wxwindow);
@@ -3879,7 +3882,7 @@ void wxWindowGTK::GtkSendPaintEvents()
 
         if (GTK_WIDGET_MAPPED(parent->m_widget))
         {
-            wxRegionIterator upd( m_updateRegion );
+            wxRegionIterator upd( m_nativeUpdateRegion );
             while (upd)
             {
                 GdkRectangle rect;
@@ -3923,6 +3926,7 @@ void wxWindowGTK::GtkSendPaintEvents()
     m_clipPaintRegion = false;
 
     m_updateRegion.Clear();
+    m_nativeUpdateRegion.Clear();
 }
 
 void wxWindowGTK::SetDoubleBuffered( bool on )