rnd-20050807-1-src
[rocksndiamonds.git] / src / libgame / gadgets.h
index 0bf8cc5a53ca322c81d5afb90d45a4e3ef71c7bd..ac14cb81f2b1d0e9dfecd733629c1c63799caa33 100644 (file)
 #define GD_TYPE_CHECK_BUTTON           (1 << 2)
 #define GD_TYPE_RADIO_BUTTON           (1 << 3)
 #define GD_TYPE_DRAWING_AREA           (1 << 4)
-#define GD_TYPE_TEXTINPUT_ALPHANUMERIC (1 << 5)
-#define GD_TYPE_TEXTINPUT_NUMERIC      (1 << 6)
-#define GD_TYPE_SELECTBOX              (1 << 7)
-#define GD_TYPE_SCROLLBAR_VERTICAL     (1 << 8)
-#define GD_TYPE_SCROLLBAR_HORIZONTAL   (1 << 9)
+#define GD_TYPE_TEXT_INPUT_ALPHANUMERIC        (1 << 5)
+#define GD_TYPE_TEXT_INPUT_NUMERIC     (1 << 6)
+#define GD_TYPE_TEXT_AREA              (1 << 7)
+#define GD_TYPE_SELECTBOX              (1 << 8)
+#define GD_TYPE_SCROLLBAR_VERTICAL     (1 << 9)
+#define GD_TYPE_SCROLLBAR_HORIZONTAL   (1 << 10)
 
 #define GD_TYPE_BUTTON                 (GD_TYPE_NORMAL_BUTTON | \
                                         GD_TYPE_TEXT_BUTTON | \
@@ -37,8 +38,8 @@
                                         GD_TYPE_RADIO_BUTTON)
 #define GD_TYPE_SCROLLBAR              (GD_TYPE_SCROLLBAR_VERTICAL | \
                                         GD_TYPE_SCROLLBAR_HORIZONTAL)
-#define GD_TYPE_TEXTINPUT              (GD_TYPE_TEXTINPUT_ALPHANUMERIC | \
-                                        GD_TYPE_TEXTINPUT_NUMERIC)
+#define GD_TYPE_TEXT_INPUT             (GD_TYPE_TEXT_INPUT_ALPHANUMERIC | \
+                                        GD_TYPE_TEXT_INPUT_NUMERIC)
 
 /* gadget events */
 #define GD_EVENT_PRESSED               (1 << 0)
 #define GDI_SCROLLBAR_ITEM_POSITION    39
 #define GDI_INFO_TEXT                  40
 #define GDI_ACTIVE                     41
+#define GDI_DIRECT_DRAW                        42
 
 typedef void (*gadget_function)(void *);
 
@@ -150,6 +152,7 @@ struct GadgetTextButton
 struct GadgetTextInput
 {
   char value[MAX_GADGET_TEXTSIZE];     /* text string in input field */
+  char last_value[MAX_GADGET_TEXTSIZE];        /* 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 */
@@ -157,6 +160,18 @@ struct GadgetTextInput
   int size;                            /* maximal size of input text */
 };
 
+struct GadgetTextArea
+{
+  char value[MAX_GADGET_TEXTSIZE];     /* text string in input field */
+  char last_value[MAX_GADGET_TEXTSIZE];        /* 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 */
+  int cursor_x_preferred;              /* "preferred" x cursor position */
+  int size;                            /* maximal size of input text */
+  int xsize, ysize;                    /* size of text area (in chars) */
+};
+
 struct GadgetSelectbox
 {
   struct ValueTextInfo *options;       /* pointer to text/value array */
@@ -180,7 +195,9 @@ struct GadgetScrollbar
   int items_max;                       /* number of items to access */
   int items_visible;                   /* number of visible items */
   int item_position;                   /* actual item position */
+  int size_min;                                /* minimal scrollbar size */
   int size_max;                                /* this is either width or height */
+  int size_max_cmp;                    /* needed for minimal scrollbar size */
   int size;                            /* scrollbar size on screen */
   int position;                                /* scrollbar position on screen */
   int position_max;                    /* bottom/right scrollbar position */
@@ -196,25 +213,27 @@ struct GadgetInfo
   char info_text[MAX_INFO_TEXTSIZE];   /* 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 */
   boolean active;                      /* gadget is active */
+  boolean direct_draw;                 /* directly draw to frontbuffer */
   int font;                            /* font to use when inactive */
   int font_active;                     /* font to use when active */
   struct GadgetBorder border;          /* gadget border design */
   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 */
   struct GadgetDrawingArea drawing;    /* fields for drawing area gadget */
   struct GadgetTextButton textbutton;  /* fields for text button gadget */
-  struct GadgetTextInput text;         /* fields for text input gadget */
+  struct GadgetTextInput textinput;    /* fields for text input gadget */
+  struct GadgetTextArea textarea;      /* fields for text area gadget */
   struct GadgetSelectbox selectbox;    /* fields for selectbox gadget */
   struct GadgetScrollbar scrollbar;    /* fields for scrollbar gadget */
   struct GadgetInfo *next;             /* next list entry */
@@ -231,10 +250,15 @@ void UnmapGadget(struct GadgetInfo *);
 void UnmapAllGadgets();
 void RemapAllGadgets();
 
+boolean anyTextInputGadgetActive();
+boolean anyTextAreaGadgetActive();
+boolean anySelectboxGadgetActive();
+boolean anyScrollbarGadgetActive();
 boolean anyTextGadgetActive();
+
 void ClickOnGadget(struct GadgetInfo *, int);
 
-void HandleGadgets(int, int, int);
-void HandleGadgetsKeyInput(Key);
+boolean HandleGadgets(int, int, int);
+boolean HandleGadgetsKeyInput(Key);
 
 #endif /* GADGETS_H */