From 550efd7f6e5c9c14af3560fc9231510e43a4fb33 Mon Sep 17 00:00:00 2001 From: simon Date: Thu, 23 Jun 2005 08:24:52 +0000 Subject: [PATCH] Introduce a front-end function to draw circles. git-svn-id: svn://svn.tartarus.org/sgt/puzzles@5991 cda61777-01e9-0310-a592-d414129be87e --- gtk.c | 9 +++++++++ osx.m | 20 ++++++++++++++++++++ puzzles.h | 2 ++ windows.c | 18 ++++++++++++++++++ 4 files changed, 49 insertions(+) diff --git a/gtk.c b/gtk.c index e3bffa5..2cbbde4 100644 --- a/gtk.c +++ b/gtk.c @@ -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; diff --git a/osx.m b/osx.m index 74bd1b2..bc87021 100644 --- a/osx.m +++ b/osx.m @@ -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]; diff --git a/puzzles.h b/puzzles.h index 987bd9b..ed1fef6 100644 --- a/puzzles.h +++ b/puzzles.h @@ -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); diff --git a/windows.c b/windows.c index 7b3ef64..0cf8148 100644 --- a/windows.c +++ b/windows.c @@ -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) { -- 2.11.0