summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2016-01-15 12:06:06 +0000
committerCaolán McNamara <caolanm@redhat.com>2016-01-18 11:34:09 +0000
commit4ce66db6ac8a18c34011fa0bd3198752a0867d24 (patch)
tree1b574189a6aa30589c4c253ed3ff02b691762597
parent4bf6f5581c9938504b841eb94f6121068b2eb752 (diff)
gtk3: SpinButtons button area isn't always part of the ControlRegion
Change-Id: Id0b5b787c1aaae2401c85a4737a8f33ac7b74679
-rw-r--r--vcl/inc/unx/gtk/gtkgdi.hxx2
-rw-r--r--vcl/unx/gtk3/gtk3salnativewidgets-gtk.cxx12
2 files changed, 10 insertions, 4 deletions
diff --git a/vcl/inc/unx/gtk/gtkgdi.hxx b/vcl/inc/unx/gtk/gtkgdi.hxx
index e5593856f474..32e10b4a2002 100644
--- a/vcl/inc/unx/gtk/gtkgdi.hxx
+++ b/vcl/inc/unx/gtk/gtkgdi.hxx
@@ -104,7 +104,7 @@ private:
ControlPart nPart,
Rectangle aAreaRect,
ControlState nState );
- void PaintSpinButton(GtkStyleContext *context,
+ Rectangle PaintSpinButton(GtkStyleContext *context,
cairo_t *cr,
const Rectangle& rControlRectangle,
ControlType nType,
diff --git a/vcl/unx/gtk3/gtk3salnativewidgets-gtk.cxx b/vcl/unx/gtk3/gtk3salnativewidgets-gtk.cxx
index 65f3d7c6ad1a..69c8a778a3d9 100644
--- a/vcl/unx/gtk3/gtk3salnativewidgets-gtk.cxx
+++ b/vcl/unx/gtk3/gtk3salnativewidgets-gtk.cxx
@@ -617,7 +617,7 @@ void GtkSalGraphics::PaintOneSpinButton( GtkStyleContext *context,
gtk_style_context_restore(context);
}
-void GtkSalGraphics::PaintSpinButton(GtkStyleContext *context,
+Rectangle GtkSalGraphics::PaintSpinButton(GtkStyleContext *context,
cairo_t *cr,
const Rectangle& rControlRectangle,
ControlType nType,
@@ -658,6 +658,8 @@ void GtkSalGraphics::PaintSpinButton(GtkStyleContext *context,
PaintOneSpinButton(context, cr, nType, upBtnPart, areaRect, upBtnState );
PaintOneSpinButton(context, cr, nType, downBtnPart, areaRect, downBtnState );
+
+ return areaRect;
}
#define ARROW_SIZE 11 * 0.85
@@ -1077,6 +1079,8 @@ bool GtkSalGraphics::drawNativeControl( ControlType nType, ControlPart nPart, co
clipRegion(cr);
cairo_translate(cr, rControlRegion.Left(), rControlRegion.Top());
+ Rectangle aDamageRect(rControlRegion);
+
long nX = 0;
long nY = 0;
long nWidth = rControlRegion.GetWidth();
@@ -1159,7 +1163,7 @@ bool GtkSalGraphics::drawNativeControl( ControlType nType, ControlPart nPart, co
PaintScrollbar(context, cr, rControlRegion, nType, nPart, rValue);
break;
case RENDER_SPINBUTTON:
- PaintSpinButton(context, cr, rControlRegion, nType, nPart, rValue);
+ aDamageRect.Union(PaintSpinButton(context, cr, rControlRegion, nType, nPart, rValue));
break;
case RENDER_COMBOBOX:
PaintCombobox(flags, cr, rControlRegion, nType, nPart, rValue);
@@ -1215,7 +1219,9 @@ bool GtkSalGraphics::drawNativeControl( ControlType nType, ControlPart nPart, co
gtk_style_context_restore(context);
cairo_destroy(cr); // unref
- mpFrame->damaged(rControlRegion.Left(), rControlRegion.Top(), rControlRegion.Right(), rControlRegion.Bottom());
+
+ if (!aDamageRect.IsEmpty())
+ mpFrame->damaged(aDamageRect.Left(), aDamageRect.Top(), aDamageRect.Right(), aDamageRect.Bottom());
return true;
}