/* values for DrawGadget() */
#define DG_UNPRESSED 0
#define DG_PRESSED 1
+
#define DG_BUFFERED 0
#define DG_DIRECT 1
gi->active = (boolean)va_arg(ap, int);
break;
+ case GDI_DIRECT_DRAW:
+ /* take care here: "boolean" is typedef'ed as "unsigned char",
+ which gets promoted to "int" */
+ gi->direct_draw = (boolean)va_arg(ap, int);
+ break;
+
case GDI_CHECKED:
/* take care here: "boolean" is typedef'ed as "unsigned char",
which gets promoted to "int" */
void RedrawGadget(struct GadgetInfo *gi)
{
if (gi->mapped)
- DrawGadget(gi, gi->state, DG_DIRECT);
+ DrawGadget(gi, gi->state, gi->direct_draw);
}
struct GadgetInfo *CreateGadget(int first_tag, ...)
new_gadget->callback_info = default_callback_info;
new_gadget->callback_action = default_callback_action;
new_gadget->active = TRUE;
+ new_gadget->direct_draw = TRUE;
+
new_gadget->next = NULL;
va_start(ap, first_tag);
gi->text.cursor_position = strlen(gi->text.value);
if (gi->text.cursor_position != old_cursor_position)
- DrawGadget(gi, DG_PRESSED, DG_DIRECT);
+ DrawGadget(gi, DG_PRESSED, gi->direct_draw);
}
else
{
/* if mouse button pressed outside text input gadget, deactivate it */
CheckRangeOfNumericInputGadget(gi);
- DrawGadget(gi, DG_UNPRESSED, DG_DIRECT);
+ DrawGadget(gi, DG_UNPRESSED, gi->direct_draw);
gi->event.type = GD_EVENT_TEXT_LEAVING;
gi->selectbox.current_index = gi->selectbox.num_values - 1;
if (gi->selectbox.current_index != old_index)
- DrawGadget(gi, DG_PRESSED, DG_DIRECT);
+ DrawGadget(gi, DG_PRESSED, gi->direct_draw);
}
else
{
/* if mouse button pressed outside selectbox gadget, deactivate it */
- DrawGadget(gi, DG_UNPRESSED, DG_DIRECT);
+ DrawGadget(gi, DG_UNPRESSED, gi->direct_draw);
gi->event.type = GD_EVENT_TEXT_LEAVING;
gi->selectbox.current_index = gi->selectbox.num_values - 1;
if (gi->selectbox.current_index != old_index)
- DrawGadget(gi, DG_PRESSED, DG_DIRECT);
+ DrawGadget(gi, DG_PRESSED, gi->direct_draw);
}
}
rgi != gi)
{
rgi->checked = FALSE;
- DrawGadget(rgi, DG_UNPRESSED, DG_DIRECT);
+ DrawGadget(rgi, DG_UNPRESSED, rgi->direct_draw);
}
rgi = rgi->next;
}
}
- DrawGadget(gi, DG_PRESSED, DG_DIRECT);
+ DrawGadget(gi, DG_PRESSED, gi->direct_draw);
gi->state = GD_BUTTON_PRESSED;
gi->event.type = GD_EVENT_PRESSED;
if (gi->type & GD_TYPE_BUTTON)
{
if (gadget_moving_inside && gi->state == GD_BUTTON_UNPRESSED)
- DrawGadget(gi, DG_PRESSED, DG_DIRECT);
+ DrawGadget(gi, DG_PRESSED, gi->direct_draw);
else if (gadget_moving_off_borders && gi->state == GD_BUTTON_PRESSED)
- DrawGadget(gi, DG_UNPRESSED, DG_DIRECT);
+ DrawGadget(gi, DG_UNPRESSED, gi->direct_draw);
}
else if (gi->type & GD_TYPE_SELECTBOX)
{
/* if mouse moving inside activated selectbox, select value */
if (my >= gi->selectbox.y && my < gi->selectbox.y + gi->selectbox.height)
gi->selectbox.current_index =
- (my - gi->selectbox.y - gi->border.xsize) / getFontWidth(gi->font);
+ (my - gi->selectbox.y - gi->border.ysize) / getFontHeight(gi->font);
if (gi->selectbox.current_index < 0)
gi->selectbox.current_index = 0;
gi->selectbox.current_index = gi->selectbox.num_values - 1;
if (gi->selectbox.current_index != old_index)
- DrawGadget(gi, DG_PRESSED, DG_DIRECT);
+ DrawGadget(gi, DG_PRESSED, gi->direct_draw);
}
else if (gi->type & GD_TYPE_SCROLLBAR)
{
changed_position = TRUE;
}
- DrawGadget(gi, DG_PRESSED, DG_DIRECT);
+ DrawGadget(gi, DG_PRESSED, gi->direct_draw);
}
gi->state = (gadget_moving_inside || gi->type & GD_TYPE_SCROLLBAR ?
if (deactivate_gadget &&
!(gi->type & GD_TYPE_TEXTINPUT)) /* text input stays open */
- DrawGadget(gi, DG_UNPRESSED, DG_DIRECT);
+ DrawGadget(gi, DG_UNPRESSED, gi->direct_draw);
gi->state = GD_BUTTON_UNPRESSED;
gi->event.type = GD_EVENT_RELEASED;
if (gadget_released_off_borders)
{
if (gi->type & GD_TYPE_SCROLLBAR)
- DrawGadget(gi, DG_UNPRESSED, DG_DIRECT);
+ DrawGadget(gi, DG_UNPRESSED, gi->direct_draw);
gi->event.type = GD_EVENT_RELEASED;
else if (gi->type & GD_TYPE_SELECTBOX)
gi->selectbox.index = gi->selectbox.current_index;
- DrawGadget(gi, DG_UNPRESSED, DG_DIRECT);
+ DrawGadget(gi, DG_UNPRESSED, gi->direct_draw);
gi->event.type = GD_EVENT_TEXT_RETURN;
gi->text.value[cursor_pos] = letter;
gi->text.cursor_position++;
- DrawGadget(gi, DG_PRESSED, DG_DIRECT);
+ DrawGadget(gi, DG_PRESSED, gi->direct_draw);
}
else if (key == KSYM_Left && cursor_pos > 0)
{
gi->text.cursor_position--;
- DrawGadget(gi, DG_PRESSED, DG_DIRECT);
+ DrawGadget(gi, DG_PRESSED, gi->direct_draw);
}
else if (key == KSYM_Right && cursor_pos < text_length)
{
gi->text.cursor_position++;
- DrawGadget(gi, DG_PRESSED, DG_DIRECT);
+ DrawGadget(gi, DG_PRESSED, gi->direct_draw);
}
else if (key == KSYM_BackSpace && cursor_pos > 0)
{
strcpy(text, gi->text.value);
strcpy(&gi->text.value[cursor_pos - 1], &text[cursor_pos]);
gi->text.cursor_position--;
- DrawGadget(gi, DG_PRESSED, DG_DIRECT);
+ DrawGadget(gi, DG_PRESSED, gi->direct_draw);
}
else if (key == KSYM_Delete && cursor_pos < text_length)
{
strcpy(text, gi->text.value);
strcpy(&gi->text.value[cursor_pos], &text[cursor_pos + 1]);
- DrawGadget(gi, DG_PRESSED, DG_DIRECT);
+ DrawGadget(gi, DG_PRESSED, gi->direct_draw);
}
}
else if (gi->type & GD_TYPE_SELECTBOX) /* only valid for selectbox */
if (key == KSYM_Up && index > 0)
{
gi->selectbox.current_index--;
- DrawGadget(gi, DG_PRESSED, DG_DIRECT);
+ DrawGadget(gi, DG_PRESSED, gi->direct_draw);
}
else if (key == KSYM_Down && index < num_values - 1)
{
gi->selectbox.current_index++;
- DrawGadget(gi, DG_PRESSED, DG_DIRECT);
+ DrawGadget(gi, DG_PRESSED, gi->direct_draw);
}
}
}