summaryrefslogtreecommitdiff
path: root/gdk/gdkregion.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdk/gdkregion.c')
-rw-r--r--gdk/gdkregion.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/gdk/gdkregion.c b/gdk/gdkregion.c
index e949b3cadf..6034bbae86 100644
--- a/gdk/gdkregion.c
+++ b/gdk/gdkregion.c
@@ -119,6 +119,39 @@ gdk_region_rect_in (GdkRegion *region,
return GDK_OVERLAP_RECTANGLE_OUT; /*what else ? */
}
+GdkRegion *
+gdk_region_polygon (GdkPoint *points,
+ gint npoints,
+ GdkFillRule fill_rule)
+{
+ GdkRegionPrivate *private;
+ GdkRegion *region;
+ Region xregion;
+ int xfill_rule;
+
+ g_return_val_if_fail (points != NULL, NULL);
+ g_return_val_if_fail (npoints != 0, NULL); /* maybe we should check for at least three points */
+
+ switch (fill_rule)
+ {
+ case GDK_EVEN_ODD_RULE:
+ xfill_rule = EvenOddRule;
+ break;
+
+ case GDK_WINDING_RULE:
+ xfill_rule = WindingRule;
+ break;
+ }
+
+ xregion = XPolygonRegion ((XPoint *) points, npoints, xfill_rule);
+ private = g_new (GdkRegionPrivate, 1);
+ private->xregion = xregion;
+ region = (GdkRegion *) private;
+ region->user_data = NULL;
+
+ return region;
+}
+
void
gdk_region_offset (GdkRegion *region,
gint dx,