aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--samegame.c33
1 files changed, 20 insertions, 13 deletions
diff --git a/samegame.c b/samegame.c
index 5638c07..33e99c2 100644
--- a/samegame.c
+++ b/samegame.c
@@ -1471,6 +1471,7 @@ static void tile_redraw(drawing *dr, game_drawstate *ds,
int tile, int bgcolour)
{
int outer = bgcolour, inner = outer, col = tile & TILE_COLMASK;
+ int tile_w, tile_h, outer_w, outer_h;
if (col) {
if (tile & TILE_IMPOSSIBLE) {
@@ -1483,19 +1484,25 @@ static void tile_redraw(drawing *dr, game_drawstate *ds,
outer = inner = col;
}
}
- draw_rect(dr, COORD(x), COORD(y), TILE_INNER, TILE_INNER, outer);
- draw_rect(dr, COORD(x)+TILE_INNER/4, COORD(y)+TILE_INNER/4,
- TILE_INNER/2, TILE_INNER/2, inner);
-
- if (dright)
- draw_rect(dr, COORD(x)+TILE_INNER, COORD(y), TILE_GAP, TILE_INNER,
- (tile & TILE_JOINRIGHT) ? outer : bgcolour);
- if (dbelow)
- draw_rect(dr, COORD(x), COORD(y)+TILE_INNER, TILE_INNER, TILE_GAP,
- (tile & TILE_JOINDOWN) ? outer : bgcolour);
- if (dright && dbelow)
- draw_rect(dr, COORD(x)+TILE_INNER, COORD(y)+TILE_INNER, TILE_GAP, TILE_GAP,
- (tile & TILE_JOINDIAG) ? outer : bgcolour);
+ tile_w = dright ? TILE_SIZE : TILE_INNER;
+ tile_h = dbelow ? TILE_SIZE : TILE_INNER;
+ outer_w = (tile & TILE_JOINRIGHT) ? tile_w : TILE_INNER;
+ outer_h = (tile & TILE_JOINDOWN) ? tile_h : TILE_INNER;
+ /* Draw the background if any of it will be visible. */
+ if (outer_w != tile_w || outer_h != tile_h || outer == bgcolour)
+ draw_rect(dr, COORD(x), COORD(y), tile_w, tile_h, bgcolour);
+ /* Draw the piece. */
+ if (outer != bgcolour)
+ draw_rect(dr, COORD(x), COORD(y), outer_w, outer_h, outer);
+ if (inner != outer)
+ draw_rect(dr, COORD(x)+TILE_INNER/4, COORD(y)+TILE_INNER/4,
+ TILE_INNER/2, TILE_INNER/2, inner);
+ /* Reset bottom-right corner if necessary. */
+ if ((tile & (TILE_JOINRIGHT | TILE_JOINDOWN | TILE_JOINDIAG)) ==
+ (TILE_JOINRIGHT | TILE_JOINDOWN) && outer != bgcolour &&
+ TILE_GAP != 0)
+ draw_rect(dr, COORD(x)+TILE_INNER, COORD(y)+TILE_INNER,
+ TILE_GAP, TILE_GAP, bgcolour);
if (tile & TILE_HASSEL) {
int sx = COORD(x)+2, sy = COORD(y)+2, ssz = TILE_INNER-5;