Esempio n. 1
0
File: combo.c Progetto: adsr/agar
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; }
}
Esempio n. 2
0
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;
    }
}
Esempio n. 3
0
File: ucombo.c Progetto: adsr/agar
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);
}
Esempio n. 4
0
File: textbox.c Progetto: adsr/agar
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);
}
Esempio n. 5
0
File: ucombo.c Progetto: adsr/agar
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;
}
Esempio n. 6
0
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;
}
Esempio n. 7
0
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);
    }
}
Esempio n. 8
0
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;
	}
}
Esempio n. 9
0
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);
}
Esempio n. 10
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;
	}
Esempio n. 11
0
File: textbox.c Progetto: adsr/agar
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);
}