[Libreoffice-commits] core.git: vcl/inc vcl/unx

Miklos Vajna (via logerrit) logerrit at kemper.freedesktop.org
Sat Apr 13 10:34:49 UTC 2019


 vcl/inc/unx/gtk/gtkgdi.hxx           |    2 +-
 vcl/unx/gtk/salnativewidgets-gtk.cxx |   28 +++++++++++++++++++---------
 2 files changed, 20 insertions(+), 10 deletions(-)

New commits:
commit fb9c7e31f888a301fecb5257635e12ce7b907d14
Author:     Miklos Vajna <vmiklos at collabora.com>
AuthorDate: Fri Apr 12 15:59:38 2019 +0200
Commit:     Miklos Vajna <vmiklos at collabora.com>
CommitDate: Sat Apr 13 12:34:15 2019 +0200

    tdf#97822 vcl opengl gtk2: fix missing list node widget
    
    OpenGL just sets GtkSalGraphics::bNeedPixmapPaint to true, and the
    problem is specific to that flag (can be also enabled via
    SAL_GTK_USE_PIXMAPPAINT=1).
    
    Most other widgets are painted correctly in the GL case as they pass
    around a drawable explicitly; do the same for ControlType::ListNode as
    well in the GL case. The non-GL case still needs to go via the pixmap
    render macros to have correct position, leave that unchanged.
    
    Change-Id: Ia82a6772e357b434d706e58664be3a8427e91669
    Reviewed-on: https://gerrit.libreoffice.org/70669
    Tested-by: Jenkins
    Reviewed-by: Miklos Vajna <vmiklos at collabora.com>

diff --git a/vcl/inc/unx/gtk/gtkgdi.hxx b/vcl/inc/unx/gtk/gtkgdi.hxx
index 707b0a2918c2..8187bdb5a043 100644
--- a/vcl/inc/unx/gtk/gtkgdi.hxx
+++ b/vcl/inc/unx/gtk/gtkgdi.hxx
@@ -384,7 +384,7 @@ protected:
     bool NWPaintGTKSlider( ControlPart nPart,
                            const tools::Rectangle& rControlRectangle,
                            ControlState nState, const ImplControlValue& aValue );
-    bool NWPaintGTKListNode(
+    bool NWPaintGTKListNode( GdkDrawable* gdkDrawable,
                             const tools::Rectangle& rControlRectangle,
                             ControlState nState, const ImplControlValue& aValue );
 };
diff --git a/vcl/unx/gtk/salnativewidgets-gtk.cxx b/vcl/unx/gtk/salnativewidgets-gtk.cxx
index b0f015a24fe7..0ce990426813 100644
--- a/vcl/unx/gtk/salnativewidgets-gtk.cxx
+++ b/vcl/unx/gtk/salnativewidgets-gtk.cxx
@@ -1020,7 +1020,7 @@ bool GtkSalGraphics::DoDrawNativeControl(
     }
     else if( (nType == ControlType::ListNode) && (nPart == ControlPart::Entire) )
     {
-        return NWPaintGTKListNode( aCtrlRect, nState, aValue );
+        return NWPaintGTKListNode( pDrawable, aCtrlRect, nState, aValue );
     }
     else if( (nType == ControlType::ListNet) && (nPart == ControlPart::Entire) )
     {
@@ -3347,7 +3347,18 @@ bool GtkSalGraphics::NWPaintGTKTooltip(
     return true;
 }
 
+namespace
+{
+void NWPaintGTKListNodeReal(SalX11Screen nXScreen, GdkDrawable* gdkDrawable, GtkStateType stateType,
+                            gint w, int h, GtkExpanderStyle eStyle)
+{
+    gtk_paint_expander(gWidgetData[nXScreen].gTreeView->style, gdkDrawable, stateType, nullptr,
+                       gWidgetData[nXScreen].gTreeView, "treeview", w / 2, h / 2, eStyle);
+}
+}
+
 bool GtkSalGraphics::NWPaintGTKListNode(
+            GdkDrawable* gdkDrawable,
             const tools::Rectangle& rControlRectangle,
             ControlState nState, const ImplControlValue& rValue )
 {
@@ -3377,16 +3388,15 @@ bool GtkSalGraphics::NWPaintGTKListNode(
             break;
     }
 
+    if (GtkSalGraphics::bNeedPixmapPaint)
+    {
+        NWPaintGTKListNodeReal(m_nXScreen, gdkDrawable, stateType, w, h, eStyle);
+        return true;
+    }
+
     BEGIN_PIXMAP_RENDER( aRect, pixDrawable )
     {
-        gtk_paint_expander( gWidgetData[m_nXScreen].gTreeView->style,
-                            pixDrawable,
-                            stateType,
-                            nullptr,
-                            gWidgetData[m_nXScreen].gTreeView,
-                            "treeview",
-                            w/2, h/2,
-                            eStyle );
+        NWPaintGTKListNodeReal(m_nXScreen, pixDrawable, stateType, w, h, eStyle);
     }
     END_PIXMAP_RENDER( aRect )
 


More information about the Libreoffice-commits mailing list