vcl/inc/unx/gtk/gtkgdi.hxx | 2 vcl/unx/gtk/salnativewidgets-gtk.cxx | 122 ++++++++++++++++------------------- 2 files changed, 58 insertions(+), 66 deletions(-)
New commits: commit b0da0a45a6453a0ddebded83ae8401e7f3cccde3 Author: Miklos Vajna <vmik...@collabora.com> AuthorDate: Mon Apr 15 09:43:43 2019 +0200 Commit: Miklos Vajna <vmik...@collabora.com> CommitDate: Mon Apr 15 11:47:39 2019 +0200 Related: tdf#97822 vcl opengl gtk2: fix missing slider widget This had the same problem as the list node widget, fixed in commit fb9c7e31f888a301fecb5257635e12ce7b907d14 (tdf#97822 vcl opengl gtk2: fix missing list node widget, 2019-04-12). Render output was missing in the GL / SAL_GTK_USE_PIXMAPPAINT=1 case. Change-Id: I24252c697523214a93f715759e242d47352c8341 Reviewed-on: https://gerrit.libreoffice.org/70760 Reviewed-by: Miklos Vajna <vmik...@collabora.com> Tested-by: Jenkins diff --git a/vcl/inc/unx/gtk/gtkgdi.hxx b/vcl/inc/unx/gtk/gtkgdi.hxx index 8187bdb5a043..87f1d0e14c3a 100644 --- a/vcl/inc/unx/gtk/gtkgdi.hxx +++ b/vcl/inc/unx/gtk/gtkgdi.hxx @@ -381,7 +381,7 @@ protected: bool NWPaintGTKProgress( const tools::Rectangle& rControlRectangle, const ImplControlValue& aValue ); - bool NWPaintGTKSlider( ControlPart nPart, + bool NWPaintGTKSlider( GdkDrawable* gdkDrawable, ControlPart nPart, const tools::Rectangle& rControlRectangle, ControlState nState, const ImplControlValue& aValue ); bool NWPaintGTKListNode( GdkDrawable* gdkDrawable, diff --git a/vcl/unx/gtk/salnativewidgets-gtk.cxx b/vcl/unx/gtk/salnativewidgets-gtk.cxx index 759fd14a2a3b..b965705eaa1c 100644 --- a/vcl/unx/gtk/salnativewidgets-gtk.cxx +++ b/vcl/unx/gtk/salnativewidgets-gtk.cxx @@ -1026,7 +1026,7 @@ bool GtkSalGraphics::DoDrawNativeControl( } else if( nType == ControlType::Slider ) { - return NWPaintGTKSlider( nPart, aCtrlRect, nState, aValue ); + return NWPaintGTKSlider(pDrawable, nPart, aCtrlRect, nState, aValue); } else if( nType == ControlType::WindowBackground ) { @@ -3459,7 +3459,57 @@ bool GtkSalGraphics::NWPaintGTKProgress( return true; } +namespace +{ +void NWPaintGTKSliderReal(SalX11Screen nXScreen, GdkDrawable* gdkDrawable, ControlPart nPart, + const tools::Rectangle& rControlRectangle, ControlState nState, + const ImplControlValue& rValue) +{ + gint w, h; + w = rControlRectangle.GetWidth(); + h = rControlRectangle.GetHeight(); + + const SliderValue* pVal = static_cast<const SliderValue*>(&rValue); + + GtkWidget* pWidget = (nPart == ControlPart::TrackHorzArea) + ? GTK_WIDGET(gWidgetData[nXScreen].gHScale) + : GTK_WIDGET(gWidgetData[nXScreen].gVScale); + const gchar* pDetail = (nPart == ControlPart::TrackHorzArea) ? "hscale" : "vscale"; + GtkOrientation eOri = (nPart == ControlPart::TrackHorzArea) ? GTK_ORIENTATION_HORIZONTAL + : GTK_ORIENTATION_VERTICAL; + gint slider_width = 10; + gint slider_length = 10; + gint trough_border = 0; + gtk_widget_style_get(pWidget, "slider-width", &slider_width, "slider-length", &slider_length, + "trough-border", &trough_border, nullptr); + + GtkStateType eState + = (nState & ControlState::ENABLED) ? GTK_STATE_NORMAL : GTK_STATE_INSENSITIVE; + if (nPart == ControlPart::TrackHorzArea) + { + gtk_paint_box(pWidget->style, gdkDrawable, eState, GTK_SHADOW_IN, nullptr, pWidget, + "trough", 0, (h - slider_width - 2 * trough_border) / 2, w, + slider_width + 2 * trough_border); + gint x + = (w - slider_length + 1) * (pVal->mnCur - pVal->mnMin) / (pVal->mnMax - pVal->mnMin); + gtk_paint_slider(pWidget->style, gdkDrawable, eState, GTK_SHADOW_OUT, nullptr, pWidget, + pDetail, x, (h - slider_width) / 2, slider_length, slider_width, eOri); + } + else + { + gtk_paint_box(pWidget->style, gdkDrawable, eState, GTK_SHADOW_IN, nullptr, pWidget, + "trough", (w - slider_width - 2 * trough_border) / 2, 0, + slider_width + 2 * trough_border, h); + gint y + = (h - slider_length + 1) * (pVal->mnCur - pVal->mnMin) / (pVal->mnMax - pVal->mnMin); + gtk_paint_slider(pWidget->style, gdkDrawable, eState, GTK_SHADOW_OUT, nullptr, pWidget, + pDetail, (w - slider_width) / 2, y, slider_width, slider_length, eOri); + } +} +} + bool GtkSalGraphics::NWPaintGTKSlider( + GdkDrawable* gdkDrawable, ControlPart nPart, const tools::Rectangle& rControlRectangle, ControlState nState, const ImplControlValue& rValue ) @@ -3467,73 +3517,15 @@ bool GtkSalGraphics::NWPaintGTKSlider( OSL_ASSERT( rValue.getType() == ControlType::Slider ); NWEnsureGTKSlider( m_nXScreen ); - gint w, h; - w = rControlRectangle.GetWidth(); - h = rControlRectangle.GetHeight(); - - const SliderValue* pVal = static_cast<const SliderValue*>(&rValue); + if (GtkSalGraphics::bNeedPixmapPaint) + { + NWPaintGTKSliderReal(m_nXScreen, gdkDrawable, nPart, rControlRectangle, nState, rValue); + return true; + } BEGIN_PIXMAP_RENDER( rControlRectangle, pixDrawable ) { - GtkWidget* pWidget = (nPart == ControlPart::TrackHorzArea) - ? GTK_WIDGET(gWidgetData[m_nXScreen].gHScale) - : GTK_WIDGET(gWidgetData[m_nXScreen].gVScale); - const gchar* pDetail = (nPart == ControlPart::TrackHorzArea) ? "hscale" : "vscale"; - GtkOrientation eOri = (nPart == ControlPart::TrackHorzArea) ? GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL; - gint slider_width = 10; - gint slider_length = 10; - gint trough_border = 0; - gtk_widget_style_get( pWidget, - "slider-width", &slider_width, - "slider-length", &slider_length, - "trough-border", &trough_border, - nullptr); - - GtkStateType eState = (nState & ControlState::ENABLED) ? GTK_STATE_NORMAL : GTK_STATE_INSENSITIVE; - if( nPart == ControlPart::TrackHorzArea ) - { - gtk_paint_box( pWidget->style, - pixDrawable, - eState, - GTK_SHADOW_IN, - nullptr, - pWidget, - "trough", - 0, (h-slider_width-2*trough_border)/2, w, slider_width + 2*trough_border); - gint x = (w - slider_length + 1) * (pVal->mnCur - pVal->mnMin) / (pVal->mnMax - pVal->mnMin); - gtk_paint_slider( pWidget->style, - pixDrawable, - eState, - GTK_SHADOW_OUT, - nullptr, - pWidget, - pDetail, - x, (h-slider_width)/2, - slider_length, slider_width, - eOri ); - } - else - { - gtk_paint_box( pWidget->style, - pixDrawable, - eState, - GTK_SHADOW_IN, - nullptr, - pWidget, - "trough", - (w-slider_width-2*trough_border)/2, 0, slider_width + 2*trough_border, h); - gint y = (h - slider_length + 1) * (pVal->mnCur - pVal->mnMin) / (pVal->mnMax - pVal->mnMin); - gtk_paint_slider( pWidget->style, - pixDrawable, - eState, - GTK_SHADOW_OUT, - nullptr, - pWidget, - pDetail, - (w-slider_width)/2, y, - slider_width, slider_length, - eOri ); - } + NWPaintGTKSliderReal(m_nXScreen, pixDrawable, nPart, rControlRectangle, nState, rValue); } END_PIXMAP_RENDER( rControlRectangle ) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits