summaryrefslogtreecommitdiffstats
path: root/bundles
diff options
context:
space:
mode:
authorSilenio Quarti <silenio_quarti@ca.ibm.com>2013-04-30 16:27:49 -0400
committerSilenio Quarti <silenio_quarti@ca.ibm.com>2013-04-30 16:27:49 -0400
commit8020477095f7384b8e5f566a5db9fc33a8794ffd (patch)
treed68d54b957c10069204ac296870f6808fa7d2c15 /bundles
parent1905ff1040b424a8c02ed162c7f70027fb9cc2a1 (diff)
downloadeclipse.platform.swt-8020477095f7384b8e5f566a5db9fc33a8794ffd.tar.gz
eclipse.platform.swt-8020477095f7384b8e5f566a5db9fc33a8794ffd.tar.xz
eclipse.platform.swt-8020477095f7384b8e5f566a5db9fc33a8794ffd.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.java29
1 files changed, 15 insertions, 14 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 95f0bc0496..014d4d72b7 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
@@ -288,20 +288,21 @@ 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);
-// 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);
+ long /*int*/ cairo = OS.gdk_cairo_create(window);
+ if (Cairo.cairo_version() < Cairo.CAIRO_VERSION_ENCODE(1, 12, 0)) {
+ OS.gdk_cairo_set_source_window(cairo, window, 0, 0);
+ } else {
+ 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);
+ }
+ double[] matrix = {1, 0, 0, 1, -deltaX, -deltaY};
+ Cairo.cairo_pattern_set_matrix(Cairo.cairo_get_source(cairo), matrix);
+ Cairo.cairo_rectangle(cairo, copyRect.x + deltaX, copyRect.y + deltaY, copyRect.width, copyRect.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);