summaryrefslogtreecommitdiffstats
path: root/bundles
diff options
context:
space:
mode:
authorSilenio Quarti <silenio_quarti@ca.ibm.com>2013-04-29 15:23:25 -0400
committerSilenio Quarti <silenio_quarti@ca.ibm.com>2013-04-29 15:23:25 -0400
commit99e4edefe372e2c463379777ecf1fc5a600cb35b (patch)
tree9bc412222ca37ed1005e1e6a1db3970386f772f1 /bundles
parent07c18674150755bcdf3b70b1ef50f32c44cf7e50 (diff)
downloadeclipse.platform.swt-99e4edefe372e2c463379777ecf1fc5a600cb35b.tar.gz
eclipse.platform.swt-99e4edefe372e2c463379777ecf1fc5a600cb35b.tar.xz
eclipse.platform.swt-99e4edefe372e2c463379777ecf1fc5a600cb35b.zip
Bug 392700 - [GTK3] Java editor paint problems
Diffstat (limited to 'bundles')
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Canvas.java16
1 files changed, 15 insertions, 1 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Canvas.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Canvas.java
index 184bcf548c..201ace8599 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Canvas.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Canvas.java
@@ -12,6 +12,7 @@ package org.eclipse.swt.widgets;
import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.internal.cairo.Cairo;
import org.eclipse.swt.internal.gtk.*;
import org.eclipse.swt.*;
@@ -287,7 +288,20 @@ public void scroll (int destX, int destY, int x, int y, int width, int height, b
redrawWidget (destX, destY, width, height, false, false, false);
} else {
if (OS.GTK3) {
- OS.gdk_window_scroll (window, deltaX, deltaY);
+// OS.gdk_window_scroll (window, deltaX, deltaY);
+ long /*int*/ cairo = OS.gdk_cairo_create(window);
+ Cairo.cairo_rectangle(cairo, destX, destY, width, height);
+ Cairo.cairo_clip(cairo);
+ Cairo.cairo_translate(cairo, deltaX, deltaY);
+ Cairo.cairo_set_operator(cairo, Cairo.CAIRO_OPERATOR_SOURCE);
+ Cairo.cairo_push_group(cairo);
+ OS.gdk_cairo_set_source_window(cairo, window, 0, 0);
+ Cairo.cairo_paint(cairo);
+ Cairo.cairo_pop_group_to_source(cairo);
+ Cairo.cairo_rectangle(cairo, destX - deltaX, destY - deltaY, width, height);
+ Cairo.cairo_clip(cairo);
+ Cairo.cairo_paint(cairo);
+ Cairo.cairo_destroy(cairo);
} else {
long /*int*/ gdkGC = OS.gdk_gc_new (window);
OS.gdk_gc_set_exposures (gdkGC, true);