/***********************************************************
-* Rocks'n'Diamonds -- McDuffin Strikes Back! *
+* Artsoft Retro-Game Library *
*----------------------------------------------------------*
-* (c) 1995-98 Artsoft Entertainment *
-* Holger Schemel *
-* Oststrasse 11a *
-* 33604 Bielefeld *
-* phone: ++49 +521 290471 *
-* email: aeglos@valinor.owl.de *
+* (c) 1994-2002 Artsoft Entertainment *
+* Holger Schemel *
+* Detmolder Strasse 189 *
+* 33604 Bielefeld *
+* Germany *
+* e-mail: info@artsoft.org *
*----------------------------------------------------------*
-* gadgets.h *
+* gadgets.h *
***********************************************************/
#ifndef GADGETS_H
#define GADGETS_H
-#include "libgame.h"
+#include "system.h"
-/* the following definitions are also used by tools.c */
-/* some positions in the video tape control window */
-#define VIDEO_DISPLAY1_XPOS 5
-#define VIDEO_DISPLAY1_YPOS 5
-#define VIDEO_DISPLAY2_XPOS 5
-#define VIDEO_DISPLAY2_YPOS 41
-#define VIDEO_DISPLAY_XSIZE 90
-#define VIDEO_DISPLAY_YSIZE 31
-#define VIDEO_BUTTON_XSIZE 18
-#define VIDEO_BUTTON_YSIZE 18
-#define VIDEO_CONTROL_XPOS 5
-#define VIDEO_CONTROL_YPOS 77
-#define VIDEO_CONTROL_XSIZE VIDEO_DISPLAY_XSIZE
-#define VIDEO_CONTROL_YSIZE VIDEO_BUTTON_YSIZE
-
-/* values for video tape control */
-#define VIDEO_STATE_PLAY_OFF (1L << 0)
-#define VIDEO_STATE_PLAY_ON (1L << 1)
-#define VIDEO_STATE_PLAY (VIDEO_STATE_PLAY_OFF | VIDEO_STATE_PLAY_ON)
-#define VIDEO_STATE_REC_OFF (1L << 2)
-#define VIDEO_STATE_REC_ON (1L << 3)
-#define VIDEO_STATE_REC (VIDEO_STATE_REC_OFF | VIDEO_STATE_REC_ON)
-#define VIDEO_STATE_PAUSE_OFF (1L << 4)
-#define VIDEO_STATE_PAUSE_ON (1L << 5)
-#define VIDEO_STATE_PAUSE (VIDEO_STATE_PAUSE_OFF | VIDEO_STATE_PAUSE_ON)
-#define VIDEO_STATE_DATE_OFF (1L << 6)
-#define VIDEO_STATE_DATE_ON (1L << 7)
-#define VIDEO_STATE_DATE (VIDEO_STATE_DATE_OFF | VIDEO_STATE_DATE_ON)
-#define VIDEO_STATE_TIME_OFF (1L << 8)
-#define VIDEO_STATE_TIME_ON (1L << 9)
-#define VIDEO_STATE_TIME (VIDEO_STATE_TIME_OFF | VIDEO_STATE_TIME_ON)
-#define VIDEO_PRESS_PLAY_ON (1L << 10)
-#define VIDEO_PRESS_PLAY_OFF (1L << 11)
-#define VIDEO_PRESS_PLAY (VIDEO_PRESS_PLAY_OFF | VIDEO_PRESS_PLAY_ON)
-#define VIDEO_PRESS_REC_ON (1L << 12)
-#define VIDEO_PRESS_REC_OFF (1L << 13)
-#define VIDEO_PRESS_REC (VIDEO_PRESS_REC_OFF | VIDEO_PRESS_REC_ON)
-#define VIDEO_PRESS_PAUSE_ON (1L << 14)
-#define VIDEO_PRESS_PAUSE_OFF (1L << 15)
-#define VIDEO_PRESS_PAUSE (VIDEO_PRESS_PAUSE_OFF | VIDEO_PRESS_PAUSE_ON)
-#define VIDEO_PRESS_STOP_ON (1L << 16)
-#define VIDEO_PRESS_STOP_OFF (1L << 17)
-#define VIDEO_PRESS_STOP (VIDEO_PRESS_STOP_OFF | VIDEO_PRESS_STOP_ON)
-#define VIDEO_PRESS_EJECT_ON (1L << 18)
-#define VIDEO_PRESS_EJECT_OFF (1L << 19)
-#define VIDEO_PRESS_EJECT (VIDEO_PRESS_EJECT_OFF | VIDEO_PRESS_EJECT_ON)
-
-/* special */
-#define VIDEO_STATE_FFWD_OFF ((1L << 20) | VIDEO_STATE_PAUSE_OFF)
-#define VIDEO_STATE_FFWD_ON (1L << 21)
-#define VIDEO_STATE_FFWD (VIDEO_STATE_FFWD_OFF | VIDEO_STATE_FFWD_ON)
-#define VIDEO_STATE_PBEND_OFF (1L << 22)
-#define VIDEO_STATE_PBEND_ON (1L << 23)
-#define VIDEO_STATE_PBEND (VIDEO_STATE_PBEND_OFF | VIDEO_STATE_PBEND_ON)
-
-/* tags to draw video display labels or symbols only */
-#define VIDEO_DISPLAY_DEFAULT 0
-#define VIDEO_DISPLAY_LABEL_ONLY 1
-#define VIDEO_DISPLAY_SYMBOL_ONLY 2
-
-void DrawVideoDisplay(unsigned long, unsigned long);
-void DrawCompleteVideoDisplay(void);
-
-
-/* NEW GADGET STUFF -------------------------------------------------------- */
+#define GADGET_FRAME_DELAY 150 /* delay between gadget actions */
/* gadget types */
#define GD_TYPE_NORMAL_BUTTON (1 << 0)
#define GD_TYPE_DRAWING_AREA (1 << 3)
#define GD_TYPE_TEXTINPUT_ALPHANUMERIC (1 << 4)
#define GD_TYPE_TEXTINPUT_NUMERIC (1 << 5)
-#define GD_TYPE_SCROLLBAR_VERTICAL (1 << 6)
-#define GD_TYPE_SCROLLBAR_HORIZONTAL (1 << 7)
+#define GD_TYPE_SELECTBOX (1 << 6)
+#define GD_TYPE_SCROLLBAR_VERTICAL (1 << 7)
+#define GD_TYPE_SCROLLBAR_HORIZONTAL (1 << 8)
#define GD_TYPE_BUTTON (GD_TYPE_NORMAL_BUTTON | \
GD_TYPE_CHECK_BUTTON | \
#define GD_EVENT_OFF_BORDERS (1 << 4)
#define GD_EVENT_TEXT_RETURN (1 << 5)
#define GD_EVENT_TEXT_LEAVING (1 << 6)
+#define GD_EVENT_INFO_ENTERING (1 << 7)
+#define GD_EVENT_INFO_LEAVING (1 << 8)
/* gadget button states */
#define GD_BUTTON_UNPRESSED 0
#define GDI_TEXT_VALUE 14
#define GDI_TEXT_SIZE 15
#define GDI_TEXT_FONT 16
-#define GDI_DESIGN_UNPRESSED 17
-#define GDI_DESIGN_PRESSED 18
-#define GDI_ALT_DESIGN_UNPRESSED 19
-#define GDI_ALT_DESIGN_PRESSED 20
-#define GDI_BORDER_SIZE 21
-#define GDI_TEXTINPUT_DESIGN_WIDTH 22
-#define GDI_DECORATION_DESIGN 23
-#define GDI_DECORATION_POSITION 24
-#define GDI_DECORATION_SIZE 25
-#define GDI_DECORATION_SHIFTING 26
-#define GDI_EVENT_MASK 27
-#define GDI_EVENT 28
-#define GDI_CALLBACK_INFO 29
-#define GDI_CALLBACK_ACTION 30
-#define GDI_AREA_SIZE 31
-#define GDI_ITEM_SIZE 32
-#define GDI_SCROLLBAR_ITEMS_MAX 33
-#define GDI_SCROLLBAR_ITEMS_VISIBLE 34
-#define GDI_SCROLLBAR_ITEM_POSITION 35
-#define GDI_INFO_TEXT 36
+#define GDI_SELECTBOX_VALUES 17
+#define GDI_SELECTBOX_INDEX 18
+#define GDI_DESIGN_UNPRESSED 19
+#define GDI_DESIGN_PRESSED 20
+#define GDI_ALT_DESIGN_UNPRESSED 21
+#define GDI_ALT_DESIGN_PRESSED 22
+#define GDI_BORDER_SIZE 23
+#define GDI_BORDER_SIZE_SELECTBUTTON 24
+#define GDI_TEXTINPUT_DESIGN_WIDTH 25
+#define GDI_DECORATION_DESIGN 26
+#define GDI_DECORATION_POSITION 27
+#define GDI_DECORATION_SIZE 28
+#define GDI_DECORATION_SHIFTING 29
+#define GDI_EVENT_MASK 30
+#define GDI_EVENT 31
+#define GDI_CALLBACK_INFO 32
+#define GDI_CALLBACK_ACTION 33
+#define GDI_AREA_SIZE 34
+#define GDI_ITEM_SIZE 35
+#define GDI_SCROLLBAR_ITEMS_MAX 36
+#define GDI_SCROLLBAR_ITEMS_VISIBLE 37
+#define GDI_SCROLLBAR_ITEM_POSITION 38
+#define GDI_INFO_TEXT 39
typedef void (*gadget_function)(void *);
struct GadgetBorder
{
int size; /* size of gadget border */
- int width; /* for text input gadgets */
+ int size_selectbutton; /* for selectbox gadgets */
+ int width; /* for selectbox/text input gadgets */
};
struct GadgetDesign
{
- Bitmap bitmap; /* Bitmap with gadget surface */
+ Bitmap *bitmap; /* Bitmap with gadget surface */
int x, y; /* position of rectangle in Bitmap */
};
int font_type; /* font to use for text input */
};
+struct GadgetSelectbox
+{
+ const char **values; /* pointer to array of text strings */
+ int index; /* index of actual text string */
+ int size; /* maximal size of text strings */
+ int font_type; /* font to use for text input */
+
+ /* automatically determined values */
+ int x, y; /* open selectbox position */
+ int width, height; /* open selectbox size */
+ int num_values; /* number of text strings */
+ Pixel reverse_color; /* color for highlighting */
+
+ /* runtime values */
+ boolean open; /* opening state of selectbox */
+ boolean stay_open; /* open after button release */
+ int current_index; /* index of text while selecting */
+};
+
struct GadgetScrollbar
{
int items_max; /* number of items to access */
gadget_function callback_action; /* function for gadget action */
struct GadgetDrawingArea drawing; /* fields for drawing area gadget */
struct GadgetTextInput text; /* fields for text input gadget */
+ struct GadgetSelectbox selectbox; /* fields for selectbox gadget */
struct GadgetScrollbar scrollbar; /* fields for scrollbar gadget */
struct GadgetInfo *next; /* next list entry */
};