void GUI_init(GUI* gui) { Widget *w; int i; w = (Widget*)gui; Widget_init(w); w->type = WIDGET_GUI; for(i=0; i<SDL_NUM_SCANCODES; ++i) { gui->keyupfunc[i] = NULL; gui->keydownfunc[i] = NULL; } gui->anykeyupfunc = NULL; gui->anykeydownfunc = NULL; gui->lbuttondownfunc = NULL; gui->lbuttonupfunc = NULL; gui->rbuttondownfunc = NULL; gui->rbuttonupfunc = NULL; gui->mbuttondownfunc = NULL; gui->mbuttonupfunc = NULL; gui->mousewheelfunc = NULL; gui->mousemovefunc = NULL; w->hidden = ecfalse; }
Padding Padding_create(Vector2i desired_size, Widget *content, int amount) { Padding instance; Widget_init(&instance.base, &padding_class, desired_size); instance.content = content; instance.amount = amount; return instance; }
void ViewLayer_init(ViewLayer *v, const char* n, Widget* parent) { Widget *bw; bw = (Widget*)v; Widget_init(bw); strcpy(bw->name, n); bw->opened = ecfalse; bw->type = WIDGET_VIEWLAYER; bw->parent = parent; bw->hidden = ectrue; bw->reframefunc = Resize_Fullscreen; Widget_reframe(bw); }
////////////////////////////////////////////////////// //// Widget functions RootWidget* RootWidget_init() { check( game, "Can't init widget without running game.\n" ); RootWidget* rootWidget = byte_alloc( sizeof( RootWidget ) ); if( rootWidget ) { rootWidget->keyListener = rootKeyListener; rootWidget->mouseListener = rootMouseListener; rootWidget->mouseDown = false; EventManager_addListener( LT_MouseListener, rootWidget->mouseListener, rootWidget ); EventManager_addListener( LT_KeyListener, rootWidget->keyListener, rootWidget ); vec2i size = Context_getSize(); rootWidget->widget = Widget_init( WT_Root, &size, NULL, NULL, -1 ); } return rootWidget; error : return NULL; }
Widget* Widget_createWindowHead( Widget* window, u32 name ) { Widget* head = Widget_init( WT_WindowHead, &(vec2i){ window->size.x, 17 }, "quadmesh.json", "widgettexture.png", name ); Widget* icon = Widget_init( WT_Sprite, &(vec2i){ 11, 11 }, "quadmesh.json", "winicon.png", -1 ); Widget* cross = Widget_init( WT_Button, &(vec2i){ 11, 11 }, "quadmesh.json", "cross.png", -1 ); // The window contour is composed of 9 rectangles the main one, the ones on the side and the ones in the corners. Widget* windowOutline = Widget_init( WT_Button, &(vec2i){ window->size.x + 10, window->size.y + head->size.y + 11 }, "quadmesh.json", "widgetcontour.png", -1 ); // Corners of the contour Widget* windowCornerTopLeft = Widget_init( WT_Button, &(vec2i){ 5, 5 }, "quadmesh.json", "right.png", -1 ); Widget* windowCornerTopRight = Widget_init( WT_Button, &(vec2i){ 5, 5 }, "quadmesh.json", "bottom.png", -1 ); Widget* windowCornerBottomLeft = Widget_init( WT_Button, &(vec2i){ 5, 5 }, "quadmesh.json", "top.png", -1 ); Widget* windowCornerBottomRight = Widget_init( WT_Button, &(vec2i){ 5, 5 }, "quadmesh.json", "left.png", -1 ); // Sides of the contour Widget* windowSideTop = Widget_init( WT_Button, &(vec2i){ window->size.x, 5 }, "quadmesh.json", "top.png", -1 ); Widget* windowSideLeft = Widget_init( WT_Button, &(vec2i){ 5, window->size.y + head->size.y + 1}, "quadmesh.json", "left.png", -1 ); Widget* windowSideRight = Widget_init( WT_Button, &(vec2i){ 5, window->size.y + head->size.y + 1 }, "quadmesh.json", "right.png", -1 ); Widget* windowSideBottom = Widget_init( WT_Button, &(vec2i){ window->size.x, 5 }, "quadmesh.json", "bottom.png", -1 ); head->position.x = window->position.x; head->position.y = window->position.y - 18; head->depth = window->depth; head->textOffset = vec2i_c( 18, 1 ); head->callback = &moveWindowCallback; vec2i windowExtents = vec2i_add( &window->position, &window->size ); windowOutline->position.x = head->position.x - 5; windowOutline->position.y = head->position.y - 5; windowOutline->depth = window->depth + 1; windowCornerTopLeft->position.x = head->position.x - 5; windowCornerTopLeft->position.y = head->position.y - 5; windowCornerTopLeft->depth = windowOutline->depth - 1; windowCornerTopLeft->callback = &topLeftResizeCallback; windowCornerTopRight->position.x = windowExtents.x; windowCornerTopRight->position.y = head->position.y - 5; windowCornerTopRight->depth = windowOutline->depth - 1; windowCornerTopRight->callback = &topRightResizeCallback; windowCornerBottomLeft->position.x = window->position.x - 5; windowCornerBottomLeft->position.y = windowExtents.y; windowCornerBottomLeft->depth = windowOutline->depth - 1; windowCornerBottomLeft->callback = &bottomLeftResizeCallback; windowCornerBottomRight->position.x = windowExtents.x; windowCornerBottomRight->position.y = windowExtents.y; windowCornerBottomRight->depth = windowOutline->depth - 1; windowCornerBottomRight->callback = &bottomRightResizeCallback; windowSideTop->position.x = window->position.x; windowSideTop->position.y = head->position.y - 5; windowSideTop->depth = windowOutline->depth - 1; windowSideTop->callback = &topResizeCallback; windowSideLeft->position.x = window->position.x - 5; windowSideLeft->position.y = head->position.y; windowSideLeft->depth = windowOutline->depth - 1; windowSideLeft->callback = &leftResizeCallback; windowSideRight->position.x = windowExtents.x; windowSideRight->position.y = head->position.y; windowSideRight->depth = windowOutline->depth - 1; windowSideRight->callback = &rightResizeCallback; windowSideBottom->position.x = window->position.x; windowSideBottom->position.y = windowExtents.y; windowSideBottom->depth = windowOutline->depth - 1; windowSideBottom->callback = &bottomResizeCallback; Widget_addChild( head, window, false, WA_None ); Widget_addChild( head, windowOutline, false, WA_None ); Widget_addChild( windowOutline, windowSideTop, true, WA_None ); Widget_addChild( windowOutline, windowSideLeft, true, WA_None ); Widget_addChild( windowOutline, windowSideRight, true, WA_None ); Widget_addChild( windowOutline, windowSideBottom, true, WA_None ); Widget_addChild( windowOutline, windowCornerTopLeft, true, WA_None ); Widget_addChild( windowOutline, windowCornerTopRight, true, WA_None ); Widget_addChild( windowOutline, windowCornerBottomLeft, true, WA_None ); Widget_addChild( windowOutline, windowCornerBottomRight, true, WA_None ); vec2i iconOffset = vec2i_c( 3, 3 ); icon->position = vec2i_add( &iconOffset, &head->position ); icon->depth = window->depth - 1; vec2i crossOffset = vec2i_c( window->size.x - 13, 3 ); cross->position = vec2i_add( &crossOffset, &head->position ); cross->depth = window->depth - 1; cross->callback = &windowCloseButtonCallback; Widget_addChild( head, icon, true, WA_None ); Widget_addChild( head, cross, true, WA_None ); return head; }