+
+/* NEW GADGET STUFF -------------------------------------------------------- */
+
+
+/* gadget types */
+#define GD_TYPE_NORMAL_BUTTON (1<<0)
+#define GD_TYPE_TWO_STATE_BUTTON (1<<1)
+#define GD_TYPE_DRAWING_AREA (1<<2)
+#define GD_TYPE_TEXTINPUT (1<<3)
+#define GD_TYPE_TEXTOUTPUT (1<<4)
+#define GD_TYPE_NUMBERINPUT (1<<5)
+#define GD_TYPE_NUMBEROUTPUT (1<<6)
+#define GD_TYPE_SCROLLBAR_VERTICAL (1<<7)
+#define GD_TYPE_SCROLLBAR_HORIZONTAL (1<<8)
+
+/* gadget events */
+#define GD_EVENT_PRESSED (1<<0)
+#define GD_EVENT_RELEASED (1<<1)
+#define GD_EVENT_MOVING (1<<2)
+
+/* gadget button states */
+#define GD_BUTTON_UNPRESSED 0
+#define GD_BUTTON_PRESSED 1
+
+/* gadget structure constants */
+#define MAX_GADGET_TEXTSIZE 1024
+
+/* gadget creation tags */
+#define GDI_END 0
+#define GDI_ID 1
+#define GDI_X 2
+#define GDI_Y 3
+#define GDI_WIDTH 4
+#define GDI_HEIGHT 5
+#define GDI_TYPE 6
+#define GDI_STATE 7
+#define GDI_ALT_STATE 8
+#define GDI_NUMBER_VALUE 9
+#define GDI_TEXT_VALUE 10
+#define GDI_DESIGN_UNPRESSED 11
+#define GDI_DESIGN_PRESSED 12
+#define GDI_ALT_DESIGN_UNPRESSED 13
+#define GDI_ALT_DESIGN_PRESSED 14
+#define GDI_EVENT_MASK 15
+#define GDI_EVENT 16
+#define GDI_CALLBACK 17
+
+typedef void (*gadget_callback_function)(void *);
+
+struct GadgetDesign
+{
+ Pixmap pixmap; /* Pixmap with gadget surface */
+ int x, y; /* position of rectangle in Pixmap */
+};
+
+struct GadgetEvent
+{
+ unsigned long type; /* event type */
+ int button; /* button number for button events */
+};
+
+struct GadgetInfo
+{
+ int id; /* gadget identifier */
+ int x, y; /* gadget position */
+ int width, height; /* gadget size */
+ unsigned long type; /* type (button, text input, ...) */
+ unsigned long state; /* state (pressed, released, ...) */
+ boolean alt_state; /* alternative state */
+ boolean mapped; /* gadget is active */
+ long number_value;
+ char text_value[MAX_GADGET_TEXTSIZE];
+ struct GadgetDesign design[2]; /* 0: normal; 1: pressed */
+ struct GadgetDesign alt_design[2]; /* alternative design */
+ unsigned long event_mask; /* possible events for this gadget */
+ struct GadgetEvent event; /* actual gadget event */
+ gadget_callback_function callback;
+ struct GadgetInfo *next; /* next list entry */
+};
+
+struct GadgetInfo *CreateGadget(int, ...);
+void FreeGadget(struct GadgetInfo *);
+
+void MapGadget(struct GadgetInfo *);
+void UnmapGadget(struct GadgetInfo *);
+
+void HandleGadgets(int, int, int);
+