part->anim_delay_counter =
(c->anim_delay_fixed + GetSimpleRandom(c->anim_delay_random));
+ part->post_delay_counter = 0;
+
part->init_event_state = (c->init_event != ANIM_EVENT_UNDEFINED);
part->anim_event_state = (c->anim_event != ANIM_EVENT_UNDEFINED);
static boolean DoGlobalAnim_EventAction(struct GlobalAnimPartControlInfo *part)
{
- int anim_event_action = part->control_info.anim_event_action;
+ int event_action = (part->init_event_state ?
+ part->control_info.init_event_action :
+ part->control_info.anim_event_action);
- if (anim_event_action == -1)
+ if (event_action == ANIM_EVENT_ACTION_NONE)
return FALSE;
- boolean action_executed = (DoGadgetAction(anim_event_action) ||
- DoScreenAction(anim_event_action) ||
- DoKeysymAction(anim_event_action));
+ PushUserEvent(USEREVENT_ANIM_EVENT_ACTION, event_action, 0);
// check if further actions are allowed to be executed
if (part->control_info.style & STYLE_MULTIPLE_ACTIONS)
return FALSE;
- return action_executed;
+ return TRUE;
}
static void InitGlobalAnim_Clickable(void)
InitGlobalAnim_Clicked(-1, -1, ANIM_CLICKED_RESET);
}
-boolean HandleGlobalAnimClicks(int mx, int my, int button)
+boolean HandleGlobalAnimClicks(int mx, int my, int button, boolean force_click)
{
static boolean click_consumed = FALSE;
static int last_button = 0;
boolean release_event;
boolean click_consumed_current = click_consumed;
+ if (button != 0 && force_click)
+ last_button = 0;
+
// check if button state has changed since last invocation
press_event = (button != 0 && last_button == 0);
release_event = (button == 0 && last_button != 0);