X-Git-Url: http://git.draconx.ca/gitweb/rrace.git/blobdiff_plain/2fe01fae44c88046139ddc51c8521d5962ed9ac7..ca97af514870895e228df0443adc5a16be4d9a78:/src/curses.c diff --git a/src/curses.c b/src/curses.c index cdaf396..f66589e 100644 --- a/src/curses.c +++ b/src/curses.c @@ -115,17 +115,11 @@ static void draw_tile(WINDOW **win, unsigned colour, unsigned selected, static int redraw_tile(WINDOW **win, unsigned x, unsigned y, unsigned start_column, - uint_fast32_t bit0, uint_fast32_t bit1, uint_fast32_t bit2, - unsigned selected) + uint_least32_t *gp, unsigned selected) { - uint_fast32_t pos = board_position(x, y); - unsigned char tile = 0; + unsigned tile = board_tile(gp, 5*y+x); - if (bit0 & pos) tile |= 1; - if (bit1 & pos) tile |= 2; - if (bit2 & pos) tile |= 4; assert(tile < TILE_MAX); - draw_tile(win, tile, selected, x, y, start_column); return tile; } @@ -173,8 +167,7 @@ static void curs_redraw_game(struct app_state *state, uint_fast32_t mask) for (i = 0; i < 25; i++) { if (mask & 1) { redraw_tile(state->gamewin, i%5, i/5, - 4, gp[0], gp[1], gp[2], - i == state->cursor); + 4, gp, i == state->cursor); } mask >>= 1; } @@ -182,7 +175,11 @@ static void curs_redraw_game(struct app_state *state, uint_fast32_t mask) static void curs_redraw_goal(struct app_state *state, uint_fast32_t mask) { - uint_least16_t *gp = state->board.goal; + uint_least32_t gp[3] = { + state->board.goal[0], + state->board.goal[1], + state->board.goal[2] + }; int i, x, y; if (!state->goalwin[PLAYWIN_AREA]) @@ -194,24 +191,31 @@ static void curs_redraw_goal(struct app_state *state, uint_fast32_t mask) for (i = 0; i < 9; i++) { if (mask & 1) { - redraw_tile(state->goalwin, i%3, i/3, - x+2, gp[0], gp[1], gp[2], 0); + redraw_tile(state->goalwin, i%3, i/3, x+2, gp, 0); } mask >>= 1; } } +/* Thin wrapper around wresize which returns ERR if support is unavailable. */ +static int do_wresize(WINDOW *window, int h, int w) +{ +#if HAVE_CURSES_WRESIZE + return wresize(window, h, w); +#endif + return ERR; +} + static WINDOW *realloc_area(WINDOW **orig, int h, int w, int y, int x) { WINDOW *win = *orig; if (win) { -#if HAVE_CURSES_WRESIZE - if (wresize(win, h, w) != ERR) { + if (do_wresize(win, h, w) != ERR) { mvwin(win, y, x); return win; } -#endif + delwin(win); } @@ -228,13 +232,9 @@ static void realloc_tiles(WINDOW **win, int h) if (fill && border) { int old_w, old_h; -#if HAVE_CURSES_WRESIZE - if (wresize(fill, h-2, w-2) != ERR - && wresize(border, h, w) != ERR) - { + if (do_wresize(fill, h-2, w-2) != ERR + && do_wresize(border, h, w) != ERR) return; - } -#endif getmaxyx(border, old_h, old_w); if (old_h == h)