#define ED_BUTTON_EDOWN_Y2POS 165
#define ED_BUTTON_ELEM_Y2POS 190
+#define ED_SCROLLBUTTON_XSIZE 30
+#define ED_SCROLLBUTTON_YSIZE 20
+
#define ED_BUTTON_CTRL_XPOS 5
#define ED_BUTTON_CTRL_YPOS 5
#define ED_BUTTON_CTRL_XSIZE 90
#define ED_BUTTON_FILL_YSIZE 20
#define ED_BUTTON_LEFT_XPOS 5
#define ED_BUTTON_LEFT_YPOS 65
-#define ED_BUTTON_LEFT_XSIZE 30
-#define ED_BUTTON_LEFT_YSIZE 20
+#define ED_BUTTON_LEFT_XSIZE ED_SCROLLBUTTON_XSIZE
+#define ED_BUTTON_LEFT_YSIZE ED_SCROLLBUTTON_YSIZE
#define ED_BUTTON_UP_XPOS 35
#define ED_BUTTON_UP_YPOS 55
-#define ED_BUTTON_UP_XSIZE 30
-#define ED_BUTTON_UP_YSIZE 20
+#define ED_BUTTON_UP_XSIZE ED_SCROLLBUTTON_XSIZE
+#define ED_BUTTON_UP_YSIZE ED_SCROLLBUTTON_YSIZE
#define ED_BUTTON_DOWN_XPOS 35
#define ED_BUTTON_DOWN_YPOS 75
-#define ED_BUTTON_DOWN_XSIZE 30
-#define ED_BUTTON_DOWN_YSIZE 20
+#define ED_BUTTON_DOWN_XSIZE ED_SCROLLBUTTON_XSIZE
+#define ED_BUTTON_DOWN_YSIZE ED_SCROLLBUTTON_YSIZE
#define ED_BUTTON_RIGHT_XPOS 65
#define ED_BUTTON_RIGHT_YPOS 65
-#define ED_BUTTON_RIGHT_XSIZE 30
-#define ED_BUTTON_RIGHT_YSIZE 20
+#define ED_BUTTON_RIGHT_XSIZE ED_SCROLLBUTTON_XSIZE
+#define ED_BUTTON_RIGHT_YSIZE ED_SCROLLBUTTON_YSIZE
#define ED_BUTTON_EDIT_XPOS 5
#define ED_BUTTON_EDIT_YPOS 5
#define GD_TYPE_SCROLLBAR_VERTICAL (1<<7)
#define GD_TYPE_SCROLLBAR_HORIZONTAL (1<<8)
+#define GD_TYPE_BUTTON (GD_TYPE_NORMAL_BUTTON | \
+ GD_TYPE_RADIO_BUTTON)
+#define GD_TYPE_SCROLLBAR (GD_TYPE_SCROLLBAR_VERTICAL | \
+ GD_TYPE_SCROLLBAR_HORIZONTAL)
+
/* gadget events */
#define GD_EVENT_PRESSED (1<<0)
#define GD_EVENT_RELEASED (1<<1)
#define GD_EVENT_MOVING (1<<2)
#define GD_EVENT_REPEATED (1<<3)
#define GD_EVENT_OFF_BORDERS (1<<4)
+#define GD_EVENT_TEXT_RETURN (1<<5)
+#define GD_EVENT_TEXT_LEAVING (1<<6)
/* gadget button states */
#define GD_BUTTON_UNPRESSED 0
#define GDI_NUMBER_MIN 11
#define GDI_NUMBER_MAX 12
#define GDI_TEXT_VALUE 13
-#define GDI_DESIGN_UNPRESSED 14
-#define GDI_DESIGN_PRESSED 15
-#define GDI_ALT_DESIGN_UNPRESSED 16
-#define GDI_ALT_DESIGN_PRESSED 17
-#define GDI_EVENT_MASK 18
-#define GDI_EVENT 19
-#define GDI_CALLBACK 20
-#define GDI_AREA_SIZE 21
-#define GDI_ITEM_SIZE 22
+#define GDI_TEXT_SIZE 14
+#define GDI_DESIGN_UNPRESSED 15
+#define GDI_DESIGN_PRESSED 16
+#define GDI_ALT_DESIGN_UNPRESSED 17
+#define GDI_ALT_DESIGN_PRESSED 18
+#define GDI_DESIGN_BORDER 19
+#define GDI_EVENT_MASK 20
+#define GDI_EVENT 21
+#define GDI_CALLBACK 22
+#define GDI_AREA_SIZE 23
+#define GDI_ITEM_SIZE 24
+#define GDI_SCROLLBAR_ITEMS_MAX 25
+#define GDI_SCROLLBAR_ITEMS_VISIBLE 26
+#define GDI_SCROLLBAR_ITEM_POSITION 27
typedef void (*gadget_callback_function)(void *);
int button; /* button number for button events */
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 */
};
struct GadgetDrawingArea
int item_xsize, item_ysize; /* size of each item in drawing area */
};
+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_max; /* this is either width or height */
+ int size; /* scrollbar size on screen */
+ int position; /* scrollbar position on screen */
+ int position_max; /* bottom/right scrollbar position */
+ int drag_position; /* drag position on scrollbar */
+};
+
struct GadgetInfo
{
int id; /* internal gadget identifier */
boolean mapped; /* gadget is active */
long number_value;
char text_value[MAX_GADGET_TEXTSIZE];
+ int text_size; /* maximal size of input text */
struct GadgetDesign design[2]; /* 0: normal; 1: pressed */
struct GadgetDesign alt_design[2]; /* alternative design */
+ int design_border; /* border size of gadget decoration */
unsigned long event_mask; /* possible events for this gadget */
struct GadgetEvent event; /* actual gadget event */
gadget_callback_function callback;
struct GadgetDrawingArea drawing; /* fields for drawing area gadget */
+ struct GadgetScrollbar scrollbar; /* fields for scrollbar gadget */
struct GadgetInfo *next; /* next list entry */
};
struct GadgetInfo *CreateGadget(int, ...);
void FreeGadget(struct GadgetInfo *);
+void ClickOnGadget(struct GadgetInfo *);
+void AdjustScrollbar(struct GadgetInfo *, int, int);
+
void MapGadget(struct GadgetInfo *);
void UnmapGadget(struct GadgetInfo *);
void HandleGadgets(int, int, int);
+void HandleGadgetsKeyInput(KeySym);
#endif