added option for 'masked' element graphics on properties buttons
[rocksndiamonds.git] / src / libgame / gadgets.h
index a12718132782edfe51ab5f4614907382bef07be4..6482e44e3c6e19054b7e6ea89d16421ad5e00f2e 100644 (file)
@@ -1,15 +1,13 @@
-/***********************************************************
-* Artsoft Retro-Game Library                               *
-*----------------------------------------------------------*
-* (c) 1994-2002 Artsoft Entertainment                      *
-*               Holger Schemel                             *
-*               Detmolder Strasse 189                      *
-*               33604 Bielefeld                            *
-*               Germany                                    *
-*               e-mail: info@artsoft.org                   *
-*----------------------------------------------------------*
-* gadgets.h                                                *
-***********************************************************/
+// ============================================================================
+// Artsoft Retro-Game Library
+// ----------------------------------------------------------------------------
+// (c) 1995-2014 by Artsoft Entertainment
+//                         Holger Schemel
+//                 info@artsoft.org
+//                 http://www.artsoft.org/
+// ----------------------------------------------------------------------------
+// gadgets.h
+// ============================================================================
 
 #ifndef GADGETS_H
 #define GADGETS_H
 #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_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
+
+/* gadget deactivation hack */
+#define GDI_ACTIVE_POS(a)              ((a) < 0 ? POS_OFFSCREEN : (a))
+
 
 typedef void (*gadget_function)(void *);
 
@@ -131,11 +136,12 @@ 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 long type;                  /* event type */
+  unsigned int type;                   /* event type */
   int button;                          /* button number for button events */
   int x, y;                            /* gadget position at event time */
   boolean off_borders;                 /* mouse pointer outside gadget? */
@@ -150,14 +156,14 @@ struct GadgetDrawingArea
 
 struct GadgetTextButton
 {
-  char value[MAX_GADGET_TEXTSIZE];     /* text written on the button */
+  char value[MAX_GADGET_TEXTSIZE + 1]; /* text written on the button */
   int size;                            /* maximal size of button text */
 };
 
 struct GadgetTextInput
 {
-  char value[MAX_GADGET_TEXTSIZE];     /* text string in input field */
-  char last_value[MAX_GADGET_TEXTSIZE];        /* last text string in input field */
+  char value[MAX_GADGET_TEXTSIZE + 1]; /* text string in input field */
+  char last_value[MAX_GADGET_TEXTSIZE + 1];/* last text string in input field */
   int cursor_position;                 /* actual text cursor position */
   int number_value;                    /* integer value, if numeric */
   int number_min;                      /* minimal allowed numeric value */
@@ -167,8 +173,8 @@ struct GadgetTextInput
 
 struct GadgetTextArea
 {
-  char value[MAX_GADGET_TEXTSIZE];     /* text string in input field */
-  char last_value[MAX_GADGET_TEXTSIZE];        /* last text string in input field */
+  char value[MAX_GADGET_TEXTSIZE + 1]; /* text string in input field */
+  char last_value[MAX_GADGET_TEXTSIZE + 1];/* last text string in input field */
   int cursor_position;                 /* actual text cursor position */
   int cursor_x;                                /* actual x cursor position */
   int cursor_y;                                /* actual y cursor position */
@@ -182,6 +188,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 */
@@ -221,7 +228,7 @@ struct GadgetInfo
   int id;                              /* internal gadget identifier */
   int custom_id;                       /* custom gadget identifier */
   int custom_type_id;                  /* custom gadget type identifier */
-  char info_text[MAX_INFO_TEXTSIZE];   /* short popup info text */
+  char info_text[MAX_INFO_TEXTSIZE + 1];/* short popup info text */
   int x, y;                            /* gadget position */
   int width, height;                   /* gadget size */
   unsigned int type;                   /* type (button, text input, ...) */
@@ -233,6 +240,7 @@ struct GadgetInfo
   boolean direct_draw;                 /* directly draw to frontbuffer */
   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 */
@@ -251,6 +259,10 @@ struct GadgetInfo
   struct GadgetInfo *next;             /* next list entry */
 };
 
+
+void InitGadgetsSoundCallback(void (*activating_function)(void),
+                             void (*selecting_function)(void));
+
 struct GadgetInfo *CreateGadget(int, ...);
 void FreeGadget(struct GadgetInfo *);