diff options
| author | Simon Tatham <anakin@pobox.com> | 2023-05-07 21:41:50 +0100 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2023-05-07 21:41:50 +0100 |
| commit | 8237b02be4e6f92a9e1aebbed23d7b5de0e3543c (patch) | |
| tree | ffed3cd000abc76439b5fe726c6a5f2e16b285c5 /loopy.c | |
| parent | d0f97926e80482d9cbb3679165a09ca6e695f83f (diff) | |
| download | puzzles-8237b02be4e6f92a9e1aebbed23d7b5de0e3543c.zip puzzles-8237b02be4e6f92a9e1aebbed23d7b5de0e3543c.tar.gz puzzles-8237b02be4e6f92a9e1aebbed23d7b5de0e3543c.tar.bz2 puzzles-8237b02be4e6f92a9e1aebbed23d7b5de0e3543c.tar.xz | |
Loopy: fix redraw issue due to enlarged dots.
dot_bbox() wasn't taking into account the new size of the dots, so
sometimes a rectangle of the grid would be redrawn without a partial
dot it should have contained, because nothing had noticed that that
dot overlapped that rectangle.
Actually I'm not sure why this bug wasn't happening _before_ I
enlarged the dots, because the previous code seemed to think dots had
a fixed size in pixels regardless of tile size, which wasn't even
true _before_ my recent commit 4de9836bc8c36cd. Perhaps it did occur,
just never while I was watching.
Diffstat (limited to 'loopy.c')
| -rw-r--r-- | loopy.c | 14 |
1 files changed, 10 insertions, 4 deletions
@@ -3317,13 +3317,19 @@ static void dot_bbox(game_drawstate *ds, grid *g, grid_dot *d, int *x, int *y, int *w, int *h) { int x1, y1; + int xmin, xmax, ymin, ymax; grid_to_screen(ds, g, d->x, d->y, &x1, &y1); - *x = x1 - 2; - *y = y1 - 2; - *w = 5; - *h = 5; + xmin = x1 - (ds->tilesize * 5 + 63) / 64; + xmax = x1 + (ds->tilesize * 5 + 63) / 64; + ymin = y1 - (ds->tilesize * 5 + 63) / 64; + ymax = y1 + (ds->tilesize * 5 + 63) / 64; + + *x = xmin; + *y = ymin; + *w = xmax - xmin + 1; + *h = ymax - ymin + 1; } static const int loopy_line_redraw_phases[] = { |