diff --git a/ChangeLog b/ChangeLog index c29337704a..d9d7954187 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +1998-04-13 Federico Mena Quintero + + * gdk/gdkregion.c (gdk_region_polygon): New function; wrapper for + XPolygonRegion(). + + * gdk/gdk.h: Added prototype for gdk_region_polygon(). + + * gdk/gdktypes.h (GdkFillRule): New enum type of fill rule for polygons. + Mon Apr 13 15:04:26 1998 Michael K. Johnson * gtk/testgtk.c (create_clist): removed duplicate call to diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index c29337704a..d9d7954187 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,12 @@ +1998-04-13 Federico Mena Quintero + + * gdk/gdkregion.c (gdk_region_polygon): New function; wrapper for + XPolygonRegion(). + + * gdk/gdk.h: Added prototype for gdk_region_polygon(). + + * gdk/gdktypes.h (GdkFillRule): New enum type of fill rule for polygons. + Mon Apr 13 15:04:26 1998 Michael K. Johnson * gtk/testgtk.c (create_clist): removed duplicate call to diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index c29337704a..d9d7954187 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,12 @@ +1998-04-13 Federico Mena Quintero + + * gdk/gdkregion.c (gdk_region_polygon): New function; wrapper for + XPolygonRegion(). + + * gdk/gdk.h: Added prototype for gdk_region_polygon(). + + * gdk/gdktypes.h (GdkFillRule): New enum type of fill rule for polygons. + Mon Apr 13 15:04:26 1998 Michael K. Johnson * gtk/testgtk.c (create_clist): removed duplicate call to diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index c29337704a..d9d7954187 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,12 @@ +1998-04-13 Federico Mena Quintero + + * gdk/gdkregion.c (gdk_region_polygon): New function; wrapper for + XPolygonRegion(). + + * gdk/gdk.h: Added prototype for gdk_region_polygon(). + + * gdk/gdktypes.h (GdkFillRule): New enum type of fill rule for polygons. + Mon Apr 13 15:04:26 1998 Michael K. Johnson * gtk/testgtk.c (create_clist): removed duplicate call to diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index c29337704a..d9d7954187 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,12 @@ +1998-04-13 Federico Mena Quintero + + * gdk/gdkregion.c (gdk_region_polygon): New function; wrapper for + XPolygonRegion(). + + * gdk/gdk.h: Added prototype for gdk_region_polygon(). + + * gdk/gdktypes.h (GdkFillRule): New enum type of fill rule for polygons. + Mon Apr 13 15:04:26 1998 Michael K. Johnson * gtk/testgtk.c (create_clist): removed duplicate call to diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index c29337704a..d9d7954187 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,12 @@ +1998-04-13 Federico Mena Quintero + + * gdk/gdkregion.c (gdk_region_polygon): New function; wrapper for + XPolygonRegion(). + + * gdk/gdk.h: Added prototype for gdk_region_polygon(). + + * gdk/gdktypes.h (GdkFillRule): New enum type of fill rule for polygons. + Mon Apr 13 15:04:26 1998 Michael K. Johnson * gtk/testgtk.c (create_clist): removed duplicate call to diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index c29337704a..d9d7954187 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,12 @@ +1998-04-13 Federico Mena Quintero + + * gdk/gdkregion.c (gdk_region_polygon): New function; wrapper for + XPolygonRegion(). + + * gdk/gdk.h: Added prototype for gdk_region_polygon(). + + * gdk/gdktypes.h (GdkFillRule): New enum type of fill rule for polygons. + Mon Apr 13 15:04:26 1998 Michael K. Johnson * gtk/testgtk.c (create_clist): removed duplicate call to diff --git a/gdk/gdk.h b/gdk/gdk.h index a874376947..1cfa3e6082 100644 --- a/gdk/gdk.h +++ b/gdk/gdk.h @@ -771,7 +771,11 @@ gboolean gdk_region_point_in (GdkRegion *region, int x, int y); GdkOverlapType gdk_region_rect_in (GdkRegion *region, - GdkRectangle *rect); + GdkRectangle *rect); + +GdkRegion* gdk_region_polygon (GdkPoint *points, + gint npoints, + GdkFillRule fill_rule); void gdk_region_offset (GdkRegion *region, gint dx, 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, diff --git a/gdk/gdktypes.h b/gdk/gdktypes.h index 6a2860e590..9ff8c1312e 100644 --- a/gdk/gdktypes.h +++ b/gdk/gdktypes.h @@ -239,6 +239,16 @@ typedef enum GDK_OPAQUE_STIPPLED } GdkFill; +/* GC fill rule for polygons + * EvenOddRule + * WindingRule + */ +typedef enum +{ + GDK_EVEN_ODD_RULE, + GDK_WINDING_RULE +} GdkFillRule; + /* GC line styles * Solid: * OnOffDash: diff --git a/gdk/x11/gdkregion-x11.c b/gdk/x11/gdkregion-x11.c index e949b3cadf..6034bbae86 100644 --- a/gdk/x11/gdkregion-x11.c +++ b/gdk/x11/gdkregion-x11.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,