1 /*********************************************************** 2 * Artsoft Retro-Game Library * 3 *----------------------------------------------------------* 4 * (c) 1994-2001 Artsoft Entertainment * 5 * Holger Schemel * 6 * Detmolder Strasse 189 * 7 * 33604 Bielefeld * 8 * Germany * 9 * e-mail: info@artsoft.org * 10 *----------------------------------------------------------* 11 * gadgets.h * 12 ***********************************************************/ 13 14 #ifndef GADGETS_H 15 #define GADGETS_H 16 17 #include "system.h" 18 19 20 #define GADGET_FRAME_DELAY 150 /* delay between gadget actions */ 21 22 /* gadget types */ 23 #define GD_TYPE_NORMAL_BUTTON (1 << 0) 24 #define GD_TYPE_CHECK_BUTTON (1 << 1) 25 #define GD_TYPE_RADIO_BUTTON (1 << 2) 26 #define GD_TYPE_DRAWING_AREA (1 << 3) 27 #define GD_TYPE_TEXTINPUT_ALPHANUMERIC (1 << 4) 28 #define GD_TYPE_TEXTINPUT_NUMERIC (1 << 5) 29 #define GD_TYPE_SCROLLBAR_VERTICAL (1 << 6) 30 #define GD_TYPE_SCROLLBAR_HORIZONTAL (1 << 7) 31 32 #define GD_TYPE_BUTTON (GD_TYPE_NORMAL_BUTTON | \ 33 GD_TYPE_CHECK_BUTTON | \ 34 GD_TYPE_RADIO_BUTTON) 35 #define GD_TYPE_SCROLLBAR (GD_TYPE_SCROLLBAR_VERTICAL | \ 36 GD_TYPE_SCROLLBAR_HORIZONTAL) 37 #define GD_TYPE_TEXTINPUT (GD_TYPE_TEXTINPUT_ALPHANUMERIC | \ 38 GD_TYPE_TEXTINPUT_NUMERIC) 39 40 /* gadget events */ 41 #define GD_EVENT_PRESSED (1 << 0) 42 #define GD_EVENT_RELEASED (1 << 1) 43 #define GD_EVENT_MOVING (1 << 2) 44 #define GD_EVENT_REPEATED (1 << 3) 45 #define GD_EVENT_OFF_BORDERS (1 << 4) 46 #define GD_EVENT_TEXT_RETURN (1 << 5) 47 #define GD_EVENT_TEXT_LEAVING (1 << 6) 48 49 /* gadget button states */ 50 #define GD_BUTTON_UNPRESSED 0 51 #define GD_BUTTON_PRESSED 1 52 53 /* gadget structure constants */ 54 #define MAX_GADGET_TEXTSIZE 1024 55 #define MAX_INFO_TEXTSIZE 1024 56 57 /* gadget creation tags */ 58 #define GDI_END 0 59 #define GDI_CUSTOM_ID 1 60 #define GDI_CUSTOM_TYPE_ID 2 61 #define GDI_X 3 62 #define GDI_Y 4 63 #define GDI_WIDTH 5 64 #define GDI_HEIGHT 6 65 #define GDI_TYPE 7 66 #define GDI_STATE 8 67 #define GDI_CHECKED 9 68 #define GDI_RADIO_NR 10 69 #define GDI_NUMBER_VALUE 11 70 #define GDI_NUMBER_MIN 12 71 #define GDI_NUMBER_MAX 13 72 #define GDI_TEXT_VALUE 14 73 #define GDI_TEXT_SIZE 15 74 #define GDI_TEXT_FONT 16 75 #define GDI_DESIGN_UNPRESSED 17 76 #define GDI_DESIGN_PRESSED 18 77 #define GDI_ALT_DESIGN_UNPRESSED 19 78 #define GDI_ALT_DESIGN_PRESSED 20 79 #define GDI_BORDER_SIZE 21 80 #define GDI_TEXTINPUT_DESIGN_WIDTH 22 81 #define GDI_DECORATION_DESIGN 23 82 #define GDI_DECORATION_POSITION 24 83 #define GDI_DECORATION_SIZE 25 84 #define GDI_DECORATION_SHIFTING 26 85 #define GDI_EVENT_MASK 27 86 #define GDI_EVENT 28 87 #define GDI_CALLBACK_INFO 29 88 #define GDI_CALLBACK_ACTION 30 89 #define GDI_AREA_SIZE 31 90 #define GDI_ITEM_SIZE 32 91 #define GDI_SCROLLBAR_ITEMS_MAX 33 92 #define GDI_SCROLLBAR_ITEMS_VISIBLE 34 93 #define GDI_SCROLLBAR_ITEM_POSITION 35 94 #define GDI_INFO_TEXT 36 95 96 typedef void (*gadget_function)(void *); 97 98 struct GadgetBorder 99 { 100 int size; /* size of gadget border */ 101 int width; /* for text input gadgets */ 102 }; 103 104 struct GadgetDesign 105 { 106 Bitmap *bitmap; /* Bitmap with gadget surface */ 107 int x, y; /* position of rectangle in Bitmap */ 108 }; 109 110 struct GadgetDecoration 111 { 112 struct GadgetDesign design; /* decoration design structure */ 113 int x, y; /* position of deco on the gadget */ 114 int width, height; /* width and height of decoration */ 115 int xshift, yshift; /* deco shifting when gadget pressed */ 116 }; 117 118 struct GadgetEvent 119 { 120 unsigned long type; /* event type */ 121 int button; /* button number for button events */ 122 int x, y; /* gadget position at event time */ 123 boolean off_borders; /* mouse pointer outside gadget? */ 124 int item_x, item_y, item_position; /* new item position */ 125 }; 126 127 struct GadgetDrawingArea 128 { 129 int area_xsize, area_ysize; /* size of drawing area (in items) */ 130 int item_xsize, item_ysize; /* size of each item in drawing area */ 131 }; 132 133 struct GadgetTextInput 134 { 135 char value[MAX_GADGET_TEXTSIZE]; /* text string in input field */ 136 int number_value; /* integer value, if numeric */ 137 int number_min; /* minimal allowed numeric value */ 138 int number_max; /* maximal allowed numeric value */ 139 int size; /* maximal size of input text */ 140 int cursor_position; /* actual cursor position */ 141 int font_type; /* font to use for text input */ 142 }; 143 144 struct GadgetScrollbar 145 { 146 int items_max; /* number of items to access */ 147 int items_visible; /* number of visible items */ 148 int item_position; /* actual item position */ 149 int size_max; /* this is either width or height */ 150 int size; /* scrollbar size on screen */ 151 int position; /* scrollbar position on screen */ 152 int position_max; /* bottom/right scrollbar position */ 153 int drag_position; /* drag position on scrollbar */ 154 int correction; /* scrollbar position correction */ 155 }; 156 157 struct GadgetInfo 158 { 159 int id; /* internal gadget identifier */ 160 int custom_id; /* custom gadget identifier */ 161 int custom_type_id; /* custom gadget type identifier */ 162 char info_text[MAX_INFO_TEXTSIZE]; /* short popup info text */ 163 int x, y; /* gadget position */ 164 int width, height; /* gadget size */ 165 unsigned long type; /* type (button, text input, ...) */ 166 unsigned long state; /* state (pressed, released, ...) */ 167 boolean checked; /* check/radio button state */ 168 int radio_nr; /* number of radio button series */ 169 boolean mapped; /* gadget is active */ 170 struct GadgetBorder border; /* gadget border design */ 171 struct GadgetDesign design[2]; /* 0: normal; 1: pressed */ 172 struct GadgetDesign alt_design[2]; /* alternative design */ 173 struct GadgetDecoration deco; /* decoration on top of gadget */ 174 unsigned long event_mask; /* possible events for this gadget */ 175 struct GadgetEvent event; /* actual gadget event */ 176 gadget_function callback_info; /* function for pop-up info text */ 177 gadget_function callback_action; /* function for gadget action */ 178 struct GadgetDrawingArea drawing; /* fields for drawing area gadget */ 179 struct GadgetTextInput text; /* fields for text input gadget */ 180 struct GadgetScrollbar scrollbar; /* fields for scrollbar gadget */ 181 struct GadgetInfo *next; /* next list entry */ 182 }; 183 184 struct GadgetInfo *CreateGadget(int, ...); 185 void FreeGadget(struct GadgetInfo *); 186 187 void ModifyGadget(struct GadgetInfo *, int, ...); 188 void RedrawGadget(struct GadgetInfo *); 189 190 void MapGadget(struct GadgetInfo *); 191 void UnmapGadget(struct GadgetInfo *); 192 void UnmapAllGadgets(); 193 void RemapAllGadgets(); 194 195 boolean anyTextGadgetActive(); 196 void ClickOnGadget(struct GadgetInfo *, int); 197 198 void HandleGadgets(int, int, int); 199 void HandleGadgetsKeyInput(Key); 200 201 #endif /* GADGETS_H */ 202