added storing image identifier in internal gadget structure
authorHolger Schemel <info@artsoft.org>
Fri, 8 Jun 2018 21:03:37 +0000 (23:03 +0200)
committerHolger Schemel <info@artsoft.org>
Sun, 17 Jun 2018 22:02:48 +0000 (00:02 +0200)
src/editor.c
src/game.c
src/libgame/gadgets.c
src/libgame/gadgets.h
src/screens.c
src/tape.c
src/tools.c

index fba668d1ccc2eded15fc8841fe96f0f184f92af9..9fa2a9090fc33382127a12f3796ad3feae55efda 100644 (file)
@@ -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,
index 78a371e33896c5b7fd2af2d322f1b28792855935..96fa321fb09a10f26898014f98dfd79846f3a7fa 100644 (file)
@@ -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),
index a797c75475a1a9b41bf9f6cb2e25a79a67f5f406..cba655f874a89a29d9c31d0001c5a75506ef9088 100644 (file)
@@ -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;
index 2fcc82f0fe148d99f03ed3c0dc59a3948586979c..0fec5b689b1eafd4a2cc5cc126dbf06d410659ae 100644 (file)
 
 /* 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 */
index d83904169dabfbbc70e8b3339c49c64afd847f63..89b9d3d48c515478dc2894924fd96ef9de463004 100644 (file)
@@ -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,
index fa73f3f99c64b43c55421faba707a68cdc5caa82..f75bc897e6f4579f1908050253b3ce1c0c2c3f01 100644 (file)
@@ -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,
index 9e06ab4ad18d4b9b70ac3162f9d48562693cf939..24fecfb31d478829d2f89bf2e59fa93a93a8e812 100644 (file)
@@ -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,