vcl/unx/gtk3/gdi/gtk3salnativewidgets-gtk.cxx | 30 +++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-)
New commits: commit a803ec69f69068e0c45a7825094941b9ea765c1c Author: Khaled Hosny <khaledho...@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 <c...@libreoffice.org> Reviewed-by: Norbert Thiebaud <nthieb...@gmail.com> Reviewed-on: https://gerrit.libreoffice.org/17845 Reviewed-by: Caolán McNamara <caol...@redhat.com> Tested-by: Caolán McNamara <caol...@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);
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits