projects
/
rocksndiamonds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
added setup option to use extended list for game speed selection
[rocksndiamonds.git]
/
src
/
libgame
/
gadgets.c
diff --git
a/src/libgame/gadgets.c
b/src/libgame/gadgets.c
index 4cf008fc01eaaec6044f85d3de57e00bfd4cad36..937f7a3a22bd5e8c9b00bbe058d065ed8b0c5b1c 100644
(file)
--- a/
src/libgame/gadgets.c
+++ b/
src/libgame/gadgets.c
@@
-213,6
+213,12
@@
static void default_callback_action(void *ptr)
return;
}
return;
}
+static void DoGadgetCallbackAction(struct GadgetInfo *gi, boolean changed)
+{
+ if (changed || gi->callback_action_always)
+ gi->callback_action(gi);
+}
+
static void DrawGadget(struct GadgetInfo *gi, boolean pressed, boolean direct)
{
struct GadgetDesign *gd;
static void DrawGadget(struct GadgetInfo *gi, boolean pressed, boolean direct)
{
struct GadgetDesign *gd;
@@
-841,6
+847,10
@@
static void HandleGadgetTags(struct GadgetInfo *gi, int first_tag, va_list ap)
gi->direct_draw = (boolean)va_arg(ap, int);
break;
gi->direct_draw = (boolean)va_arg(ap, int);
break;
+ case GDI_CALLBACK_ACTION_ALWAYS:
+ gi->callback_action_always = (boolean)va_arg(ap, int);
+ break;
+
case GDI_CHECKED:
gi->checked = (boolean)va_arg(ap, int);
break;
case GDI_CHECKED:
gi->checked = (boolean)va_arg(ap, int);
break;
@@
-1494,11
+1504,18
@@
void ClickOnGadget(struct GadgetInfo *gi, int button)
if (button_status)
HandleGadgets(-1, -1, 0);
if (button_status)
HandleGadgets(-1, -1, 0);
+ int x = gi->x;
+ int y = gi->y;
+
+ /* set cursor position to the end of the text for text input gadgets */
+ if (gi->type & GD_TYPE_TEXT_INPUT)
+ x = gi->x + gi->width - 1;
+
/* simulate pressing mouse button over specified gadget */
/* simulate pressing mouse button over specified gadget */
- HandleGadgets(
gi->x, gi->
y, button);
+ HandleGadgets(
x,
y, button);
/* simulate releasing mouse button over specified gadget */
/* simulate releasing mouse button over specified gadget */
- HandleGadgets(
gi->x, gi->
y, 0);
+ HandleGadgets(
x,
y, 0);
}
boolean HandleGadgets(int mx, int my, int button)
}
boolean HandleGadgets(int mx, int my, int button)
@@
-1604,8
+1621,8
@@
boolean HandleGadgets(int mx, int my, int button)
gi->event.type = GD_EVENT_TEXT_LEAVING;
gi->event.type = GD_EVENT_TEXT_LEAVING;
- if (
gadget_changed &&
!(gi->type & GD_TYPE_SELECTBOX))
-
gi->callback_action(gi
);
+ if (!(gi->type & GD_TYPE_SELECTBOX))
+
DoGadgetCallbackAction(gi, gadget_changed
);
last_gi = NULL;
last_gi = NULL;
@@
-1858,8
+1875,8
@@
boolean HandleGadgets(int mx, int my, int button)
gi->event.type = GD_EVENT_MOVING;
gi->event.off_borders = FALSE;
gi->event.type = GD_EVENT_MOVING;
gi->event.off_borders = FALSE;
- if (gi->event_mask & GD_EVENT_MOVING
&& changed_position
)
-
gi->callback_action(gi
);
+ if (gi->event_mask & GD_EVENT_MOVING)
+
DoGadgetCallbackAction(gi, changed_position
);
return TRUE;
}
return TRUE;
}
@@
-2014,9
+2031,9
@@
boolean HandleGadgets(int mx, int my, int button)
gi->event.type = GD_EVENT_MOVING;
gi->event.off_borders = gadget_moving_off_borders;
gi->event.type = GD_EVENT_MOVING;
gi->event.off_borders = gadget_moving_off_borders;
- if (gi->event_mask & GD_EVENT_MOVING &&
changed_position &&
+ if (gi->event_mask & GD_EVENT_MOVING &&
(gadget_moving_inside || gi->event_mask & GD_EVENT_OFF_BORDERS))
(gadget_moving_inside || gi->event_mask & GD_EVENT_OFF_BORDERS))
-
gi->callback_action(gi
);
+
DoGadgetCallbackAction(gi, changed_position
);
}
if (gadget_released_inside)
}
if (gadget_released_inside)
@@
-2048,10
+2065,8
@@
boolean HandleGadgets(int mx, int my, int button)
gi->state = GD_BUTTON_UNPRESSED;
gi->event.type = GD_EVENT_RELEASED;
gi->state = GD_BUTTON_UNPRESSED;
gi->event.type = GD_EVENT_RELEASED;
- if ((gi->event_mask & GD_EVENT_RELEASED) && gadget_changed)
- {
- gi->callback_action(gi);
- }
+ if ((gi->event_mask & GD_EVENT_RELEASED))
+ DoGadgetCallbackAction(gi, gadget_changed);
}
if (gadget_released_off_borders)
}
if (gadget_released_off_borders)
@@
-2142,8
+2157,7
@@
boolean HandleGadgetsKeyInput(Key key)
last_gi = NULL;
}
last_gi = NULL;
}
- if (gadget_changed)
- gi->callback_action(gi);
+ DoGadgetCallbackAction(gi, gadget_changed);
}
else if (gi->type & GD_TYPE_TEXT_INPUT) /* only valid for text input */
{
}
else if (gi->type & GD_TYPE_TEXT_INPUT) /* only valid for text input */
{