/***********************************************************
* Artsoft Retro-Game Library *
*----------------------------------------------------------*
-* (c) 1994-2002 Artsoft Entertainment *
+* (c) 1994-2006 Artsoft Entertainment *
* Holger Schemel *
* Detmolder Strasse 189 *
* 33604 Bielefeld *
#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 *);
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? */
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 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 */
struct GadgetTextArea
{
- char value[MAX_GADGET_TEXTSIZE]; /* 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 */
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 */
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 */
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 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 *);
void UnmapAllGadgets();
void RemapAllGadgets();
+boolean anyTextInputGadgetActive();
+boolean anyTextAreaGadgetActive();
+boolean anySelectboxGadgetActive();
+boolean anyScrollbarGadgetActive();
boolean anyTextGadgetActive();
+
void ClickOnGadget(struct GadgetInfo *, int);
boolean HandleGadgets(int, int, int);