diff options
| author | Simon Tatham <anakin@pobox.com> | 2005-06-23 08:24:52 +0000 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2005-06-23 08:24:52 +0000 |
| commit | b909204392c9567564ee048eeea3b529420e1c86 (patch) | |
| tree | 2406345ce655d74e12d16b3de3cba88c327a54d8 | |
| parent | 973ced1c7cfced5cb825841365058290821e81d2 (diff) | |
| download | puzzles-b909204392c9567564ee048eeea3b529420e1c86.zip puzzles-b909204392c9567564ee048eeea3b529420e1c86.tar.gz puzzles-b909204392c9567564ee048eeea3b529420e1c86.tar.bz2 puzzles-b909204392c9567564ee048eeea3b529420e1c86.tar.xz | |
Introduce a front-end function to draw circles.
[originally from svn r5991]
| -rw-r--r-- | gtk.c | 9 | ||||
| -rw-r--r-- | osx.m | 20 | ||||
| -rw-r--r-- | puzzles.h | 2 | ||||
| -rw-r--r-- | windows.c | 18 |
4 files changed, 49 insertions, 0 deletions
@@ -334,6 +334,15 @@ void draw_polygon(frontend *fe, int *coords, int npoints, sfree(points); } +void draw_circle(frontend *fe, int cx, int cy, int radius, + int fill, int colour) +{ + gdk_gc_set_foreground(fe->gc, &fe->colours[colour]); + gdk_draw_arc(fe->pixmap, fe->gc, fill, + cx - radius, cy - radius, + 2 * radius, 2 * radius, 0, 360 * 64); +} + struct blitter { GdkPixmap *pixmap; int w, h, x, y; @@ -1172,6 +1172,26 @@ void draw_polygon(frontend *fe, int *coords, int npoints, else [path stroke]; } +void draw_circle(frontend *fe, int cx, int cy, int radius, + int fill, int colour) +{ + NSBezierPath *path = [NSBezierPath bezierPath]; + + [[NSGraphicsContext currentContext] setShouldAntialias:YES]; + + assert(colour >= 0 && colour < fe->ncolours); + [fe->colours[colour] set]; + + [path appendBezierPathWithArcWithCenter:NSMakePoint(cx + 0.5, cy + 0.5) + radius:radius startAngle:0.0 endAngle:360.0]; + + [path closePath]; + + if (fill) + [path fill]; + else + [path stroke]; +} void draw_line(frontend *fe, int x1, int y1, int x2, int y2, int colour) { NSBezierPath *path = [NSBezierPath bezierPath]; @@ -137,6 +137,8 @@ void draw_rect(frontend *fe, int x, int y, int w, int h, int colour); void draw_line(frontend *fe, int x1, int y1, int x2, int y2, int colour); void draw_polygon(frontend *fe, int *coords, int npoints, int fill, int colour); +void draw_circle(frontend *fe, int cx, int cy, int radius, + int fill, int colour); void clip(frontend *fe, int x, int y, int w, int h); void unclip(frontend *fe); void start_draw(frontend *fe); @@ -330,6 +330,24 @@ void draw_line(frontend *fe, int x1, int y1, int x2, int y2, int colour) SelectObject(fe->hdc_bm, oldpen); } +void draw_circle(frontend *fe, int cx, int cy, int radius, + int fill, int colour) +{ + if (fill) { + HBRUSH oldbrush = SelectObject(fe->hdc_bm, fe->brushes[colour]); + HPEN oldpen = SelectObject(fe->hdc_bm, fe->pens[colour]); + Ellipse(fe->hdc_bm, cx - radius, cy - radius, + cx + radius + 1, cy + radius + 1); + SelectObject(fe->hdc_bm, oldbrush); + SelectObject(fe->hdc_bm, oldpen); + } else { + HPEN oldpen = SelectObject(fe->hdc_bm, fe->pens[colour]); + MoveToEx(fe->hdc_bm, cx + radius, cy, NULL); + AngleArc(fe->hdc_bm, cx, cy, radius, 0.0F, 360.0F); + SelectObject(fe->hdc_bm, oldpen); + } +} + void draw_polygon(frontend *fe, int *coords, int npoints, int fill, int colour) { |