aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Tatham <anakin@pobox.com>2005-06-23 08:24:52 +0000
committerSimon Tatham <anakin@pobox.com>2005-06-23 08:24:52 +0000
commitb909204392c9567564ee048eeea3b529420e1c86 (patch)
tree2406345ce655d74e12d16b3de3cba88c327a54d8
parent973ced1c7cfced5cb825841365058290821e81d2 (diff)
downloadpuzzles-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.c9
-rw-r--r--osx.m20
-rw-r--r--puzzles.h2
-rw-r--r--windows.c18
4 files changed, 49 insertions, 0 deletions
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)
{