From 29eaa8f55c7b9cc960afa4327a7ce977e6637e9c Mon Sep 17 00:00:00 2001 From: Ben Harris Date: Sun, 30 Jul 2023 17:16:36 +0100 Subject: [PATCH] Flood: don't draw zero-width tile separators Flood's draw_tile() extravagantly uses up to eight rectangles to draw separators around each tile. This could be substantially improved, but a particularly low-hanging optimisation is not do draw them when the separator width is zero. This at least means that Flood completes its initial drawing on my test KaiOS device. --- flood.c | 50 ++++++++++++++++++++++++++------------------------ 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/flood.c b/flood.c index 12bea69..390f98f 100644 --- a/flood.c +++ b/flood.c @@ -1101,31 +1101,33 @@ static void draw_tile(drawing *dr, game_drawstate *ds, colour += COL_1; draw_rect(dr, tx, ty, TILESIZE, TILESIZE, colour); - if (tile & BORDER_L) - draw_rect(dr, tx, ty, - SEP_WIDTH, TILESIZE, COL_SEPARATOR); - if (tile & BORDER_R) - draw_rect(dr, tx + TILESIZE - SEP_WIDTH, ty, - SEP_WIDTH, TILESIZE, COL_SEPARATOR); - if (tile & BORDER_U) - draw_rect(dr, tx, ty, - TILESIZE, SEP_WIDTH, COL_SEPARATOR); - if (tile & BORDER_D) - draw_rect(dr, tx, ty + TILESIZE - SEP_WIDTH, - TILESIZE, SEP_WIDTH, COL_SEPARATOR); + if (SEP_WIDTH > 0) { + if (tile & BORDER_L) + draw_rect(dr, tx, ty, + SEP_WIDTH, TILESIZE, COL_SEPARATOR); + if (tile & BORDER_R) + draw_rect(dr, tx + TILESIZE - SEP_WIDTH, ty, + SEP_WIDTH, TILESIZE, COL_SEPARATOR); + if (tile & BORDER_U) + draw_rect(dr, tx, ty, + TILESIZE, SEP_WIDTH, COL_SEPARATOR); + if (tile & BORDER_D) + draw_rect(dr, tx, ty + TILESIZE - SEP_WIDTH, + TILESIZE, SEP_WIDTH, COL_SEPARATOR); - if (tile & CORNER_UL) - draw_rect(dr, tx, ty, - SEP_WIDTH, SEP_WIDTH, COL_SEPARATOR); - if (tile & CORNER_UR) - draw_rect(dr, tx + TILESIZE - SEP_WIDTH, ty, - SEP_WIDTH, SEP_WIDTH, COL_SEPARATOR); - if (tile & CORNER_DL) - draw_rect(dr, tx, ty + TILESIZE - SEP_WIDTH, - SEP_WIDTH, SEP_WIDTH, COL_SEPARATOR); - if (tile & CORNER_DR) - draw_rect(dr, tx + TILESIZE - SEP_WIDTH, ty + TILESIZE - SEP_WIDTH, - SEP_WIDTH, SEP_WIDTH, COL_SEPARATOR); + if (tile & CORNER_UL) + draw_rect(dr, tx, ty, + SEP_WIDTH, SEP_WIDTH, COL_SEPARATOR); + if (tile & CORNER_UR) + draw_rect(dr, tx + TILESIZE - SEP_WIDTH, ty, + SEP_WIDTH, SEP_WIDTH, COL_SEPARATOR); + if (tile & CORNER_DL) + draw_rect(dr, tx, ty + TILESIZE - SEP_WIDTH, + SEP_WIDTH, SEP_WIDTH, COL_SEPARATOR); + if (tile & CORNER_DR) + draw_rect(dr, tx + TILESIZE - SEP_WIDTH, ty + TILESIZE - SEP_WIDTH, + SEP_WIDTH, SEP_WIDTH, COL_SEPARATOR); + } if (tile & CURSOR) draw_rect_outline(dr, tx + CURSOR_INSET, ty + CURSOR_INSET,