diff --git a/cube.c b/cube.c index cf5e512..6a867a4 100644 --- a/cube.c +++ b/cube.c @@ -1568,9 +1568,9 @@ static void game_redraw(frontend *fe, game_drawstate *ds, game_state *oldstate, + ds->oy); } - draw_polygon(fe, coords, state->squares[i].npoints, TRUE, - state->squares[i].blue ? COL_BLUE : COL_BACKGROUND); - draw_polygon(fe, coords, state->squares[i].npoints, FALSE, COL_BORDER); + draw_polygon(fe, coords, state->squares[i].npoints, + state->squares[i].blue ? COL_BLUE : COL_BACKGROUND, + COL_BORDER); } /* @@ -1650,9 +1650,9 @@ static void game_redraw(frontend *fe, game_drawstate *ds, game_state *oldstate, continue; } - draw_polygon(fe, coords, poly->order, TRUE, - state->facecolours[i] ? COL_BLUE : COL_BACKGROUND); - draw_polygon(fe, coords, poly->order, FALSE, COL_BORDER); + draw_polygon(fe, coords, poly->order, + state->facecolours[i] ? COL_BLUE : COL_BACKGROUND, + COL_BORDER); } sfree(poly); diff --git a/fifteen.c b/fifteen.c index bd791ea..6f75514 100644 --- a/fifteen.c +++ b/fifteen.c @@ -654,13 +654,11 @@ static void draw_tile(frontend *fe, game_drawstate *ds, game_state *state, coords[3] = y; coords[4] = x; coords[5] = y + TILE_SIZE - 1; - draw_polygon(fe, coords, 3, TRUE, COL_LOWLIGHT); - draw_polygon(fe, coords, 3, FALSE, COL_LOWLIGHT); + draw_polygon(fe, coords, 3, COL_LOWLIGHT, COL_LOWLIGHT); coords[0] = x; coords[1] = y; - draw_polygon(fe, coords, 3, TRUE, COL_HIGHLIGHT); - draw_polygon(fe, coords, 3, FALSE, COL_HIGHLIGHT); + draw_polygon(fe, coords, 3, COL_HIGHLIGHT, COL_HIGHLIGHT); draw_rect(fe, x + HIGHLIGHT_WIDTH, y + HIGHLIGHT_WIDTH, TILE_SIZE - 2*HIGHLIGHT_WIDTH, TILE_SIZE - 2*HIGHLIGHT_WIDTH, @@ -709,13 +707,11 @@ static void game_redraw(frontend *fe, game_drawstate *ds, game_state *oldstate, coords[9] = COORD(state->h) + HIGHLIGHT_WIDTH - 1; coords[6] = coords[8] + TILE_SIZE; coords[7] = coords[9] - TILE_SIZE; - draw_polygon(fe, coords, 5, TRUE, COL_HIGHLIGHT); - draw_polygon(fe, coords, 5, FALSE, COL_HIGHLIGHT); + draw_polygon(fe, coords, 5, COL_HIGHLIGHT, COL_HIGHLIGHT); coords[1] = COORD(0) - HIGHLIGHT_WIDTH; coords[0] = COORD(0) - HIGHLIGHT_WIDTH; - draw_polygon(fe, coords, 5, TRUE, COL_LOWLIGHT); - draw_polygon(fe, coords, 5, FALSE, COL_LOWLIGHT); + draw_polygon(fe, coords, 5, COL_LOWLIGHT, COL_LOWLIGHT); ds->started = TRUE; } diff --git a/flip.c b/flip.c index 9ad3eb2..1d7c4f5 100644 --- a/flip.c +++ b/flip.c @@ -1059,8 +1059,7 @@ static void draw_tile(frontend *fe, game_drawstate *ds, if (animtime < 0.5) colour = COL_WRONG + COL_RIGHT - colour; - draw_polygon(fe, coords, 4, TRUE, colour); - draw_polygon(fe, coords, 4, FALSE, COL_GRID); + draw_polygon(fe, coords, 4, colour, COL_GRID); } /* diff --git a/gtk.c b/gtk.c index ef795a4..1a79f0e 100644 --- a/gtk.c +++ b/gtk.c @@ -348,7 +348,7 @@ 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) + int fillcolour, int outlinecolour) { GdkPoint *points = snewn(npoints, GdkPoint); int i; @@ -358,19 +358,32 @@ void draw_polygon(frontend *fe, int *coords, int npoints, points[i].y = coords[i*2+1]; } - gdk_gc_set_foreground(fe->gc, &fe->colours[colour]); - gdk_draw_polygon(fe->pixmap, fe->gc, fill, points, npoints); + if (fillcolour >= 0) { + gdk_gc_set_foreground(fe->gc, &fe->colours[fillcolour]); + gdk_draw_polygon(fe->pixmap, fe->gc, TRUE, points, npoints); + } + assert(outlinecolour >= 0); + gdk_gc_set_foreground(fe->gc, &fe->colours[outlinecolour]); + gdk_draw_polygon(fe->pixmap, fe->gc, FALSE, points, npoints); sfree(points); } void draw_circle(frontend *fe, int cx, int cy, int radius, - int fill, int colour) + int fillcolour, int outlinecolour) { - 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); + if (fillcolour >= 0) { + gdk_gc_set_foreground(fe->gc, &fe->colours[fillcolour]); + gdk_draw_arc(fe->pixmap, fe->gc, TRUE, + cx - radius, cy - radius, + 2 * radius, 2 * radius, 0, 360 * 64); + } + + assert(outlinecolour >= 0); + gdk_gc_set_foreground(fe->gc, &fe->colours[outlinecolour]); + gdk_draw_arc(fe->pixmap, fe->gc, FALSE, + cx - radius, cy - radius, + 2 * radius, 2 * radius, 0, 360 * 64); } struct blitter { diff --git a/guess.c b/guess.c index 12d8b1b..9b94123 100644 --- a/guess.c +++ b/guess.c @@ -1021,8 +1021,8 @@ static void draw_peg(frontend *fe, game_drawstate *ds, int cx, int cy, draw_rect(fe, cx-CGAP, cy-CGAP, PEGSZ+CGAP*2, PEGSZ+CGAP*2, COL_BACKGROUND); if (PEGRAD > 0) { - draw_circle(fe, cx+PEGRAD, cy+PEGRAD, PEGRAD, 1, COL_EMPTY + col); - draw_circle(fe, cx+PEGRAD, cy+PEGRAD, PEGRAD, 0, COL_EMPTY + col); + draw_circle(fe, cx+PEGRAD, cy+PEGRAD, PEGRAD, + COL_EMPTY + col, COL_EMPTY + col); } else draw_rect(fe, cx, cy, PEGSZ, PEGSZ, COL_EMPTY + col); draw_update(fe, cx-CGAP, cy-CGAP, PEGSZ+CGAP*2, PEGSZ+CGAP*2); @@ -1030,7 +1030,7 @@ static void draw_peg(frontend *fe, game_drawstate *ds, int cx, int cy, static void draw_cursor(frontend *fe, game_drawstate *ds, int x, int y) { - draw_circle(fe, x+PEGRAD, y+PEGRAD, PEGRAD+CGAP, 0, COL_CURSOR); + draw_circle(fe, x+PEGRAD, y+PEGRAD, PEGRAD+CGAP, -1, COL_CURSOR); draw_update(fe, x-CGAP, y-CGAP, PEGSZ+CGAP*2, PEGSZ+CGAP*2); } @@ -1129,8 +1129,7 @@ static void hint_redraw(frontend *fe, game_drawstate *ds, int guess, rowy += HINTOFF; } if (HINTRAD > 0) { - draw_circle(fe, rowx+HINTRAD, rowy+HINTRAD, HINTRAD, 1, col); - draw_circle(fe, rowx+HINTRAD, rowy+HINTRAD, HINTRAD, 0, col); + draw_circle(fe, rowx+HINTRAD, rowy+HINTRAD, HINTRAD, col, col); } else { draw_rect(fe, rowx, rowy, HINTSZ, HINTSZ, col); } diff --git a/mines.c b/mines.c index 6cfb634..7597d07 100644 --- a/mines.c +++ b/mines.c @@ -2751,13 +2751,12 @@ static void draw_tile(frontend *fe, game_drawstate *ds, coords[3] = y; coords[4] = x; coords[5] = y + TILE_SIZE - 1; - draw_polygon(fe, coords, 3, TRUE, COL_LOWLIGHT ^ hl); - draw_polygon(fe, coords, 3, FALSE, COL_LOWLIGHT ^ hl); + draw_polygon(fe, coords, 3, COL_LOWLIGHT ^ hl, COL_LOWLIGHT ^ hl); coords[0] = x; coords[1] = y; - draw_polygon(fe, coords, 3, TRUE, COL_HIGHLIGHT ^ hl); - draw_polygon(fe, coords, 3, FALSE, COL_HIGHLIGHT ^ hl); + draw_polygon(fe, coords, 3, COL_HIGHLIGHT ^ hl, + COL_HIGHLIGHT ^ hl); draw_rect(fe, x + HIGHLIGHT_WIDTH, y + HIGHLIGHT_WIDTH, TILE_SIZE - 2*HIGHLIGHT_WIDTH, TILE_SIZE - 2*HIGHLIGHT_WIDTH, @@ -2778,14 +2777,12 @@ static void draw_tile(frontend *fe, game_drawstate *ds, SETCOORD(3, 0.25, 0.8); SETCOORD(4, 0.55, 0.7); SETCOORD(5, 0.55, 0.35); - draw_polygon(fe, coords, 6, TRUE, COL_FLAGBASE); - draw_polygon(fe, coords, 6, FALSE, COL_FLAGBASE); + draw_polygon(fe, coords, 6, COL_FLAGBASE, COL_FLAGBASE); SETCOORD(0, 0.6, 0.2); SETCOORD(1, 0.6, 0.5); SETCOORD(2, 0.2, 0.35); - draw_polygon(fe, coords, 3, TRUE, COL_FLAG); - draw_polygon(fe, coords, 3, FALSE, COL_FLAG); + draw_polygon(fe, coords, 3, COL_FLAG, COL_FLAG); #undef SETCOORD } else if (v == -3) { @@ -2863,8 +2860,7 @@ static void draw_tile(frontend *fe, game_drawstate *ds, xdy = -tdy; } - draw_polygon(fe, coords, 5*4, TRUE, COL_MINE); - draw_polygon(fe, coords, 5*4, FALSE, COL_MINE); + draw_polygon(fe, coords, 5*4, COL_MINE, COL_MINE); draw_rect(fe, cx-r/3, cy-r/3, r/3, r/4, COL_HIGHLIGHT); } @@ -2929,13 +2925,11 @@ static void game_redraw(frontend *fe, game_drawstate *ds, game_state *oldstate, coords[9] = COORD(state->h) + OUTER_HIGHLIGHT_WIDTH - 1; coords[6] = coords[8] + TILE_SIZE; coords[7] = coords[9] - TILE_SIZE; - draw_polygon(fe, coords, 5, TRUE, COL_HIGHLIGHT); - draw_polygon(fe, coords, 5, FALSE, COL_HIGHLIGHT); + draw_polygon(fe, coords, 5, COL_HIGHLIGHT, COL_HIGHLIGHT); coords[1] = COORD(0) - OUTER_HIGHLIGHT_WIDTH; coords[0] = COORD(0) - OUTER_HIGHLIGHT_WIDTH; - draw_polygon(fe, coords, 5, TRUE, COL_LOWLIGHT); - draw_polygon(fe, coords, 5, FALSE, COL_LOWLIGHT); + draw_polygon(fe, coords, 5, COL_LOWLIGHT, COL_LOWLIGHT); ds->started = TRUE; } @@ -3091,7 +3085,7 @@ void draw_text(frontend *fe, int x, int y, int fonttype, int fontsize, 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) {} + int fillcolour, int outlinecolour) {} void clip(frontend *fe, int x, int y, int w, int h) {} void unclip(frontend *fe) {} void start_draw(frontend *fe) {} diff --git a/net.c b/net.c index 767ef31..2e86700 100644 --- a/net.c +++ b/net.c @@ -2405,8 +2405,7 @@ static void draw_tile(frontend *fe, game_state *state, game_drawstate *ds, points[i+1] = by+(int)(cy+ty); } - draw_polygon(fe, points, 4, TRUE, col); - draw_polygon(fe, points, 4, FALSE, COL_WIRE); + draw_polygon(fe, points, 4, col, COL_WIRE); } /* diff --git a/netslide.c b/netslide.c index 236491a..fe77794 100644 --- a/netslide.c +++ b/netslide.c @@ -1436,8 +1436,7 @@ static void draw_tile(frontend *fe, game_drawstate *ds, game_state *state, points[i+1] = by+(int)(cy+ey); } - draw_polygon(fe, points, 4, TRUE, col); - draw_polygon(fe, points, 4, FALSE, COL_WIRE); + draw_polygon(fe, points, 4, col, COL_WIRE); } /* @@ -1533,8 +1532,7 @@ static void draw_arrow(frontend *fe, game_drawstate *ds, POINT(5, 3 * TILE_SIZE / 8, TILE_SIZE / 2); /* left concave */ POINT(6, TILE_SIZE / 4, TILE_SIZE / 2); /* left corner */ - draw_polygon(fe, coords, 7, TRUE, COL_LOWLIGHT); - draw_polygon(fe, coords, 7, FALSE, COL_TEXT); + draw_polygon(fe, coords, 7, COL_LOWLIGHT, COL_TEXT); } static void game_redraw(frontend *fe, game_drawstate *ds, game_state *oldstate, diff --git a/osx.m b/osx.m index b009cd7..c3f6d1b 100644 --- a/osx.m +++ b/osx.m @@ -1216,16 +1216,13 @@ struct frontend { * Drawing routines called by the midend. */ void draw_polygon(frontend *fe, int *coords, int npoints, - int fill, int colour) + int fillcolour, int outlinecolour) { NSBezierPath *path = [NSBezierPath bezierPath]; int i; [[NSGraphicsContext currentContext] setShouldAntialias:YES]; - assert(colour >= 0 && colour < fe->ncolours); - [fe->colours[colour] set]; - for (i = 0; i < npoints; i++) { NSPoint p = { coords[i*2] + 0.5, coords[i*2+1] + 0.5 }; if (i == 0) @@ -1236,30 +1233,37 @@ void draw_polygon(frontend *fe, int *coords, int npoints, [path closePath]; - if (fill) + if (fillcolour >= 0) { + assert(fillcolour >= 0 && fillcolour < fe->ncolours); + [fe->colours[fillcolour] set]; [path fill]; - else - [path stroke]; + } + + assert(outlinecolour >= 0 && outlinecolour < fe->ncolours); + [fe->colours[outlinecolour] set]; + [path stroke]; } void draw_circle(frontend *fe, int cx, int cy, int radius, - int fill, int colour) + int fillcolour, int outlinecolour) { 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) + if (fillcolour >= 0) { + assert(fillcolour >= 0 && fillcolour < fe->ncolours); + [fe->colours[fillcolour] set]; [path fill]; - else - [path stroke]; + } + + assert(outlinecolour >= 0 && outlinecolour < fe->ncolours); + [fe->colours[outlinecolour] set]; + [path stroke]; } void draw_line(frontend *fe, int x1, int y1, int x2, int y2, int colour) { diff --git a/pattern.c b/pattern.c index b7c5334..7713ffd 100644 --- a/pattern.c +++ b/pattern.c @@ -1215,8 +1215,6 @@ void draw_text(frontend *fe, int x, int y, int fonttype, int fontsize, int align, int colour, char *text) {} 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 clip(frontend *fe, int x, int y, int w, int h) {} void unclip(frontend *fe) {} void start_draw(frontend *fe) {} diff --git a/puzzles.h b/puzzles.h index 2bb90c1..57445ab 100644 --- a/puzzles.h +++ b/puzzles.h @@ -136,9 +136,9 @@ void draw_text(frontend *fe, int x, int y, int fonttype, int fontsize, 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); + int fillcolour, int outlinecolour); void draw_circle(frontend *fe, int cx, int cy, int radius, - int fill, int colour); + int fillcolour, int outlinecolour); void clip(frontend *fe, int x, int y, int w, int h); void unclip(frontend *fe); void start_draw(frontend *fe); diff --git a/samegame.c b/samegame.c index ed516e2..a384c0b 100644 --- a/samegame.c +++ b/samegame.c @@ -883,13 +883,11 @@ static void game_redraw(frontend *fe, game_drawstate *ds, game_state *oldstate, coords[9] = COORD(state->params.h) + HIGHLIGHT_WIDTH - 1 - TILE_GAP; coords[6] = coords[8] + TILE_SIZE; coords[7] = coords[9] - TILE_SIZE; - draw_polygon(fe, coords, 5, TRUE, COL_HIGHLIGHT); - draw_polygon(fe, coords, 5, FALSE, COL_HIGHLIGHT); + draw_polygon(fe, coords, 5, COL_HIGHLIGHT, COL_HIGHLIGHT); coords[1] = COORD(0) - HIGHLIGHT_WIDTH; coords[0] = COORD(0) - HIGHLIGHT_WIDTH; - draw_polygon(fe, coords, 5, TRUE, COL_LOWLIGHT); - draw_polygon(fe, coords, 5, FALSE, COL_LOWLIGHT); + draw_polygon(fe, coords, 5, COL_LOWLIGHT, COL_LOWLIGHT); ds->started = 1; } diff --git a/sixteen.c b/sixteen.c index 1b6107c..72585c1 100644 --- a/sixteen.c +++ b/sixteen.c @@ -778,13 +778,11 @@ static void draw_tile(frontend *fe, game_drawstate *ds, coords[3] = y; coords[4] = x; coords[5] = y + TILE_SIZE - 1; - draw_polygon(fe, coords, 3, TRUE, COL_LOWLIGHT); - draw_polygon(fe, coords, 3, FALSE, COL_LOWLIGHT); + draw_polygon(fe, coords, 3, COL_LOWLIGHT, COL_LOWLIGHT); coords[0] = x; coords[1] = y; - draw_polygon(fe, coords, 3, TRUE, COL_HIGHLIGHT); - draw_polygon(fe, coords, 3, FALSE, COL_HIGHLIGHT); + draw_polygon(fe, coords, 3, COL_HIGHLIGHT, COL_HIGHLIGHT); draw_rect(fe, x + HIGHLIGHT_WIDTH, y + HIGHLIGHT_WIDTH, TILE_SIZE - 2*HIGHLIGHT_WIDTH, TILE_SIZE - 2*HIGHLIGHT_WIDTH, @@ -816,8 +814,7 @@ static void draw_arrow(frontend *fe, game_drawstate *ds, POINT(5, 3 * TILE_SIZE / 8, TILE_SIZE / 2); /* left concave */ POINT(6, TILE_SIZE / 4, TILE_SIZE / 2); /* left corner */ - draw_polygon(fe, coords, 7, TRUE, COL_LOWLIGHT); - draw_polygon(fe, coords, 7, FALSE, COL_TEXT); + draw_polygon(fe, coords, 7, COL_LOWLIGHT, COL_TEXT); } static void game_redraw(frontend *fe, game_drawstate *ds, game_state *oldstate, @@ -855,13 +852,11 @@ static void game_redraw(frontend *fe, game_drawstate *ds, game_state *oldstate, coords[9] = COORD(state->h) + HIGHLIGHT_WIDTH - 1; coords[6] = coords[8] + TILE_SIZE; coords[7] = coords[9] - TILE_SIZE; - draw_polygon(fe, coords, 5, TRUE, COL_HIGHLIGHT); - draw_polygon(fe, coords, 5, FALSE, COL_HIGHLIGHT); + draw_polygon(fe, coords, 5, COL_HIGHLIGHT, COL_HIGHLIGHT); coords[1] = COORD(0) - HIGHLIGHT_WIDTH; coords[0] = COORD(0) - HIGHLIGHT_WIDTH; - draw_polygon(fe, coords, 5, TRUE, COL_LOWLIGHT); - draw_polygon(fe, coords, 5, FALSE, COL_LOWLIGHT); + draw_polygon(fe, coords, 5, COL_LOWLIGHT, COL_LOWLIGHT); /* * Arrows for making moves. diff --git a/solo.c b/solo.c index b9510e2..cfbb869 100644 --- a/solo.c +++ b/solo.c @@ -2215,7 +2215,7 @@ static void draw_number(frontend *fe, game_drawstate *ds, game_state *state, coords[3] = cy; coords[4] = cx; coords[5] = cy+ch/2; - draw_polygon(fe, coords, 3, TRUE, COL_HIGHLIGHT); + draw_polygon(fe, coords, 3, COL_HIGHLIGHT, COL_HIGHLIGHT); } /* new number needs drawing? */ @@ -2438,7 +2438,7 @@ void draw_text(frontend *fe, int x, int y, int fonttype, int fontsize, 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) {} + int fillcolour, int outlinecolour) {} void clip(frontend *fe, int x, int y, int w, int h) {} void unclip(frontend *fe) {} void start_draw(frontend *fe) {} diff --git a/twiddle.c b/twiddle.c index fc12411..92f5db3 100644 --- a/twiddle.c +++ b/twiddle.c @@ -880,29 +880,29 @@ static void draw_tile(frontend *fe, game_drawstate *ds, game_state *state, coords[2] = x + TILE_SIZE - 1; coords[3] = y; rotate(coords+2, rot); - draw_polygon(fe, coords, 3, TRUE, rot ? rot->rc : COL_LOWLIGHT); - draw_polygon(fe, coords, 3, FALSE, rot ? rot->rc : COL_LOWLIGHT); + draw_polygon(fe, coords, 3, rot ? rot->rc : COL_LOWLIGHT, + rot ? rot->rc : COL_LOWLIGHT); /* Bottom side. */ coords[2] = x; coords[3] = y + TILE_SIZE - 1; rotate(coords+2, rot); - draw_polygon(fe, coords, 3, TRUE, rot ? rot->bc : COL_LOWLIGHT); - draw_polygon(fe, coords, 3, FALSE, rot ? rot->bc : COL_LOWLIGHT); + draw_polygon(fe, coords, 3, rot ? rot->bc : COL_LOWLIGHT, + rot ? rot->bc : COL_LOWLIGHT); /* Left side. */ coords[0] = x; coords[1] = y; rotate(coords+0, rot); - draw_polygon(fe, coords, 3, TRUE, rot ? rot->lc : COL_HIGHLIGHT); - draw_polygon(fe, coords, 3, FALSE, rot ? rot->lc : COL_HIGHLIGHT); + draw_polygon(fe, coords, 3, rot ? rot->lc : COL_HIGHLIGHT, + rot ? rot->lc : COL_HIGHLIGHT); /* Top side. */ coords[2] = x + TILE_SIZE - 1; coords[3] = y; rotate(coords+2, rot); - draw_polygon(fe, coords, 3, TRUE, rot ? rot->tc : COL_HIGHLIGHT); - draw_polygon(fe, coords, 3, FALSE, rot ? rot->tc : COL_HIGHLIGHT); + draw_polygon(fe, coords, 3, rot ? rot->tc : COL_HIGHLIGHT, + rot ? rot->tc : COL_HIGHLIGHT); /* * Now the main blank area in the centre of the tile. @@ -920,8 +920,7 @@ static void draw_tile(frontend *fe, game_drawstate *ds, game_state *state, coords[6] = x + TILE_SIZE - 1 - HIGHLIGHT_WIDTH; coords[7] = y + HIGHLIGHT_WIDTH; rotate(coords+6, rot); - draw_polygon(fe, coords, 4, TRUE, flash_colour); - draw_polygon(fe, coords, 4, FALSE, flash_colour); + draw_polygon(fe, coords, 4, flash_colour, flash_colour); } else { draw_rect(fe, x + HIGHLIGHT_WIDTH, y + HIGHLIGHT_WIDTH, TILE_SIZE - 2*HIGHLIGHT_WIDTH, TILE_SIZE - 2*HIGHLIGHT_WIDTH, @@ -967,8 +966,7 @@ static void draw_tile(frontend *fe, game_drawstate *ds, game_state *state, coords[4] = cx - displ * ydx; coords[5] = cy - displ * ydy; rotate(coords+4, rot); - draw_polygon(fe, coords, 3, TRUE, COL_LOWLIGHT_GENTLE); - draw_polygon(fe, coords, 3, FALSE, COL_LOWLIGHT_GENTLE); + draw_polygon(fe, coords, 3, COL_LOWLIGHT_GENTLE, COL_LOWLIGHT_GENTLE); } coords[0] = x + TILE_SIZE/2; @@ -1082,13 +1080,11 @@ static void game_redraw(frontend *fe, game_drawstate *ds, game_state *oldstate, coords[9] = COORD(state->h) + HIGHLIGHT_WIDTH - 1; coords[6] = coords[8] + TILE_SIZE; coords[7] = coords[9] - TILE_SIZE; - draw_polygon(fe, coords, 5, TRUE, COL_HIGHLIGHT); - draw_polygon(fe, coords, 5, FALSE, COL_HIGHLIGHT); + draw_polygon(fe, coords, 5, COL_HIGHLIGHT, COL_HIGHLIGHT); coords[1] = COORD(0) - HIGHLIGHT_WIDTH; coords[0] = COORD(0) - HIGHLIGHT_WIDTH; - draw_polygon(fe, coords, 5, TRUE, COL_LOWLIGHT); - draw_polygon(fe, coords, 5, FALSE, COL_LOWLIGHT); + draw_polygon(fe, coords, 5, COL_LOWLIGHT, COL_LOWLIGHT); ds->started = TRUE; } diff --git a/windows.c b/windows.c index df3de01..57673e1 100644 --- a/windows.c +++ b/windows.c @@ -333,26 +333,28 @@ void draw_line(frontend *fe, int x1, int y1, int x2, int y2, int colour) } void draw_circle(frontend *fe, int cx, int cy, int radius, - int fill, int colour) + int fillcolour, int outlinecolour) { - if (fill) { - HBRUSH oldbrush = SelectObject(fe->hdc_bm, fe->brushes[colour]); - HPEN oldpen = SelectObject(fe->hdc_bm, fe->pens[colour]); + assert(outlinecolour >= 0); + + if (fillcolour >= 0) { + HBRUSH oldbrush = SelectObject(fe->hdc_bm, fe->brushes[fillcolour]); + HPEN oldpen = SelectObject(fe->hdc_bm, fe->pens[outlinecolour]); 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]); - Arc(fe->hdc_bm, cx - radius, cy - radius, - cx + radius + 1, cy + radius + 1, - cx - radius, cy, cx - radius, cy); + HPEN oldpen = SelectObject(fe->hdc_bm, fe->pens[outlinecolour]); + Arc(fe->hdc_bm, cx - radius, cy - radius, + cx + radius + 1, cy + radius + 1, + cx - radius, cy, cx - radius, cy); SelectObject(fe->hdc_bm, oldpen); } } void draw_polygon(frontend *fe, int *coords, int npoints, - int fill, int colour) + int fillcolour, int outlinecolour) { POINT *pts = snewn(npoints+1, POINT); int i; @@ -363,14 +365,16 @@ void draw_polygon(frontend *fe, int *coords, int npoints, pts[i].y = coords[j*2+1]; } - if (fill) { - HBRUSH oldbrush = SelectObject(fe->hdc_bm, fe->brushes[colour]); - HPEN oldpen = SelectObject(fe->hdc_bm, fe->pens[colour]); + assert(outlinecolour >= 0); + + if (fillcolour >= 0) { + HBRUSH oldbrush = SelectObject(fe->hdc_bm, fe->brushes[fillcolour]); + HPEN oldpen = SelectObject(fe->hdc_bm, fe->pens[outlinecolour]); Polygon(fe->hdc_bm, pts, npoints); SelectObject(fe->hdc_bm, oldbrush); SelectObject(fe->hdc_bm, oldpen); } else { - HPEN oldpen = SelectObject(fe->hdc_bm, fe->pens[colour]); + HPEN oldpen = SelectObject(fe->hdc_bm, fe->pens[outlinecolour]); Polyline(fe->hdc_bm, pts, npoints+1); SelectObject(fe->hdc_bm, oldpen); }