summaryrefslogtreecommitdiffstats
path: root/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java
diff options
context:
space:
mode:
authorAnatoly Spektor <aspektor@redhat.com>2012-10-12 10:37:12 -0400
committerSilenio Quarti <silenio_quarti@ca.ibm.com>2012-10-17 10:34:22 -0400
commitb178ded274cefa13fff8fc6fb8115ee14a844dc8 (patch)
tree1b0bbd83824435229f7e6ecc4157d85590ceb9a4 /bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java
parentdf55805e4a74ab0fc8f545a1792d755c95a4e419 (diff)
downloadeclipse.platform.swt-b178ded274cefa13fff8fc6fb8115ee14a844dc8.tar.gz
eclipse.platform.swt-b178ded274cefa13fff8fc6fb8115ee14a844dc8.tar.xz
eclipse.platform.swt-b178ded274cefa13fff8fc6fb8115ee14a844dc8.zip
Replace GdkRegion with Cairo methods for GTK + 3.0 and higher
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java')
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java64
1 files changed, 45 insertions, 19 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java
index 872c010852..e23bf0a52d 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/Composite.java
@@ -730,25 +730,51 @@ long /*int*/ gtk_expose_event (long /*int*/ widget, long /*int*/ eventPtr) {
OS.memmove(gdkEvent, eventPtr, GdkEventExpose.sizeof);
long /*int*/ [] rectangles = new long /*int*/ [1];
int [] n_rectangles = new int [1];
- OS.gdk_region_get_rectangles (gdkEvent.region, rectangles, n_rectangles);
- GdkRectangle rect = new GdkRectangle ();
- for (int i=0; i<n_rectangles[0]; i++) {
- Event event = new Event ();
- OS.memmove (rect, rectangles [0] + i * GdkRectangle.sizeof, GdkRectangle.sizeof);
- event.x = rect.x;
- event.y = rect.y;
- event.width = rect.width;
- event.height = rect.height;
- if ((style & SWT.MIRRORED) != 0) event.x = getClientWidth () - event.width - event.x;
- long /*int*/ damageRgn = OS.gdk_region_new ();
- OS.gdk_region_union_with_rect (damageRgn, rect);
- GCData data = new GCData ();
- data.damageRgn = damageRgn;
- GC gc = event.gc = GC.gtk_new (this, data);
- sendEvent (SWT.Paint, event);
- gc.dispose ();
- OS.gdk_region_destroy (damageRgn);
- event.gc = null;
+ if (OS.GTK_VERSION >= OS.VERSION(3, 0, 0)) {
+ int num = Cairo.cairo_region_num_rectangles (gdkEvent.region);
+ for (int n = 0; n < num; n++) {
+ Cairo.cairo_region_get_rectangle (gdkEvent.region, n, rectangles[n]);
+ }
+ cairo_rectangle_int_t rect = new cairo_rectangle_int_t ();
+ for (int i=0; i<n_rectangles[0]; i++) {
+ Event event = new Event ();
+ Cairo.memmove (rect, rectangles [0] + i * cairo_rectangle_int_t.sizeof, cairo_rectangle_int_t.sizeof);
+ event.x = rect.x;
+ event.y = rect.y;
+ event.width = rect.width;
+ event.height = rect.height;
+ if ((style & SWT.MIRRORED) != 0) event.x = getClientWidth () - event.width - event.x;
+ long /*int*/ damageRgn = Cairo.cairo_region_create ();
+ Cairo.cairo_region_union_rectangle (damageRgn, rect);
+ GCData data = new GCData ();
+ data.damageRgn = damageRgn;
+ GC gc = event.gc = GC.gtk_new (this, data);
+ sendEvent (SWT.Paint, event);
+ gc.dispose ();
+ Cairo.cairo_region_destroy (damageRgn);
+ event.gc = null;
+ }
+ } else {
+ OS.gdk_region_get_rectangles (gdkEvent.region, rectangles, n_rectangles);
+ GdkRectangle rect = new GdkRectangle ();
+ for (int i=0; i<n_rectangles[0]; i++) {
+ Event event = new Event ();
+ OS.memmove (rect, rectangles [0] + i * GdkRectangle.sizeof, GdkRectangle.sizeof);
+ event.x = rect.x;
+ event.y = rect.y;
+ event.width = rect.width;
+ event.height = rect.height;
+ if ((style & SWT.MIRRORED) != 0) event.x = getClientWidth () - event.width - event.x;
+ long /*int*/ damageRgn = OS.gdk_region_new ();
+ OS.gdk_region_union_with_rect (damageRgn, rect);
+ GCData data = new GCData ();
+ data.damageRgn = damageRgn;
+ GC gc = event.gc = GC.gtk_new (this, data);
+ sendEvent (SWT.Paint, event);
+ gc.dispose ();
+ OS.gdk_region_destroy (damageRgn);
+ event.gc = null;
+ }
}
OS.g_free (rectangles [0]);
return 0;