예제 #1
0
파일: textbox.c 프로젝트: adsr/agar
/* Set the text from a format string. */
void
AG_TextboxPrintf(AG_Textbox *tb, const char *fmt, ...)
{
	AG_Variable *stringb;
	va_list args;
	char *text;

	AG_ObjectLock(tb->ed);
	stringb = AG_GetVariable(tb->ed, "string", &text);
	if (fmt != NULL && fmt[0] != '\0') {
		va_start(args, fmt);
		Vsnprintf(text, stringb->info.size, fmt, args);
		va_end(args);
		tb->ed->pos = AG_LengthUTF8(text);
	} else {
		text[0] = '\0';
		tb->ed->pos = 0;
	}
	AG_TextboxBufferChanged(tb);
	AG_UnlockVariable(stringb);
	AG_ObjectUnlock(tb->ed);

	/* XXX for AG_Numerical, etc. */
	AG_Redraw(tb);
}
예제 #2
0
파일: titlebar.c 프로젝트: varialus/agar
AG_Titlebar *
AG_TitlebarNew(void *parent, Uint flags)
{
	AG_Titlebar *tbar;

	tbar = Malloc(sizeof(AG_Titlebar));
	AG_ObjectInit(tbar, &agTitlebarClass);
	tbar->flags |= flags;
	
	AG_ObjectAttach(parent, tbar);

	/*
	 * Manually update the window/driver pointers since AG_TitlebarNew()
	 * is called from the Window attach routine.
	 */
	AG_ObjectLock(tbar);
	tbar->win = (AG_Window *)parent;
	WIDGET(tbar)->window = tbar->win;
	WIDGET(tbar)->drv = WIDGET(parent)->drv;
	WIDGET(tbar)->drvOps = AGDRIVER_CLASS(WIDGET(tbar)->drv);
	AG_ObjectUnlock(tbar);
	
	if ((flags & AG_TITLEBAR_NO_MAXIMIZE) == 0)
		CreateMaximizeButton(tbar);
	if ((flags & AG_TITLEBAR_NO_MINIMIZE) == 0)
		CreateMinimizeButton(tbar);
	if ((flags & AG_TITLEBAR_NO_CLOSE) == 0)
		CreateCloseButton(tbar);

	return (tbar);
}
예제 #3
0
파일: slider.c 프로젝트: LiberatorUSA/GUCEF
void
AG_SliderSetIntIncrement(AG_Slider *sl, int inc)
{
	AG_ObjectLock(sl);
	AG_SetInt(sl, "inc", inc);
	AG_ObjectUnlock(sl);
}
예제 #4
0
파일: combo.c 프로젝트: adsr/agar
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);
}
예제 #5
0
파일: slider.c 프로젝트: LiberatorUSA/GUCEF
void
AG_SliderSetRealIncrement(AG_Slider *sl, double inc)
{
	AG_ObjectLock(sl);
	AG_SetDouble(sl, "inc", inc);
	AG_ObjectUnlock(sl);
}
예제 #6
0
파일: statusbar.c 프로젝트: varialus/agar
AG_Label *
AG_StatusbarAddLabel(AG_Statusbar *sbar, const char *fmt, ...)
{
	AG_Label *lab;
	va_list ap;

	AG_ObjectLock(sbar);
#ifdef AG_DEBUG
	if (sbar->nlabels+1 >= AG_STATUSBAR_MAX_LABELS)
		AG_FatalError("AG_StatusbarAddLabel: Too many labels");
#endif
	sbar->labels[sbar->nlabels] = Malloc(sizeof(AG_Label));
	lab = sbar->labels[sbar->nlabels];

	AG_ObjectInit(lab, &agLabelClass);
	lab->type = AG_LABEL_STATIC;
	va_start(ap, fmt);
	Vasprintf(&lab->text, fmt, ap);
	va_end(ap);
	AG_ExpandHoriz(lab);

	AG_ObjectAttach(&sbar->box, lab);
	lab = sbar->labels[sbar->nlabels++];
	AG_ObjectUnlock(sbar);
	AG_Redraw(sbar);
	return (lab);
}
예제 #7
0
파일: glview.c 프로젝트: varialus/agar
void
AG_GLViewSetBgColor(AG_GLView *glv, AG_Color c)
{
	AG_ObjectLock(glv);
	glv->bgColor = c;
	AG_ObjectUnlock(glv);
}
예제 #8
0
파일: button.c 프로젝트: varialus/agar
void
AG_ButtonSetSticky(AG_Button *bu, int flag)
{
	AG_ObjectLock(bu);
	AG_SETFLAGS(bu->flags, AG_BUTTON_STICKY, flag);
	AG_ObjectUnlock(bu);
}
예제 #9
0
파일: button.c 프로젝트: varialus/agar
void
AG_ButtonInvertState(AG_Button *bu, int flag)
{
	AG_ObjectLock(bu);
	AG_SETFLAGS(bu->flags, AG_BUTTON_INVSTATE, flag);
	AG_ObjectUnlock(bu);
}
예제 #10
0
파일: ucombo.c 프로젝트: 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);
}
예제 #11
0
/*
 *  セレクト
 */
BOOL SelectDraw(void)
{
   BOOL ret;
   AG_Color nullcolor;
   AG_Rect rect;
   AG_Widget *w;
   BYTE bold = bMode;
   int y;

   if (SelectCheck()) {
      return TRUE;
   }

   
   rect.h = nDrawWidth;
   rect.w = nDrawHeight;
   rect.x = 0;
   rect.y = 0;
   DrawSHUTDOWN = FALSE;
   /*
    * すべてクリア
    */
   if(!bUseOpenGL) {
    if(DrawArea != NULL) {
       AG_ObjectLock(DrawArea);
       nullcolor.r = 0;
       nullcolor.g = 0;
       nullcolor.b = 0;
       nullcolor.a = 255;
       AG_FillRect(AGWIDGET(DrawArea)->drv->sRef , &rect, nullcolor);
       AG_ObjectUnlock(DrawArea);
    }
   } else { // OpenGLのとき
   }
   /*
    * すべてクリア
    */
   bOldFullScan = bFullScan;
	 /*
	  * セレクト
	  */
#if XM7_VER >= 3
	 switch (screen_mode) {
	 case SCR_400LINE:
		 ret =  Select400l();
	 case SCR_262144:
		 ret = Select256k();
	 case SCR_4096:
		 ret = Select320();
	 default:
		 ret = Select640();
	 }
#else				/*  */
if (mode320) {
	ret = Select320();
} else {
	ret =  Select640();
}
} else {
예제 #12
0
파일: glview.c 프로젝트: adsr/agar
void
AG_GLViewScaleFn(AG_GLView *glv, AG_EventFn fn, const char *fmt, ...)
{
    AG_ObjectLock(glv);
    glv->scale_ev = AG_SetEvent(glv, NULL, fn, NULL);
    AG_EVENT_GET_ARGS(glv->scale_ev, fmt);
    AG_ObjectUnlock(glv);
}
예제 #13
0
파일: glview.c 프로젝트: adsr/agar
void
AG_GLViewSizeHint(AG_GLView *glv, int w, int h)
{
    AG_ObjectLock(glv);
    glv->wPre = w;
    glv->hPre = h;
    AG_ObjectUnlock(glv);
}
예제 #14
0
파일: combo.c 프로젝트: adsr/agar
void
AG_ComboSelect(AG_Combo *com, AG_TlistItem *it)
{
	AG_ObjectLock(com->list);
	AG_TextboxSetString(com->tbox, it->text);
	AG_TlistSelect(com->list, it);
	AG_ObjectUnlock(com->list);
}
예제 #15
0
파일: separator.c 프로젝트: adsr/agar
void
AG_SeparatorSetPadding(AG_Separator *sep, Uint pixels)
{
    AG_ObjectLock(sep);
    sep->padding = pixels;
    AG_ObjectUnlock(sep);
    AG_Redraw(sep);
}
예제 #16
0
파일: textbox.c 프로젝트: adsr/agar
/* Configure alternate font */
void
AG_TextboxSetFont(AG_Textbox *tb, AG_Font *font)
{
	AG_ObjectLock(tb);
	tb->font = font;
	AG_ObjectUnlock(tb);
	AG_Redraw(tb);
}
예제 #17
0
파일: glview.c 프로젝트: adsr/agar
void
AG_GLViewMotionFn(AG_GLView *glv, AG_EventFn fn, const char *fmt, ...)
{
    AG_ObjectLock(glv);
    glv->motion_ev = AG_SetEvent(glv, "mouse-motion", fn, NULL);
    AG_EVENT_GET_ARGS(glv->motion_ev, fmt);
    AG_ObjectUnlock(glv);
}
예제 #18
0
파일: glview.c 프로젝트: adsr/agar
void
AG_GLViewButtonupFn(AG_GLView *glv, AG_EventFn fn, const char *fmt, ...)
{
    AG_ObjectLock(glv);
    glv->btnup_ev = AG_SetEvent(glv, "mouse-button-up", fn, NULL);
    AG_EVENT_GET_ARGS(glv->btnup_ev, fmt);
    AG_ObjectUnlock(glv);
}
예제 #19
0
파일: glview.c 프로젝트: adsr/agar
void
AG_GLViewKeyupFn(AG_GLView *glv, AG_EventFn fn, const char *fmt, ...)
{
    AG_ObjectLock(glv);
    glv->keyup_ev = AG_SetEvent(glv, "key-up", fn, NULL);
    AG_EVENT_GET_ARGS(glv->keyup_ev, fmt);
    AG_ObjectUnlock(glv);
}
예제 #20
0
void
AG_FileSelectorSetFile(AG_FileSelector *fs, const char *path)
{
    AG_ObjectLock(fs->filedlg);
    SetDirectoryAndFile(fs, path);
    AG_TextboxSetString(fs->tbox, path);
    AG_ObjectUnlock(fs->filedlg);
}
예제 #21
0
파일: ucombo.c 프로젝트: adsr/agar
void
AG_UComboSizeHintPixels(AG_UCombo *com, int w, int h)
{
	AG_ObjectLock(com);
	com->wPreList = w;
	com->hPreList = h;
	AG_ObjectUnlock(com);
}
예제 #22
0
파일: ucombo.c 프로젝트: adsr/agar
void
AG_UComboSizeHint(AG_UCombo *com, const char *text, int h)
{
	AG_ObjectLock(com);
	AG_TextSize(text, &com->wPreList, NULL);
	com->hPreList = h;
	AG_ObjectUnlock(com);
}
예제 #23
0
파일: ucombo.c 프로젝트: adsr/agar
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);
}
예제 #24
0
파일: glview.c 프로젝트: varialus/agar
void
AG_GLViewOverlayFn(void *obj, AG_EventFn fn, const char *fmt, ...)
{
	AG_GLView *glv = obj;

	AG_ObjectLock(glv);
	glv->overlay_ev = AG_SetEvent(glv, NULL, fn, NULL);
	AG_EVENT_GET_ARGS(glv->overlay_ev, fmt);
	AG_ObjectUnlock(glv);
}
예제 #25
0
파일: glview.c 프로젝트: varialus/agar
void
AG_GLViewButtondownFn(void *obj, AG_EventFn fn, const char *fmt, ...)
{
	AG_GLView *glv = obj;

	AG_ObjectLock(glv);
	glv->btndown_ev = AG_SetEvent(glv, "mouse-button-down", fn, NULL);
	AG_EVENT_GET_ARGS(glv->btndown_ev, fmt);
	AG_ObjectUnlock(glv);
}
예제 #26
0
파일: glview.c 프로젝트: varialus/agar
void
AG_GLViewKeydownFn(void *obj, AG_EventFn fn, const char *fmt, ...)
{
	AG_GLView *glv = obj;

	AG_ObjectLock(glv);
	glv->keydown_ev = AG_SetEvent(glv, "key-down", fn, NULL);
	AG_EVENT_GET_ARGS(glv->keydown_ev, fmt);
	AG_ObjectUnlock(glv);
}
예제 #27
0
파일: button.c 프로젝트: varialus/agar
void
AG_ButtonValign(AG_Button *bu, enum ag_text_valign va)
{
	AG_ObjectLock(bu);
	bu->valign = va;
	if (bu->lbl != NULL) {
		AG_LabelValign(bu->lbl, va);
	}
	AG_ObjectUnlock(bu);
}
예제 #28
0
파일: button.c 프로젝트: varialus/agar
void
AG_ButtonJustify(AG_Button *bu, enum ag_text_justify jus)
{
	AG_ObjectLock(bu);
	bu->justify = jus;
	if (bu->lbl != NULL) {
		AG_LabelJustify(bu->lbl, jus);
	}
	AG_ObjectUnlock(bu);
}
예제 #29
0
파일: db.c 프로젝트: varialus/agar
/* Synchronize a database. */
int
AG_DbSync(AG_Db *db)
{
	AG_DbClass *dbc = AGDB_CLASS(db);
	int rv;
	
	AG_ObjectLock(db);
	rv = (dbc->sync != NULL) ? dbc->sync(db) : 0;
	AG_ObjectUnlock(db);
	return (rv);
}
예제 #30
0
파일: button.c 프로젝트: varialus/agar
void
AG_ButtonSetPadding(AG_Button *bu, int lPad, int rPad, int tPad, int bPad)
{
	AG_ObjectLock(bu);
	if (lPad != -1) { bu->lPad = lPad; }
	if (rPad != -1) { bu->rPad = rPad; }
	if (tPad != -1) { bu->tPad = tPad; }
	if (bPad != -1) { bu->bPad = bPad; }
	AG_ObjectUnlock(bu);
	AG_Redraw(bu);
}