static void Return(AG_Event *event) { char text[AG_TEXTBOX_STRING_MAX]; AG_Textbox *tbox = AG_SELF(); AG_Combo *com = AG_PTR(1); AG_ObjectLock(com->list); AG_TextboxCopyString(tbox, text, sizeof(text)); if ((com->flags & AG_COMBO_ANY_TEXT) == 0) { AG_TlistItem *it; if (text[0] != '\0' && (it = AG_TlistSelectText(com->list, text)) != NULL) { AG_TextboxSetString(com->tbox, it->text); AG_PostEvent(NULL, com, "combo-selected", "%p", it); } else { AG_TlistDeselectAll(com->list); AG_TextboxSetString(com->tbox, ""); AG_PostEvent(NULL, com, "combo-text-unknown", "%s", text); } } else { AG_TlistDeselectAll(com->list); AG_PostEvent(NULL, com, "combo-text-entry", "%s", text); } AG_ObjectUnlock(com->list); }
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 CloseWindow(AG_Event *event) { AG_Titlebar *tbar = AG_PTR(1); AG_PostEvent(NULL, tbar->win, "window-close", NULL); }
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 void MouseButtonUp(AG_Event *event) { AG_Button *bu = AG_SELF(); int button = AG_INT(1); AG_Variable *binding; void *pState; int x = AG_INT(2); int y = AG_INT(3); if (bu->flags & AG_BUTTON_REPEAT) { AG_DelTimer(bu, &bu->repeatTo); AG_DelTimer(bu, &bu->delayTo); return; } if (AG_WidgetDisabled(bu) || x < 0 || y < 0 || x > WIDGET(bu)->w || y > WIDGET(bu)->h) { return; } binding = AG_GetVariable(bu, "state", &pState); if (GetState(bu, binding, pState) && button == AG_MOUSE_LEFT && !(bu->flags & AG_BUTTON_STICKY)) { SetState(bu, binding, pState, 0); AG_PostEvent(NULL, bu, "button-pushed", "%i", 0); } AG_UnlockVariable(binding); }
static void UpdateSV(AG_HSVPal *pal, int ax, int ay) { float s, v; int x = ax - pal->triangle.x; int y = ay - pal->triangle.y; if (x < -y/2) { x = -y/2; } if (x > y/2) { x = y/2; } if (y > pal->triangle.h-1) { y = pal->triangle.h-1; } s = 1.0 - (float)y/(float)pal->triangle.h; v = 1.0 - (float)(x + y/2)/(float)pal->triangle.h; if (s < 0.0F) { s = 0.00001F; } else if (s > 1.0F) { s = 1.0F; } if (v < 0.0F) { v = 0.0001F; } else if (v > 1.0F) { v = 1.0F; } AG_SetFloat(pal, "saturation", s); AG_SetFloat(pal, "value", v); UpdatePixelFromHSVA(pal); AG_PostEvent(NULL, pal, "sv-changed", NULL); pal->flags |= AG_HSVPAL_DIRTY; AG_Redraw(pal); }
static void SetComplementaryColor(AG_Event *event) { AG_HSVPal *pal = AG_PTR(1); float hue; AG_ObjectLock(pal); hue = AG_GetFloat(pal, "hue"); AG_SetFloat(pal, "hue", ((int)hue+180) % 359); UpdatePixelFromHSVA(pal); pal->flags |= AG_HSVPAL_DIRTY; AG_PostEvent(NULL, pal, "h-changed", NULL); AG_PostEvent(NULL, pal, "sv-changed", NULL); AG_ObjectUnlock(pal); AG_Redraw(pal); }
/* Delay/repeat timer callbacks for AG_BUTTON_REPEAT */ static Uint32 ExpireRepeat(AG_Timer *to, AG_Event *event) { AG_Button *bu = AG_SELF(); AG_PostEvent(NULL, bu, "button-pushed", "%i", 1); return (to->ival); }
/* * If there is a modal window, request its shutdown if a click is * detected outside of its area. */ static int GenericModalClose(AG_Window *win, int x, int y) { if (!AG_WidgetArea(win, x, y)) { AG_PostEvent(NULL, win, "window-modal-close", NULL); return (1); } return (0); }
static void FileChosen(AG_Event *event) { AG_FileSelector *fs = AG_PTR(1); char *path = AG_STRING(2); AG_TextboxSetString(fs->tbox, path); AG_PostEvent(NULL, fs, "file-chosen", "%s", path); Collapse(fs); }
static void MouseButtonUp(AG_Event *event) { AG_Slider *sl = AG_SELF(); if (sl->ctlPressed) { sl->ctlPressed = 0; sl->xOffs = 0; AG_PostEvent(NULL, sl, "slider-drag-end", NULL); AG_Redraw(sl); } }
static void PasteColor(AG_Event *event) { AG_HSVPal *pal = AG_PTR(1); AG_ObjectLock(pal); AG_MutexLock(&CopyLock); AG_SetFloat(pal, "hue", cH); AG_SetFloat(pal, "saturation", cS); AG_SetFloat(pal, "value", cV); AG_SetFloat(pal, "alpha", cA); AG_MutexUnlock(&CopyLock); UpdatePixelFromHSVA(pal); pal->flags |= AG_HSVPAL_DIRTY; AG_PostEvent(NULL, pal, "h-changed", NULL); AG_PostEvent(NULL, pal, "sv-changed", NULL); AG_ObjectUnlock(pal); AG_Redraw(pal); }
static void MouseButtonDown(AG_Event *event) { AG_Slider *sl = AG_SELF(); int button = AG_INT(1); int x = ((sl->type == AG_SLIDER_HORIZ) ? AG_INT(2) : AG_INT(3)); int pos; if (button != AG_MOUSE_LEFT) { return; } if (GetPosition(sl, &pos) == -1) return; if (!AG_WidgetIsFocused(sl)) { AG_WidgetFocus(sl); } if (x >= pos && x <= (pos + sl->wControl)) { /* * Click on the slider itself. We don't do anything except * saving the cursor position which we will use in future * mousemotion events. */ sl->ctlPressed = 1; sl->xOffs = x - pos; AG_PostEvent(NULL, sl, "slider-drag-begin", NULL); } else { /* * Click outside of control. We seek to the absolute position * described by the cursor. */ sl->ctlPressed = 1; sl->xOffs = sl->wControl/2; SeekToPosition(sl, x - sl->xOffs); AG_PostEvent(NULL, sl, "slider-drag-begin", NULL); } AG_Redraw(sl); }
static void Return(AG_Event *event) { char path[AG_PATHNAME_MAX]; AG_Textbox *tbox = AG_SELF(); AG_FileSelector *fs = AG_PTR(1); AG_ObjectLock(fs->filedlg); AG_TextboxCopyString(tbox, path, sizeof(path)); /* XXX TODO: Check access, AG_FILE_SELECTOR_ANY_FILE */ SetDirectoryAndFile(fs, path); AG_PostEvent(NULL, fs, "file-chosen", "%s", path); AG_ObjectUnlock(fs->filedlg); }
static void SelectedItem(AG_Event *event) { AG_Tlist *tl = AG_SELF(); AG_Combo *com = AG_PTR(1); AG_TlistItem *ti; AG_ObjectLock(tl); if ((ti = AG_TlistSelectedItem(tl)) != NULL) { AG_TextboxSetString(com->tbox, ti->text); AG_PostEvent(NULL, com, "combo-selected", "%p", ti); } AG_ObjectUnlock(tl); Collapse(com); }
static void UpdateHue(AG_HSVPal *pal, int x, int y) { float h; h = Atan2((float)y, (float)x); if (h < 0) { h += (float)(2*AG_PI); } AG_SetFloat(pal, "hue", h/(2*AG_PI)*360.0); UpdatePixelFromHSVA(pal); AG_PostEvent(NULL, pal, "h-changed", NULL); pal->flags |= AG_HSVPAL_DIRTY; AG_Redraw(pal); }
static void SelectedItem(AG_Event *event) { AG_Tlist *tl = AG_SELF(); AG_UCombo *com = AG_PTR(1); AG_TlistItem *it; AG_ObjectLock(com); AG_ObjectLock(tl); if ((it = AG_TlistSelectedItem(tl)) != NULL) { it->selected++; AG_ButtonTextS(com->button, it->text); AG_PostEvent(NULL, com, "ucombo-selected", "%p", it); } Collapse(com); AG_ObjectUnlock(tl); AG_ObjectUnlock(com); }
static void UpdateAlpha(AG_HSVPal *pal, int x) { AG_Variable *bAlpha; void *pAlpha; bAlpha = AG_GetVariable(pal, "alpha", &pAlpha); switch (AG_VARIABLE_TYPE(bAlpha)) { case AG_VARIABLE_FLOAT: *(float *)pAlpha = ((float)x)/((float)pal->rAlpha.w); if (*(float *)pAlpha > 1.0) { *(float *)pAlpha = 1.0; } else if (*(float *)pAlpha < 0.0) { *(float *)pAlpha = 0.0; } break; case AG_VARIABLE_DOUBLE: *(double *)pAlpha = ((double)x)/((double)pal->rAlpha.w); if (*(double *)pAlpha > 1.0) { *(double *)pAlpha = 1.0; } else if (*(double *)pAlpha < 0.0) { *(double *)pAlpha = 0.0; } break; case AG_VARIABLE_INT: *(int *)pAlpha = x/pal->rAlpha.w; if (*(int *)pAlpha > 255) { *(int *)pAlpha = 255; } else if (*(int *)pAlpha < 0) { *(int *)pAlpha = 0; } break; case AG_VARIABLE_UINT8: *(Uint8 *)pAlpha = (Uint8)(x/pal->rAlpha.w); break; default: break; } AG_UnlockVariable(bAlpha); UpdatePixelFromHSVA(pal); AG_PostEvent(NULL, pal, "a-changed", NULL); AG_Redraw(pal); }
static void Decrement(AG_Slider *sl) { AG_Variable *bVal, *bMin, *bMax, *bInc; void *pVal, *pMin, *pMax, *pInc; bVal = AG_GetVariable(sl, "value", &pVal); bMin = AG_GetVariable(sl, "min", &pMin); bMax = AG_GetVariable(sl, "max", &pMax); bInc = AG_GetVariable(sl, "inc", &pInc); switch (AG_VARIABLE_TYPE(bVal)) { case AG_VARIABLE_FLOAT: DECREMENT(float); break; case AG_VARIABLE_DOUBLE: DECREMENT(double); break; #ifdef HAVE_LONG_DOUBLE case AG_VARIABLE_LONG_DOUBLE: DECREMENT(long double); break; #endif case AG_VARIABLE_INT: DECREMENT(int); break; case AG_VARIABLE_UINT: DECREMENT(Uint); break; case AG_VARIABLE_UINT8: DECREMENT(Uint8); break; case AG_VARIABLE_SINT8: DECREMENT(Sint8); break; case AG_VARIABLE_UINT16: DECREMENT(Uint16); break; case AG_VARIABLE_SINT16: DECREMENT(Sint16); break; case AG_VARIABLE_UINT32: DECREMENT(Uint32); break; case AG_VARIABLE_SINT32: DECREMENT(Sint32); break; #ifdef HAVE_64BIT case AG_VARIABLE_UINT64: DECREMENT(Uint64); break; case AG_VARIABLE_SINT64: DECREMENT(Sint64); break; #endif default: break; } AG_PostEvent(NULL, sl, "slider-changed", NULL); AG_UnlockVariable(bVal); AG_UnlockVariable(bMin); AG_UnlockVariable(bMax); AG_UnlockVariable(bInc); AG_Redraw(sl); }
static __inline__ void SeekToPosition(AG_Slider *sl, int x) { AG_Variable *bMin, *bMax, *bVal; void *pMin, *pMax, *pVal; bVal = AG_GetVariable(sl, "value", &pVal); bMin = AG_GetVariable(sl, "min", &pMin); bMax = AG_GetVariable(sl, "max", &pMax); switch (AG_VARIABLE_TYPE(bVal)) { case AG_VARIABLE_FLOAT: SEEK_TO_POSITION(float); break; case AG_VARIABLE_DOUBLE: SEEK_TO_POSITION(double); break; #ifdef HAVE_LONG_DOUBLE case AG_VARIABLE_LONG_DOUBLE: SEEK_TO_POSITION(long double); break; #endif case AG_VARIABLE_INT: SEEK_TO_POSITION(int); break; case AG_VARIABLE_UINT: SEEK_TO_POSITION(Uint); break; case AG_VARIABLE_UINT8: SEEK_TO_POSITION(Uint8); break; case AG_VARIABLE_SINT8: SEEK_TO_POSITION(Sint8); break; case AG_VARIABLE_UINT16: SEEK_TO_POSITION(Uint16); break; case AG_VARIABLE_SINT16: SEEK_TO_POSITION(Sint16); break; case AG_VARIABLE_UINT32: SEEK_TO_POSITION(Uint32); break; case AG_VARIABLE_SINT32: SEEK_TO_POSITION(Sint32); break; #ifdef HAVE_64BIT case AG_VARIABLE_UINT64: SEEK_TO_POSITION(Uint64); break; case AG_VARIABLE_SINT64: SEEK_TO_POSITION(Sint64); break; #endif default: break; } AG_PostEvent(NULL, sl, "slider-changed", NULL); AG_UnlockVariable(bMax); AG_UnlockVariable(bMin); AG_UnlockVariable(bVal); AG_Redraw(sl); }
static void EditablePostChg(AG_Event *event) { AG_PostEvent(NULL, AG_PTR(1), "textbox-postchg", NULL); }
static void EditableReturn(AG_Event *event) { AG_PostEvent(NULL, AG_PTR(1), "textbox-return", NULL); }