added gadget tag to always execute the callback action when leaving gadget
[rocksndiamonds.git] / src / libgame / gadgets.h
index 47de5776bf05761aea91167e1e5acfcac5b70000..5f873747e4033a14aa0b0de8aa5c9e9ff75509cb 100644 (file)
@@ -50,6 +50,7 @@
 #define GD_EVENT_TEXT_LEAVING          (1 << 6)
 #define GD_EVENT_INFO_ENTERING         (1 << 7)
 #define GD_EVENT_INFO_LEAVING          (1 << 8)
+#define GD_EVENT_PIXEL_PRECISE         (1 << 9)
 
 /* gadget button states */
 #define GD_BUTTON_UNPRESSED            0
 
 /* 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_SELECTBOX_OPTIONS          18
-#define GDI_SELECTBOX_INDEX            19
-#define GDI_DESIGN_UNPRESSED           20
-#define GDI_DESIGN_PRESSED             21
-#define GDI_ALT_DESIGN_UNPRESSED       22
-#define GDI_ALT_DESIGN_PRESSED         23
-#define GDI_BORDER_SIZE                        24
-#define GDI_BORDER_SIZE_SELECTBUTTON   25
-#define GDI_DESIGN_WIDTH               26
-#define GDI_DECORATION_DESIGN          27
-#define GDI_DECORATION_POSITION                28
-#define GDI_DECORATION_SIZE            29
-#define GDI_DECORATION_SHIFTING                30
-#define GDI_EVENT_MASK                 31
-#define GDI_EVENT                      32
-#define GDI_CALLBACK_INFO              33
-#define GDI_CALLBACK_ACTION            34
-#define GDI_AREA_SIZE                  35
-#define GDI_ITEM_SIZE                  36
-#define GDI_SCROLLBAR_ITEMS_MAX                37
-#define GDI_SCROLLBAR_ITEMS_VISIBLE    38
-#define GDI_SCROLLBAR_ITEM_POSITION    39
-#define GDI_WHEEL_AREA_X               40
-#define GDI_WHEEL_AREA_Y               41
-#define GDI_WHEEL_AREA_WIDTH           42
-#define GDI_WHEEL_AREA_HEIGHT          43
-#define GDI_INFO_TEXT                  44
-#define GDI_ACTIVE                     45
-#define GDI_DIRECT_DRAW                        46
+#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
+#define GDI_CALLBACK_ACTION_ALWAYS     51
 
 /* gadget deactivation hack */
 #define GDI_ACTIVE_POS(a)              ((a) < 0 ? POS_OFFSCREEN : (a))
@@ -133,12 +139,14 @@ struct GadgetDecoration
   int x, y;                            /* position of deco on the gadget */
   int width, height;                   /* width and height of decoration */
   int xshift, yshift;                  /* deco shifting when gadget pressed */
+  boolean masked;                      /* draw decoration masked over button */
 };
 
 struct GadgetEvent
 {
   unsigned int type;                   /* event type */
   int button;                          /* button number for button events */
+  int mx, my;                          /* raw gadget position at event time */
   int x, y;                            /* gadget position at event time */
   boolean off_borders;                 /* mouse pointer outside gadget? */
   int item_x, item_y, item_position;   /* new item position */
@@ -184,6 +192,7 @@ struct GadgetSelectbox
   struct ValueTextInfo *options;       /* pointer to text/value array */
   int index;                           /* index of actual text string */
   int size;                            /* maximal size of text strings */
+  char char_unselectable;              /* first char of unselectable options */
 
   /* automatically determined values */
   int x, y;                            /* open selectbox position */
@@ -220,7 +229,10 @@ struct GadgetWheelArea
 
 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 */
@@ -233,8 +245,10 @@ struct GadgetInfo
   boolean mapped;                      /* gadget is mapped on the screen */
   boolean active;                      /* gadget is active */
   boolean direct_draw;                 /* directly draw to frontbuffer */
+  boolean callback_action_always;      /* also callback if gadget unchanged */
   int font;                            /* font to use when inactive */
   int font_active;                     /* font to use when active */
+  int font_unselectable;               /* font to use when unselectable */
   struct GadgetBorder border;          /* gadget border design */
   struct GadgetDesign design[2];       /* 0: normal; 1: pressed */
   struct GadgetDesign alt_design[2];   /* alternative design */
@@ -265,18 +279,21 @@ void RedrawGadget(struct GadgetInfo *);
 
 void MapGadget(struct GadgetInfo *);
 void UnmapGadget(struct GadgetInfo *);
-void UnmapAllGadgets();
-void RemapAllGadgets();
+void UnmapAllGadgets(void);
+void RemapAllGadgets(void);
 
-boolean anyTextInputGadgetActive();
-boolean anyTextAreaGadgetActive();
-boolean anySelectboxGadgetActive();
-boolean anyScrollbarGadgetActive();
-boolean anyTextGadgetActive();
+boolean anyTextInputGadgetActive(void);
+boolean anyTextAreaGadgetActive(void);
+boolean anySelectboxGadgetActive(void);
+boolean anyScrollbarGadgetActive(void);
+boolean anyTextGadgetActive(void);
 
 void ClickOnGadget(struct GadgetInfo *, int);
 
 boolean HandleGadgets(int, int, int);
 boolean HandleGadgetsKeyInput(Key);
 
+void DumpGadgetIdentifiers(void);
+boolean DoGadgetAction(int);
+
 #endif /* GADGETS_H */