summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSilenio Quarti <silenio_quarti@ca.ibm.com>2012-10-26 17:21:58 -0400
committerSilenio Quarti <silenio_quarti@ca.ibm.com>2012-10-26 17:21:58 -0400
commit7a336975c60c1d054f5553c0be260449fea9c75a (patch)
tree2711c3698f29d3fbaa88f6dca5118c7430ed0dea
parent8768b4b57ea3e0d4a81ed87d1ceddaec1f0f3d74 (diff)
downloadeclipse.platform.swt-7a336975c60c1d054f5553c0be260449fea9c75a.tar.gz
eclipse.platform.swt-7a336975c60c1d054f5553c0be260449fea9c75a.tar.xz
eclipse.platform.swt-7a336975c60c1d054f5553c0be260449fea9c75a.zip
fix other places with polygon regions
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/GC.java18
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Region.java2
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolTip.java35
3 files changed, 14 insertions, 41 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/GC.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/GC.java
index 04d595bbee..eb9d33d7ba 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/GC.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/GC.java
@@ -455,21 +455,9 @@ long /*int*/ convertRgn(long /*int*/ rgn, double[] matrix) {
pointArray[6] = (int)x[0];
pointArray[7] = (int)Math.round(y[0]);
if (OS.GTK_VERSION >= OS.VERSION(3, 0, 0)) {
- int count = pointArray.length / 2;
- if (count != 0) {
- long /*int*/ cairo = OS.gdk_cairo_create(newRgn);
- Cairo.cairo_move_to(cairo, pointArray[0], pointArray[1]);
- for (int n=1,j=2; n<count; n++,j+=2) {
- Cairo.cairo_move_to(cairo, pointArray[j]+0.5, pointArray[j+1]+0.5);
- }
- Cairo.cairo_close_path(cairo);
- Cairo.cairo_set_fill_rule(cairo, Cairo.CAIRO_FILL_RULE_EVEN_ODD);
- Cairo.cairo_fill(cairo);
- long /*int*/ surface = Cairo.cairo_get_target(cairo);
- long /*int*/ polyRgn = OS.gdk_cairo_region_create_from_surface(surface);
- Cairo.cairo_region_union(newRgn, polyRgn);
- Cairo.cairo_destroy(cairo);
- }
+ long /*int*/ polyRgn = Region.cairoPolygonRgn(pointArray);
+ Cairo.cairo_region_union(newRgn, polyRgn);
+ Cairo.cairo_region_destroy(polyRgn);
} else {
long /*int*/ polyRgn = OS.gdk_region_polygon(pointArray, pointArray.length / 2, OS.GDK_EVEN_ODD_RULE);
OS.gdk_region_union(newRgn, polyRgn);
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Region.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Region.java
index 2c704a9fc8..825a56c648 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Region.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/Region.java
@@ -201,7 +201,7 @@ public void add(Region region) {
cairo_region_union (handle, region.handle);
}
-long /*int*/ cairoPolygonRgn(int[] pointArray) {
+static long /*int*/ cairoPolygonRgn(int[] pointArray) {
//TODO this does not perform well and could fail if the polygon is too big
int minX = pointArray[0], maxX = minX;
int minY = pointArray[1], maxY = minY;
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolTip.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolTip.java
index 58959e7e63..f005ec1b39 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolTip.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/ToolTip.java
@@ -250,31 +250,16 @@ void configure () {
}
}
OS.gtk_widget_realize(handle);
- long /*int*/ window = gtk_widget_get_window (handle);
- /*
- As methods required to replicate gdk_window_shape_combine_region ()
- are available starting from GTK+ 3, Cairo implementation that replicates
- gdk_region_polygon () should be also available to GTK+ 3.0 and higher.
- */
- if (OS.GTK_VERSION >= OS.VERSION(3, 0, 0)) {
- long /*int*/ cairo = OS.gdk_cairo_create(window);
- int count = polyline.length / 2;
- if (count == 0) return;
- Cairo.cairo_move_to(cairo, polyline[0], polyline[1]);
- for (int i=1,j=2; i<count; i++,j+=2) {
- Cairo.cairo_move_to(cairo, polyline[j]+0.5, polyline[j+1]+0.5);
- }
- Cairo.cairo_close_path(cairo);
- Cairo.cairo_set_fill_rule(cairo, Cairo.CAIRO_FILL_RULE_EVEN_ODD);
- Cairo.cairo_fill(cairo);
- long /*int*/ surface = Cairo.cairo_get_target(cairo);
- long /*int*/ region = OS.gdk_cairo_region_create_from_surface(surface);
- OS.gtk_widget_shape_combine_region (window, region);
- Cairo.cairo_destroy(cairo);
- } else {
- long /*int*/ rgn = OS.gdk_region_polygon (polyline, polyline.length / 2, OS.GDK_EVEN_ODD_RULE);
- OS.gdk_window_shape_combine_region (window, rgn, 0, 0);
- OS.gdk_region_destroy (rgn);
+ if (OS.GTK_VERSION >= OS.VERSION(3, 0, 0)) {
+ Region region = new Region (display);
+ region.add(polyline);
+ OS.gtk_widget_shape_combine_region (handle, region.handle);
+ region.dispose ();
+ } else {
+ long /*int*/ window = gtk_widget_get_window (handle);
+ long /*int*/ rgn = OS.gdk_region_polygon (polyline, polyline.length / 2, OS.GDK_EVEN_ODD_RULE);
+ OS.gdk_window_shape_combine_region (window, rgn, 0, 0);
+ OS.gdk_region_destroy (rgn);
}
}