diff options
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/GC.java')
-rw-r--r-- | bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/graphics/GC.java | 23 |
1 files changed, 22 insertions, 1 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 127e1e216e..7a4642f963 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 @@ -206,6 +206,23 @@ static int checkStyle (int style) { } /** + * Convenience method that applies a region to the Control using cairo_clip. + * + * @param cairo the cairo context to apply the region to + */ +void cairoClipRegion (long /*int*/ cairo) { + if (cairo == 0) return; + GdkRectangle rect = new GdkRectangle (); + GDK.gdk_cairo_get_clip_rectangle (cairo, rect); + long /*int*/ regionHandle = data.regionSet; + long /*int*/ actualRegion = GDK.gdk_region_rectangle(rect); + GDK.gdk_region_subtract(actualRegion, regionHandle); + GDK.gdk_cairo_region(cairo, actualRegion); + Cairo.cairo_clip(cairo); + Cairo.cairo_paint(cairo); +} + +/** * Invokes platform specific functionality to wrap a graphics context. * <p> * <b>IMPORTANT:</b> This method is <em>not</em> part of the public @@ -1741,7 +1758,11 @@ void fillRectangleInPixels(int x, int y, int width, int height) { height = -height; } long /*int*/ cairo = data.cairo; - Cairo.cairo_rectangle(cairo, x, y, width, height); + if (data.regionSet != 0) { + cairoClipRegion(cairo); + } else { + Cairo.cairo_rectangle(cairo, x, y, width, height); + } Cairo.cairo_fill(cairo); } |