static void MouseButtonDown(AG_Event *event) { AG_Button *bu = AG_SELF(); int button = AG_INT(1); AG_Variable *binding; void *pState; int newState; if (AG_WidgetDisabled(bu)) return; if (!AG_WidgetIsFocused(bu)) AG_WidgetFocus(bu); if (button != AG_MOUSE_LEFT) return; binding = AG_GetVariable(bu, "state", &pState); if (!(bu->flags & AG_BUTTON_STICKY)) { SetState(bu, binding, pState, 1); } else { newState = !GetState(bu, binding, pState); SetState(bu, binding, pState, newState); AG_PostEvent(NULL, bu, "button-pushed", "%i", newState); } AG_UnlockVariable(binding); if (bu->flags & AG_BUTTON_REPEAT) { AG_DelTimer(bu, &bu->repeatTo); AG_PostEvent(NULL, bu, "button-pushed", "%i", 1); AG_AddTimer(bu, &bu->delayTo, agMouseSpinDelay, ExpireDelay, "%i", agMouseSpinIval); } }
static void KeyDown(AG_Event *event) { AG_Button *bu = AG_SELF(); AG_Variable *binding; void *pState; int keysym = AG_INT(1); if (AG_WidgetDisabled(bu)) return; if (keysym != AG_KEY_RETURN && /* TODO AG_Action */ keysym != AG_KEY_KP_ENTER && keysym != AG_KEY_SPACE) { return; } binding = AG_GetVariable(bu, "state", &pState); SetState(bu, binding, pState, 1); AG_PostEvent(NULL, bu, "button-pushed", "%i", 1); bu->flags |= AG_BUTTON_KEYDOWN; if (bu->flags & AG_BUTTON_REPEAT) { AG_DelTimer(bu, &bu->repeatTo); AG_AddTimer(bu, &bu->delayTo, agKbdDelay, ExpireDelay, "%i", agKbdRepeat); } AG_UnlockVariable(binding); }
static Uint32 ExpireDelay(AG_Timer *to, AG_Event *event) { AG_Button *bu = AG_SELF(); int repeatIval = AG_INT(1); AG_AddTimer(bu, &bu->repeatTo, repeatIval, ExpireRepeat, NULL); return (0); }
static void KeyDown(AG_Event *event) { AG_Slider *sl = AG_SELF(); int keysym = AG_INT(1); switch (keysym) { case AG_KEY_UP: case AG_KEY_LEFT: Decrement(sl); AG_AddTimer(sl, &sl->moveTo, agKbdDelay, MoveTimeout, "%i", -1); break; case AG_KEY_DOWN: case AG_KEY_RIGHT: Increment(sl); AG_AddTimer(sl, &sl->moveTo, agKbdDelay, MoveTimeout, "%i", +1); break; } }