diff options
author | Silenio Quarti <silenio_quarti@ca.ibm.com> | 2013-04-30 16:27:49 -0400 |
---|---|---|
committer | Silenio Quarti <silenio_quarti@ca.ibm.com> | 2013-04-30 16:27:49 -0400 |
commit | 8020477095f7384b8e5f566a5db9fc33a8794ffd (patch) | |
tree | d68d54b957c10069204ac296870f6808fa7d2c15 /bundles | |
parent | 1905ff1040b424a8c02ed162c7f70027fb9cc2a1 (diff) | |
download | eclipse.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.java | 29 |
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); |