rnd-20111007-1-src
[rocksndiamonds.git] / src / libgame / gadgets.h
index d69c40170c8d65d488dcad56ac876c9415c16961..7b8ce7f52853527b3bdc338511bce666bea9c77f 100644 (file)
@@ -1,7 +1,7 @@
 /***********************************************************
 * Artsoft Retro-Game Library                               *
 *----------------------------------------------------------*
-* (c) 1994-2002 Artsoft Entertainment                      *
+* (c) 1994-2006 Artsoft Entertainment                      *
 *               Holger Schemel                             *
 *               Detmolder Strasse 189                      *
 *               33604 Bielefeld                            *
@@ -17,7 +17,8 @@
 #include "system.h"
 
 
-#define GADGET_FRAME_DELAY     150     /* delay between gadget actions */
+#define GADGET_FRAME_DELAY_FIRST       250     /* delay after first click */
+#define GADGET_FRAME_DELAY             100     /* delay for pressed butten */
 
 /* gadget types */
 #define GD_TYPE_NORMAL_BUTTON          (1 << 0)
 #define GDI_SCROLLBAR_ITEMS_MAX                37
 #define GDI_SCROLLBAR_ITEMS_VISIBLE    38
 #define GDI_SCROLLBAR_ITEM_POSITION    39
-#define GDI_INFO_TEXT                  40
-#define GDI_ACTIVE                     41
-#define GDI_DIRECT_DRAW                        42
+#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
 
 typedef void (*gadget_function)(void *);
 
@@ -130,7 +135,7 @@ struct GadgetDecoration
 
 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? */
@@ -145,14 +150,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 */
@@ -162,8 +167,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 */
@@ -205,16 +210,22 @@ struct GadgetScrollbar
   int correction;                      /* scrollbar position correction */
 };
 
+struct GadgetWheelArea
+{
+  int x, y;                            /* active area for wheel (start) */
+  int width, height;                   /* active area for wheel (size) */ 
+};
+
 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 long type;                  /* type (button, text input, ...) */
-  unsigned long state;                 /* state (pressed, released, ...) */
+  unsigned int type;                   /* type (button, text input, ...) */
+  unsigned int state;                  /* state (pressed, released, ...) */
   boolean checked;                     /* check/radio button state */
   int radio_nr;                                /* number of radio button series */
   boolean mapped;                      /* gadget is mapped on the screen */
@@ -226,7 +237,7 @@ struct GadgetInfo
   struct GadgetDesign design[2];       /* 0: normal; 1: pressed */
   struct GadgetDesign alt_design[2];   /* alternative design */
   struct GadgetDecoration deco;                /* decoration on top of gadget */
-  unsigned long event_mask;            /* possible events for this gadget */
+  unsigned int event_mask;             /* possible events for this gadget */
   struct GadgetEvent event;            /* actual gadget event */
   gadget_function callback_info;       /* function for pop-up info text */
   gadget_function callback_action;     /* function for gadget action */
@@ -236,9 +247,14 @@ struct GadgetInfo
   struct GadgetTextArea textarea;      /* fields for text area gadget */
   struct GadgetSelectbox selectbox;    /* fields for selectbox gadget */
   struct GadgetScrollbar scrollbar;    /* fields for scrollbar gadget */
+  struct GadgetWheelArea wheelarea;    /* fields for scroll wheel area */
   struct GadgetInfo *next;             /* next list entry */
 };
 
+
+void InitGadgetsSoundCallback(void (*activating_function)(void),
+                             void (*selecting_function)(void));
+
 struct GadgetInfo *CreateGadget(int, ...);
 void FreeGadget(struct GadgetInfo *);