[Libreoffice-commits] core.git: Branch 'libreoffice-5-0' - vcl/unx

Khaled Hosny khaledhosny at eglug.org
Thu Aug 20 02:25:28 PDT 2015


 vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx |   30 +++++++++++++++++++-------
 1 file changed, 23 insertions(+), 7 deletions(-)

New commits:
commit a803ec69f69068e0c45a7825094941b9ea765c1c
Author: Khaled Hosny <khaledhosny at eglug.org>
Date:   Mon Aug 17 00:49:39 2015 +0200

    Fix GTK3 right-to-left rendering
    
    * Reverse the direction of arrows e.g. in menus
    * Reverse the position of combobox button
    
    They are lumped together because fixing one breaks the other
    
    Change-Id: I65afb08785e67db72a72ad39f1de56db037b640a
    Reviewed-on: https://gerrit.libreoffice.org/17788
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Norbert Thiebaud <nthiebaud at gmail.com>
    Reviewed-on: https://gerrit.libreoffice.org/17845
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx b/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx
index 126d6d1..1f04b2e 100644
--- a/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx
+++ b/vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx
@@ -77,6 +77,11 @@ static void NWConvertVCLStateToGTKState( ControlState nVCLState,
 
     if ( nVCLState & ControlState::FOCUSED )
         *nGTKState = (GtkStateFlags) (*nGTKState | GTK_STATE_FLAG_FOCUSED);
+
+    if (AllSettings::GetLayoutRTL())
+    {
+        *nGTKState = (GtkStateFlags) (*nGTKState | GTK_STATE_FLAG_DIR_RTL);
+    }
 }
 
 enum {
@@ -661,9 +666,11 @@ Rectangle GtkSalGraphics::NWGetComboBoxButtonRect( ControlType nType,
     nButtonWidth = nArrowWidth + padding.left + padding.right;
     if( nPart == PART_BUTTON_DOWN )
     {
+        Point aPos = Point(aAreaRect.Left() + aAreaRect.GetWidth() - nButtonWidth, aAreaRect.Top());
+        if (AllSettings::GetLayoutRTL())
+            aPos.X() = aAreaRect.Left();
         aButtonRect.SetSize( Size( nButtonWidth, aAreaRect.GetHeight() ) );
-        aButtonRect.SetPos( Point( aAreaRect.Left() + aAreaRect.GetWidth() - nButtonWidth,
-                                   aAreaRect.Top() ) );
+        aButtonRect.SetPos(aPos);
     }
     else if( nPart == PART_SUB_EDIT )
     {
@@ -675,7 +682,10 @@ Rectangle GtkSalGraphics::NWGetComboBoxButtonRect( ControlType nType,
         aButtonRect.SetSize( Size( aAreaRect.GetWidth() - nButtonWidth - (adjust_left + adjust_right),
                                    aAreaRect.GetHeight() - (adjust_top + adjust_bottom)) );
         Point aEditPos = aAreaRect.TopLeft();
-        aEditPos.X() += adjust_left;
+        if (AllSettings::GetLayoutRTL())
+            aEditPos.X() += nButtonWidth;
+        else
+            aEditPos.X() += adjust_left;
         aEditPos.Y() += adjust_top;
         aButtonRect.SetPos( aEditPos );
     }
@@ -703,6 +713,8 @@ void GtkSalGraphics::PaintCombobox( GtkStateFlags flags, cairo_t *cr,
 
     Rectangle        aEditBoxRect( areaRect );
     aEditBoxRect.SetSize( Size( areaRect.GetWidth() - buttonRect.GetWidth(), aEditBoxRect.GetHeight() ) );
+    if (AllSettings::GetLayoutRTL())
+        aEditBoxRect.SetPos( Point( areaRect.Left() + buttonRect.GetWidth(), areaRect.Top() ) );
 
     arrowRect.SetSize( Size( (gint)(ARROW_SIZE),
                              (gint)(ARROW_SIZE) ) );
@@ -719,7 +731,10 @@ void GtkSalGraphics::PaintCombobox( GtkStateFlags flags, cairo_t *cr,
         {
             gtk_style_context_save(mpEntryStyle);
             gtk_style_context_set_state(mpEntryStyle, flags);
-            gtk_style_context_set_junction_sides(mpEntryStyle, GTK_JUNCTION_RIGHT);
+            if (AllSettings::GetLayoutRTL())
+                gtk_style_context_set_junction_sides(mpEntryStyle, GTK_JUNCTION_LEFT);
+            else
+                gtk_style_context_set_junction_sides(mpEntryStyle, GTK_JUNCTION_RIGHT);
 
             gtk_render_background(mpComboboxStyle, cr,
                                   0, 0,
@@ -727,12 +742,13 @@ void GtkSalGraphics::PaintCombobox( GtkStateFlags flags, cairo_t *cr,
             gtk_render_frame(mpComboboxStyle, cr,
                              0, 0,
                              areaRect.GetWidth(), areaRect.GetHeight());
-
             gtk_render_background(mpEntryStyle, cr,
-                                  0, 0,
+                                  (aEditBoxRect.Left() - areaRect.Left()),
+                                  (aEditBoxRect.Top() - areaRect.Top()),
                                   aEditBoxRect.GetWidth(), aEditBoxRect.GetHeight() );
             gtk_render_frame(mpEntryStyle, cr,
-                             0, 0,
+                             (aEditBoxRect.Left() - areaRect.Left()),
+                             (aEditBoxRect.Top() - areaRect.Top()),
                              aEditBoxRect.GetWidth(), aEditBoxRect.GetHeight() );
 
             gtk_style_context_restore(mpEntryStyle);


More information about the Libreoffice-commits mailing list