]> git.draconx.ca Git - rrace.git/commitdiff
x11: Avoid unneeded border clears.
authorNick Bowler <nbowler@draconx.ca>
Wed, 4 Jan 2023 04:19:10 +0000 (23:19 -0500)
committerNick Bowler <nbowler@draconx.ca>
Sat, 7 Jan 2023 16:43:13 +0000 (11:43 -0500)
In commit 1ad1b0dcce2a ("motif: simplify border_clear implementation.")
we went slightly too far and actually removed all checks of the tile
mask value, so the border clear calls are done on every draw (only
during the blank border win state).

This kind of defeats the point of the expose handler excluding the blank
border tiles when calculating the mask that is passed in, and means the
rationale that the code being removed did literally nothing was not quite
accurate.

So, we still don't need the fancy computations, but we should check that
the provided mask says to redraw any part of the border before doing it.

src/x11.c

index 0326db95049afc12827bcf656e95053a982a5353..c8ef3353d8be28c04b2a26a5f75d61ff448d5422 100644 (file)
--- a/src/x11.c
+++ b/src/x11.c
@@ -290,9 +290,11 @@ void x11_redraw_game(struct app_state *state, uint_fast32_t mask)
        }
 
        /* Optimize the game end case where the outer frame is cleared */
-       if (((gp[0] | gp[1] | gp[2]) & ~GOAL_MASK) == 0) {
-               clear_border(display, game, sz);
-               mask &= GOAL_MASK;
+       if (mask & GAME_MASK & ~GOAL_MASK) {
+               if (((gp[0] | gp[1] | gp[2]) & ~GOAL_MASK) == 0) {
+                       clear_border(display, game, sz);
+                       mask &= GOAL_MASK;
+               }
        }
 
        for (i = 0; i < 25; i++) {