static void SizeRequest(void *obj, AG_SizeReq *r) { AG_Combo *com = obj; AG_SizeReq rChld; AG_WidgetSizeReq(com->tbox, &rChld); r->w = rChld.w; r->h = rChld.h; AG_WidgetSizeReq(com->button, &rChld); r->w += rChld.w; if (r->h < rChld.h) { r->h = rChld.h; } }
static void SizeRequest(void *obj, AG_SizeReq *r) { AG_FileSelector *fs = obj; AG_SizeReq rChld; AG_WidgetSizeReq(fs->tbox, &rChld); r->w = rChld.w; r->h = rChld.h; AG_WidgetSizeReq(fs->button, &rChld); r->w += rChld.w; if (r->h < rChld.h) { r->h = rChld.h; } }
static void Expand(AG_Event *event) { AG_UCombo *com = AG_PTR(1); AG_Driver *drv = WIDGET(com)->drv; int expand = AG_INT(2); AG_SizeReq rList; int x, y, w, h; Uint wView, hView; AG_ObjectLock(com); if (expand) { com->panel = AG_WindowNew(AG_WINDOW_POPUP|AG_WINDOW_MODAL| AG_WINDOW_NOTITLE); AG_ObjectSetName(com->panel, "_UComboPopup"); AG_WindowSetPadding(com->panel, 0,0,0,0); AG_ObjectAttach(com->panel, com->list); if (WIDGET(com)->window != NULL) AG_WindowAttach(WIDGET(com)->window, com->panel); if (com->wSaved > 0) { w = com->wSaved; h = com->hSaved; } else { if (com->wPreList != -1 && com->hPreList != -1) { AG_TlistSizeHintPixels(com->list, com->wPreList, com->hPreList); } AG_WidgetSizeReq(com->list, &rList); w = rList.w + com->panel->wBorderSide*2; h = rList.h + com->panel->wBorderBot; } x = WIDGET(com)->rView.x2 - w; y = WIDGET(com)->rView.y1; AG_GetDisplaySize(WIDGET(com)->drv, &wView, &hView); if (x+w > wView) { w = wView - x; } if (y+h > hView) { h = hView - y; } if (AGDRIVER_CLASS(drv)->wm == AG_WM_MULTIPLE && WIDGET(com)->window != NULL) { x += WIDGET(WIDGET(com)->window)->x; y += WIDGET(WIDGET(com)->window)->y; } if (x < 0) { x = 0; } if (y < 0) { y = 0; } if (w < 4 || h < 4) { Collapse(com); return; } AG_SetEvent(com->panel, "window-modal-close", ModalClose, "%p", com); AG_WindowSetGeometry(com->panel, x,y, w,h); AG_WindowShow(com->panel); } else { Collapse(com); } AG_ObjectUnlock(com); }
static void SizeRequest(void *obj, AG_SizeReq *r) { AG_Textbox *tb = obj; AG_SizeReq rEd, rLbl; AG_WidgetSizeReq(tb->ed, &rEd); r->w = tb->boxPadX*2 + rEd.w; r->h = tb->boxPadY*2 + rEd.h; if (tb->lbl != NULL) { AG_WidgetSizeReq(tb->lbl, &rLbl); r->w += rLbl.w; } r->h = MAX(r->h, agTextFontLineSkip); }
static void SizeRequest(void *obj, AG_SizeReq *r) { AG_UCombo *com = obj; AG_SizeReq rButton; AG_WidgetSizeReq(com->button, &rButton); r->w = rButton.w; r->h = rButton.h; }
static void SizeRequest(void *obj, AG_SizeReq *r) { AG_FontSelector *fs = obj; AG_SizeReq rChld; AG_WidgetSizeReq(fs->hPane, &rChld); r->w = rChld.w; r->h = rChld.h + fs->rPreview.h; }
static void Expand(AG_Event *event) { AG_FileSelector *fs = AG_PTR(1); AG_Driver *drv = WIDGET(fs)->drv; int expand = AG_INT(2); AG_SizeReq rFileDlg; int x, y, w, h; Uint wView, hView; if (expand) { /* Expand */ fs->panel = AG_WindowNew(AG_WINDOW_MODAL|AG_WINDOW_NOTITLE); AG_WindowSetPadding(fs->panel, 0, 0, 0, 0); AG_ObjectAttach(fs->panel, fs->filedlg); if (fs->wSaved > 0) { w = fs->wSaved; h = fs->hSaved; } else { AG_WidgetSizeReq(fs->filedlg, &rFileDlg); w = rFileDlg.w + fs->panel->wBorderSide*2; h = rFileDlg.h + fs->panel->wBorderBot; } x = WIDGET(fs)->rView.x2 - w; y = WIDGET(fs)->rView.y1; if (AGDRIVER_SINGLE(drv) && AG_GetDisplaySize(drv, &wView, &hView) == 0) { if (x+w > wView) { w = wView - x; } if (y+h > hView) { h = hView - y; } } if (w < 4 || h < 4) { Collapse(fs); return; } AG_SetEvent(fs->panel, "window-modal-close", ModalClose, "%p", fs); AG_WindowSetGeometry(fs->panel, x, y, w, h); AG_WindowShow(fs->panel); } else { Collapse(fs); } }
static void SizeRequest(void *p, AG_SizeReq *r) { AG_Button *bu = p; AG_SizeReq rLbl; r->w = bu->lPad + bu->rPad; r->h = bu->tPad + bu->bPad; if (bu->surface != -1) { r->w += WSURFACE(bu,bu->surface)->w; r->h += WSURFACE(bu,bu->surface)->h; } else { if (bu->lbl != NULL) { AG_WidgetSizeReq(bu->lbl, &rLbl); r->w += rLbl.w; } r->h += WIDGET(bu)->font->height; } }
static int SizeAllocate(void *obj, const AG_SizeAlloc *a) { AG_FileSelector *fs = obj; AG_SizeReq rBtn; AG_SizeAlloc aChld; AG_WidgetSizeReq(fs->button, &rBtn); if (a->w < rBtn.w) { return (-1); } aChld.x = 0; aChld.y = 0; aChld.w = a->w - rBtn.w - 1; aChld.h = a->h; AG_WidgetSizeAlloc(fs->tbox, &aChld); aChld.x = aChld.w + 1; aChld.w = rBtn.w; AG_WidgetSizeAlloc(fs->button, &aChld); return (0); }
static int CountChildWidgets(AG_Box *box, int *totFixed) { AG_Widget *chld; AG_SizeReq r; Uint count = 0; int fixed = 0; OBJECT_FOREACH_CHILD(chld, box, ag_widget) { AG_WidgetSizeReq(chld, &r); switch (box->type) { case AG_BOX_HORIZ: if ((chld->flags & AG_WIDGET_HFILL) == 0) fixed += r.w; break; case AG_BOX_VERT: if ((chld->flags & AG_WIDGET_VFILL) == 0) fixed += r.h; break; } count++; fixed += box->spacing; }
static int SizeAllocate(void *obj, const AG_SizeAlloc *a) { AG_Textbox *tb = obj; int boxPadW = tb->boxPadX*2; int boxPadH = tb->boxPadY*2; int wBar = 0, hBar = 0, wBarSz = 0, hBarSz = 0; AG_SizeAlloc aLbl, aEd, aSb; AG_SizeReq r; if (a->w < boxPadW*2 || a->h < boxPadH*2) return (-1); if (tb->lbl != NULL) { AG_WidgetSizeReq(tb->lbl, &r); aLbl.x = boxPadW; aLbl.y = boxPadH; aLbl.w = MIN(r.w, a->w); aLbl.h = MIN(r.h, a->h); AG_WidgetSizeAlloc(tb->lbl, &aLbl); } if (tb->flags & AG_TEXTBOX_MULTILINE) { if (tb->hBar != NULL && AG_WidgetVisible(tb->hBar)) { AG_WidgetSizeReq(tb->hBar, &r); hBarSz = MIN(r.h, a->h); aSb.x = 0; aSb.y = a->h - hBarSz; aSb.w = a->w - hBarSz + 1; aSb.h = hBarSz; AG_WidgetSizeAlloc(tb->hBar, &aSb); if (AG_ScrollbarVisible(tb->hBar)) hBar = aSb.h; } if (tb->vBar != NULL && AG_WidgetVisible(tb->vBar)) { AG_WidgetSizeReq(tb->vBar, &r); wBarSz = MIN(r.w, a->w); aSb.x = a->w - wBarSz; aSb.y = 0; aSb.w = wBarSz; aSb.h = a->h - hBarSz + 1; AG_WidgetSizeAlloc(tb->vBar, &aSb); if (AG_ScrollbarVisible(tb->vBar)) wBar = aSb.w; } tb->r.x = 0; tb->r.y = 0; tb->r.w = a->w; tb->r.h = a->h; } else { tb->r.x = (tb->lbl != NULL) ? WIDTH(tb->lbl) : 0; tb->r.y = 0; tb->r.w = a->w - tb->r.x; tb->r.h = a->h; } aEd.x = ((tb->lbl != NULL) ? WIDTH(tb->lbl) : 0) + tb->boxPadX; aEd.y = tb->boxPadY; aEd.w = a->w - boxPadW - aEd.x - wBar; aEd.h = a->h - boxPadH - hBar; AG_WidgetSizeAlloc(tb->ed, &aEd); return (0); }