summaryrefslogtreecommitdiff
path: root/gdk/gdkdraw.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdk/gdkdraw.c')
-rw-r--r--gdk/gdkdraw.c54
1 files changed, 47 insertions, 7 deletions
diff --git a/gdk/gdkdraw.c b/gdk/gdkdraw.c
index de23f6c4f5..3d39d3faac 100644
--- a/gdk/gdkdraw.c
+++ b/gdk/gdkdraw.c
@@ -142,6 +142,9 @@ gdk_draw_polygon (GdkDrawable *drawable,
{
GdkWindowPrivate *drawable_private;
GdkGCPrivate *gc_private;
+ GdkPoint *local_points = points;
+ gint local_npoints = npoints;
+ gint local_alloc = 0;
g_return_if_fail (drawable != NULL);
g_return_if_fail (gc != NULL);
@@ -158,14 +161,24 @@ gdk_draw_polygon (GdkDrawable *drawable,
}
else
{
- XDrawLines (drawable_private->xdisplay, drawable_private->xwindow,
- gc_private->xgc, (XPoint*) points, npoints, CoordModeOrigin);
-
if ((points[0].x != points[npoints-1].x) ||
- (points[0].y != points[npoints-1].y))
- XDrawLine (drawable_private->xdisplay, drawable_private->xwindow,
- gc_private->xgc, points[npoints-1].x, points[npoints-1].y,
- points[0].x, points[0].y);
+ (points[0].y != points[npoints-1].y))
+ {
+ local_alloc = 1;
+ ++local_npoints;
+ local_points = (GdkPoint*) g_malloc (local_npoints * sizeof(GdkPoint));
+ memcpy (local_points, points, npoints * sizeof(GdkPoint));
+ local_points[npoints].x = points[0].x;
+ local_points[npoints].y = points[0].y;
+ }
+
+ XDrawLines (drawable_private->xdisplay, drawable_private->xwindow,
+ gc_private->xgc,
+ (XPoint*) local_points, local_npoints,
+ CoordModeOrigin);
+
+ if (local_alloc)
+ g_free (local_points);
}
}
@@ -401,3 +414,30 @@ gdk_draw_segments (GdkDrawable *drawable,
(XSegment *) segs,
nsegs);
}
+
+void
+gdk_draw_lines (GdkDrawable *drawable,
+ GdkGC *gc,
+ GdkPoint *points,
+ gint npoints)
+{
+ GdkWindowPrivate *drawable_private;
+ GdkGCPrivate *gc_private;
+
+ if (npoints <= 0)
+ return;
+
+ g_return_if_fail (drawable != NULL);
+ g_return_if_fail (points != NULL);
+ g_return_if_fail (gc != NULL);
+
+ drawable_private = (GdkWindowPrivate*) drawable;
+ gc_private = (GdkGCPrivate*) gc;
+
+ XDrawLines (drawable_private->xdisplay,
+ drawable_private->xwindow,
+ gc_private->xgc,
+ (XPoint *) points,
+ npoints,
+ CoordModeOrigin);
+}