Hi all,

Here is a little patch that fixes a rendering buglet that annoyed me
since ever. Native GTK applications swap the position of the button and
editing area of comboboxes in RTL and themese expect that, but LO does
not.

The same issue happens with spin buttons and other similar widget, I'm
just making sure I'm doing it right before sending other patches.

Also I'm not sure how GTK3 relates to this (is it affected/need to be
fixed separately etc.) since I can't build with it here.

BTW, Application::GetSettings().GetLayoutRTL() is now used in several
places (and may be more will come), would it be more rideable/save a few
microsocends to have a 

bool isLayoutRTL = Application::GetSettings().GetLayoutRTL()

(or something like that) on the top of the file?

Regards,
 Khaled
>From a8fd7c4a5dbf57003339af883ae795eefe093f90 Mon Sep 17 00:00:00 2001
From: Khaled Hosny <khaledho...@eglug.org>
Date: Wed, 30 Nov 2011 08:57:46 +0200
Subject: [PATCH] gtk: fix RTL combobox rendering

GTK themes expect the button and the editing area to be swapped in RTL.
---
 vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx |   11 +++++++++--
 1 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx b/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx
index 2cdd032..6afba20 100644
--- a/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx
+++ b/vcl/unx/gtk/gdi/salnativewidgets-gtk.cxx
@@ -2185,6 +2185,8 @@ sal_Bool GtkSalGraphics::NWPaintGTKComboBox( GdkDrawable* gdkDrawable,
 
     Rectangle        aEditBoxRect( pixmapRect );
     aEditBoxRect.SetSize( Size( pixmapRect.GetWidth() - buttonRect.GetWidth(), aEditBoxRect.GetHeight() ) );
+    if( Application::GetSettings().GetLayoutRTL() )
+        aEditBoxRect.SetPos( Point( x + buttonRect.GetWidth() , y ) );
 
     #define ARROW_EXTENT        0.7
     arrowRect.SetSize( Size( (gint)(MIN_ARROW_SIZE * ARROW_EXTENT),
@@ -2254,8 +2256,11 @@ static Rectangle NWGetComboBoxButtonRect( int nScreen,
     if( nPart == PART_BUTTON_DOWN )
     {
         aButtonRect.SetSize( Size( nButtonWidth, aAreaRect.GetHeight() ) );
-        aButtonRect.SetPos( Point( aAreaRect.Left() + aAreaRect.GetWidth() - nButtonWidth,
-                                   aAreaRect.Top() ) );
+        if( Application::GetSettings().GetLayoutRTL() )
+            aButtonRect.SetPos( Point( aAreaRect.Left(), aAreaRect.Top() ) );
+        else
+            aButtonRect.SetPos( Point( aAreaRect.Left() + aAreaRect.GetWidth() - nButtonWidth,
+                                       aAreaRect.Top() ) );
     }
     else if( nPart == PART_SUB_EDIT )
     {
@@ -2271,6 +2276,8 @@ static Rectangle NWGetComboBoxButtonRect( int nScreen,
         Point aEditPos = aAreaRect.TopLeft();
         aEditPos.X() += adjust_x;
         aEditPos.Y() += adjust_y;
+        if( Application::GetSettings().GetLayoutRTL() )
+            aEditPos.X() += nButtonWidth;
         aButtonRect.SetPos( aEditPos );
     }
 
-- 
1.7.0.4

_______________________________________________
LibreOffice mailing list
LibreOffice@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to