From a21695563e089926d8e859e1ee0f3b077c8a7ed0 Mon Sep 17 00:00:00 2001 From: Holger Schemel Date: Fri, 8 Jun 2018 23:03:37 +0200 Subject: [PATCH] added storing image identifier in internal gadget structure --- src/editor.c | 16 ++++++- src/game.c | 4 +- src/libgame/gadgets.c | 5 +++ src/libgame/gadgets.h | 100 +++++++++++++++++++++--------------------- src/screens.c | 3 ++ src/tape.c | 4 +- src/tools.c | 4 +- 7 files changed, 82 insertions(+), 54 deletions(-) diff --git a/src/editor.c b/src/editor.c index fba668d1..9fa2a909 100644 --- a/src/editor.c +++ b/src/editor.c @@ -6124,6 +6124,7 @@ static void CreateControlButtons() gi = CreateGadget(GDI_CUSTOM_ID, id, GDI_CUSTOM_TYPE_ID, i, + GDI_IMAGE_ID, graphic, GDI_INFO_TEXT, controlbutton_info[i].infotext, GDI_X, x, GDI_Y, y, @@ -6198,6 +6199,7 @@ static void CreateControlButtons() gi = CreateGadget(GDI_CUSTOM_ID, id, GDI_CUSTOM_TYPE_ID, i, + GDI_IMAGE_ID, graphic, GDI_INFO_TEXT, scrollbutton_info[i].infotext, GDI_X, x, GDI_Y, y, @@ -6246,6 +6248,7 @@ static void CreateControlButtons() gi = CreateGadget(GDI_CUSTOM_ID, id, GDI_CUSTOM_TYPE_ID, i, + GDI_IMAGE_ID, graphic, GDI_INFO_TEXT, getElementInfoText(element), GDI_X, x, GDI_Y, y, @@ -6343,6 +6346,7 @@ static void CreateCounterButtons() gi = CreateGadget(GDI_CUSTOM_ID, id, GDI_CUSTOM_TYPE_ID, i, + GDI_IMAGE_ID, graphic, GDI_INFO_TEXT, infotext, GDI_X, x, GDI_Y, y, @@ -6399,6 +6403,7 @@ static void CreateCounterButtons() gi = CreateGadget(GDI_CUSTOM_ID, id, GDI_CUSTOM_TYPE_ID, i, + GDI_IMAGE_ID, graphic, GDI_INFO_TEXT, "enter counter value", GDI_X, x, GDI_Y, y, @@ -6741,6 +6746,7 @@ static void CreateTextbuttonGadgets() gi = CreateGadget(GDI_CUSTOM_ID, id, GDI_CUSTOM_TYPE_ID, i, + GDI_IMAGE_ID, graphic, GDI_INFO_TEXT, infotext, GDI_X, x, GDI_Y, y, @@ -6781,7 +6787,8 @@ static void CreateGraphicbuttonGadgets() int id = graphicbutton_info[i].gadget_id; int x = SX + ED_SETTINGS_X(graphicbutton_info[i].x); int y = SY + ED_SETTINGS_Y(graphicbutton_info[i].y); - struct GraphicInfo *gd = &graphic_info[graphicbutton_info[i].graphic]; + int graphic = graphicbutton_info[i].graphic; + struct GraphicInfo *gd = &graphic_info[graphic]; int gd_x1 = gd->src_x; int gd_y1 = gd->src_y; int gd_x2 = gd->src_x + gd->pressed_xoffset; @@ -6800,6 +6807,7 @@ static void CreateGraphicbuttonGadgets() gi = CreateGadget(GDI_CUSTOM_ID, id, GDI_CUSTOM_TYPE_ID, i, + GDI_IMAGE_ID, graphic, GDI_INFO_TEXT, graphicbutton_info[i].infotext, GDI_X, x, GDI_Y, y, @@ -6906,6 +6914,7 @@ static void CreateScrollbarGadgets() gi = CreateGadget(GDI_CUSTOM_ID, id, GDI_CUSTOM_TYPE_ID, i, + GDI_IMAGE_ID, graphic, GDI_INFO_TEXT, scrollbar_info[i].infotext, GDI_X, scrollbar_pos[i].x, GDI_Y, scrollbar_pos[i].y, @@ -6971,6 +6980,7 @@ static void CreateCheckbuttonGadgets() gi = CreateGadget(GDI_CUSTOM_ID, id, GDI_CUSTOM_TYPE_ID, i, + GDI_IMAGE_ID, graphic, GDI_INFO_TEXT, checkbutton_info[i].infotext, GDI_X, x, GDI_Y, y, @@ -6998,7 +7008,8 @@ static void CreateCheckbuttonGadgets() static void CreateRadiobuttonGadgets() { - struct GraphicInfo *gd = &graphic_info[IMG_EDITOR_RADIOBUTTON]; + int graphic = IMG_EDITOR_RADIOBUTTON; + struct GraphicInfo *gd = &graphic_info[graphic]; int gd_x1 = gd->src_x; int gd_y1 = gd->src_y; int gd_x2 = gd->src_x + gd->pressed_xoffset; @@ -7033,6 +7044,7 @@ static void CreateRadiobuttonGadgets() gi = CreateGadget(GDI_CUSTOM_ID, id, GDI_CUSTOM_TYPE_ID, i, + GDI_IMAGE_ID, graphic, GDI_INFO_TEXT, radiobutton_info[i].infotext, GDI_X, x, GDI_Y, y, diff --git a/src/game.c b/src/game.c index 78a371e3..96fa321f 100644 --- a/src/game.c +++ b/src/game.c @@ -15470,7 +15470,8 @@ void CreateGameButtons() for (i = 0; i < NUM_GAME_BUTTONS; i++) { - struct GraphicInfo *gfx = &graphic_info[gamebutton_info[i].graphic]; + int graphic = gamebutton_info[i].graphic; + struct GraphicInfo *gfx = &graphic_info[graphic]; struct XY *pos = gamebutton_info[i].pos; struct GadgetInfo *gi; int button_type; @@ -15524,6 +15525,7 @@ void CreateGameButtons() } gi = CreateGadget(GDI_CUSTOM_ID, id, + GDI_IMAGE_ID, graphic, GDI_INFO_TEXT, gamebutton_info[i].infotext, GDI_X, base_x + GDI_ACTIVE_POS(pos->x), GDI_Y, base_y + GDI_ACTIVE_POS(pos->y), diff --git a/src/libgame/gadgets.c b/src/libgame/gadgets.c index a797c754..cba655f8 100644 --- a/src/libgame/gadgets.c +++ b/src/libgame/gadgets.c @@ -782,6 +782,10 @@ static void HandleGadgetTags(struct GadgetInfo *gi, int first_tag, va_list ap) { switch(tag) { + case GDI_IMAGE_ID: + gi->image_id = va_arg(ap, int); + break; + case GDI_CUSTOM_ID: gi->custom_id = va_arg(ap, int); break; @@ -1281,6 +1285,7 @@ struct GadgetInfo *CreateGadget(int first_tag, ...) /* always start with reliable default values */ new_gadget->id = getNewGadgetID(); + new_gadget->image_id = -1; new_gadget->callback_info = default_callback_info; new_gadget->callback_action = default_callback_action; new_gadget->active = TRUE; diff --git a/src/libgame/gadgets.h b/src/libgame/gadgets.h index 2fcc82f0..0fec5b68 100644 --- a/src/libgame/gadgets.h +++ b/src/libgame/gadgets.h @@ -62,55 +62,56 @@ /* gadget creation tags */ #define GDI_END 0 -#define GDI_CUSTOM_ID 1 -#define GDI_CUSTOM_TYPE_ID 2 -#define GDI_X 3 -#define GDI_Y 4 -#define GDI_WIDTH 5 -#define GDI_HEIGHT 6 -#define GDI_TYPE 7 -#define GDI_STATE 8 -#define GDI_CHECKED 9 -#define GDI_RADIO_NR 10 -#define GDI_NUMBER_VALUE 11 -#define GDI_NUMBER_MIN 12 -#define GDI_NUMBER_MAX 13 -#define GDI_TEXT_VALUE 14 -#define GDI_TEXT_SIZE 15 -#define GDI_TEXT_FONT 16 -#define GDI_TEXT_FONT_ACTIVE 17 -#define GDI_TEXT_FONT_UNSELECTABLE 18 -#define GDI_SELECTBOX_OPTIONS 19 -#define GDI_SELECTBOX_INDEX 20 -#define GDI_SELECTBOX_CHAR_UNSELECTABLE 21 -#define GDI_DESIGN_UNPRESSED 22 -#define GDI_DESIGN_PRESSED 23 -#define GDI_ALT_DESIGN_UNPRESSED 24 -#define GDI_ALT_DESIGN_PRESSED 25 -#define GDI_BORDER_SIZE 26 -#define GDI_BORDER_SIZE_SELECTBUTTON 27 -#define GDI_DESIGN_WIDTH 28 -#define GDI_DECORATION_DESIGN 29 -#define GDI_DECORATION_POSITION 30 -#define GDI_DECORATION_SIZE 31 -#define GDI_DECORATION_SHIFTING 32 -#define GDI_DECORATION_MASKED 33 -#define GDI_EVENT_MASK 34 -#define GDI_EVENT 35 -#define GDI_CALLBACK_INFO 36 -#define GDI_CALLBACK_ACTION 37 -#define GDI_AREA_SIZE 38 -#define GDI_ITEM_SIZE 39 -#define GDI_SCROLLBAR_ITEMS_MAX 40 -#define GDI_SCROLLBAR_ITEMS_VISIBLE 41 -#define GDI_SCROLLBAR_ITEM_POSITION 42 -#define GDI_WHEEL_AREA_X 43 -#define GDI_WHEEL_AREA_Y 44 -#define GDI_WHEEL_AREA_WIDTH 45 -#define GDI_WHEEL_AREA_HEIGHT 46 -#define GDI_INFO_TEXT 47 -#define GDI_ACTIVE 48 -#define GDI_DIRECT_DRAW 49 +#define GDI_IMAGE_ID 1 +#define GDI_CUSTOM_ID 2 +#define GDI_CUSTOM_TYPE_ID 3 +#define GDI_X 4 +#define GDI_Y 5 +#define GDI_WIDTH 6 +#define GDI_HEIGHT 7 +#define GDI_TYPE 8 +#define GDI_STATE 9 +#define GDI_CHECKED 10 +#define GDI_RADIO_NR 11 +#define GDI_NUMBER_VALUE 12 +#define GDI_NUMBER_MIN 13 +#define GDI_NUMBER_MAX 14 +#define GDI_TEXT_VALUE 15 +#define GDI_TEXT_SIZE 16 +#define GDI_TEXT_FONT 17 +#define GDI_TEXT_FONT_ACTIVE 18 +#define GDI_TEXT_FONT_UNSELECTABLE 19 +#define GDI_SELECTBOX_OPTIONS 20 +#define GDI_SELECTBOX_INDEX 21 +#define GDI_SELECTBOX_CHAR_UNSELECTABLE 22 +#define GDI_DESIGN_UNPRESSED 23 +#define GDI_DESIGN_PRESSED 24 +#define GDI_ALT_DESIGN_UNPRESSED 25 +#define GDI_ALT_DESIGN_PRESSED 26 +#define GDI_BORDER_SIZE 27 +#define GDI_BORDER_SIZE_SELECTBUTTON 28 +#define GDI_DESIGN_WIDTH 29 +#define GDI_DECORATION_DESIGN 30 +#define GDI_DECORATION_POSITION 31 +#define GDI_DECORATION_SIZE 32 +#define GDI_DECORATION_SHIFTING 33 +#define GDI_DECORATION_MASKED 34 +#define GDI_EVENT_MASK 35 +#define GDI_EVENT 36 +#define GDI_CALLBACK_INFO 37 +#define GDI_CALLBACK_ACTION 38 +#define GDI_AREA_SIZE 39 +#define GDI_ITEM_SIZE 40 +#define GDI_SCROLLBAR_ITEMS_MAX 41 +#define GDI_SCROLLBAR_ITEMS_VISIBLE 42 +#define GDI_SCROLLBAR_ITEM_POSITION 43 +#define GDI_WHEEL_AREA_X 44 +#define GDI_WHEEL_AREA_Y 45 +#define GDI_WHEEL_AREA_WIDTH 46 +#define GDI_WHEEL_AREA_HEIGHT 47 +#define GDI_INFO_TEXT 48 +#define GDI_ACTIVE 49 +#define GDI_DIRECT_DRAW 50 /* gadget deactivation hack */ #define GDI_ACTIVE_POS(a) ((a) < 0 ? POS_OFFSCREEN : (a)) @@ -230,6 +231,7 @@ struct GadgetInfo boolean deactivated; /* flag to deactivate gadget */ int id; /* internal gadget identifier */ + int image_id; /* internal gadget image identifier */ int custom_id; /* custom gadget identifier */ int custom_type_id; /* custom gadget type identifier */ char info_text[MAX_INFO_TEXTSIZE + 1];/* short popup info text */ diff --git a/src/screens.c b/src/screens.c index d8390416..89b9d3d4 100644 --- a/src/screens.c +++ b/src/screens.c @@ -8032,6 +8032,7 @@ static void CreateScreenMenubuttons() gi = CreateGadget(GDI_CUSTOM_ID, id, GDI_CUSTOM_TYPE_ID, i, + GDI_IMAGE_ID, gfx_unpressed, GDI_INFO_TEXT, menubutton_info[i].infotext, GDI_X, x, GDI_Y, y, @@ -8099,6 +8100,7 @@ static void CreateScreenScrollbuttons() gi = CreateGadget(GDI_CUSTOM_ID, id, GDI_CUSTOM_TYPE_ID, i, + GDI_IMAGE_ID, gfx_unpressed, GDI_INFO_TEXT, scrollbutton_info[i].infotext, GDI_X, x, GDI_Y, y, @@ -8171,6 +8173,7 @@ static void CreateScreenScrollbars() gi = CreateGadget(GDI_CUSTOM_ID, id, GDI_CUSTOM_TYPE_ID, i, + GDI_IMAGE_ID, gfx_unpressed, GDI_INFO_TEXT, scrollbar_info[i].infotext, GDI_X, x, GDI_Y, y, diff --git a/src/tape.c b/src/tape.c index fa73f3f9..f75bc897 100644 --- a/src/tape.c +++ b/src/tape.c @@ -1311,7 +1311,8 @@ void CreateTapeButtons() for (i = 0; i < NUM_TAPE_BUTTONS; i++) { - struct GraphicInfo *gfx = &graphic_info[tapebutton_info[i].graphic]; + int graphic = tapebutton_info[i].graphic; + struct GraphicInfo *gfx = &graphic_info[graphic]; struct XY *pos = tapebutton_info[i].pos; struct GadgetInfo *gi; int gd_x = gfx->src_x; @@ -1321,6 +1322,7 @@ void CreateTapeButtons() int id = i; gi = CreateGadget(GDI_CUSTOM_ID, id, + GDI_IMAGE_ID, graphic, GDI_INFO_TEXT, tapebutton_info[i].infotext, GDI_X, VX + pos->x, GDI_Y, VY + pos->y, diff --git a/src/tools.c b/src/tools.c index 9e06ab4a..24fecfb3 100644 --- a/src/tools.c +++ b/src/tools.c @@ -5304,7 +5304,8 @@ void CreateToolButtons() for (i = 0; i < NUM_TOOL_BUTTONS; i++) { - struct GraphicInfo *gfx = &graphic_info[toolbutton_info[i].graphic]; + int graphic = toolbutton_info[i].graphic; + struct GraphicInfo *gfx = &graphic_info[graphic]; struct TextPosInfo *pos = toolbutton_info[i].pos; struct GadgetInfo *gi; Bitmap *deco_bitmap = None; @@ -5370,6 +5371,7 @@ void CreateToolButtons() } gi = CreateGadget(GDI_CUSTOM_ID, id, + GDI_IMAGE_ID, graphic, GDI_INFO_TEXT, toolbutton_info[i].infotext, GDI_X, dx + x, GDI_Y, dy + y, -- 2.34.1