/* * X11 GUI for slide puzzle game * Copyright © 2022-2023 Nick Bowler * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef RRACE_MOTIF_H_ #define RRACE_MOTIF_H_ #include #include "colour.h" #include "game.h" /* If set, _NET_WM_ICON property will be added/updated to toplevel window. */ #define FLAG_USE_EWMH_ICONS 1u /* If set, the goal will be displayed over the main play area. */ #define FLAG_VIEW_GOAL_ON_GAME 2u /* If set, the Xt timer update process is currently installed. */ #define FLAG_TIMER_RUNNING 4u struct app_state { struct board board; Widget game, goal; struct xcounter *timer; Pixmap icon_pixmap; GC tile_gc; uint_least32_t render_game_mask; uint_least16_t render_goal_mask; uint_least16_t game_tile_sz, goal_tile_sz; uint_least16_t flags; uint_least32_t tile_colour[TILE_MAX-1][3]; }; void ui_initialize(struct app_state *state, Widget shell); void ui_show_about(struct app_state *state, Widget shell); void ui_timer_update(struct app_state *state, int_fast32_t elapsed); void x11_initialize(struct app_state *state, Widget shell); void x11_redraw_icon(struct app_state *state, Widget shell); void x11_redraw_game(struct app_state *state, uint_fast32_t mask); /* * Redraw goal tiles immediately. The mask specifies which tiles will * be redrawn, in the same bit arrangement as the board goal bitmaps. * Tiles corresponding to set bits in mask are redrawn, and tiles * corresponding to clear bits are not redrawn. * * Additionally, if icon_shell is non-null (with the caller passing the * application shell widget), the program's icon pixmap is updated to * match the current goal. */ void x11_redraw_goal(struct app_state *state, uint_fast32_t mask, Widget icon_shell); /* * Mark tiles for redraw. The redraw is not performed immediately, but * rather a background task is installed to perform the redraw at a later * time. * * The mode parameter may be one of the following enumerated values: * * * RENDER_MODE_GAME: mark game tiles for update. * * RENDER_MODE_GOAL: mark goal tiles for update. * * RENDER_MODE_BOTH: mark both game and goal tiles for update (probably * only useful if mask has all bits set). */ void x11_queue_render(struct app_state *state, uint_fast32_t mask, int mode); enum { RENDER_MODE_GOAL = 1, RENDER_MODE_GAME = 2, RENDER_MODE_BOTH = 3 }; #endif