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); }
/* Close and destroy a driver. */ void AG_DriverClose(AG_Driver *drv) { AG_ObjectDetach(drv); AGDRIVER_CLASS(drv)->close(drv); AG_ObjectDestroy(drv); }
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 OnAttach(AG_Event *event) { AG_Widget *parent = AG_SENDER(); if (!(AGDRIVER_CLASS(parent->drv)->flags & AG_DRIVER_OPENGL)) AG_FatalError("AG_GLView requires a driver with GL support"); }