UNIXworkcode

1 /* 2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 3 * 4 * Copyright 2017 Olaf Wintermann. All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 * POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 #include <stdio.h> 30 #include <stdlib.h> 31 32 #include "object.h" 33 #include "context.h" 34 35 void ui_end(UiObject *obj) { 36 if(!obj->next) { 37 return; 38 } 39 40 UiObject *prev = NULL; 41 while(obj->next) { 42 prev = obj; 43 obj = obj->next; 44 } 45 46 if(prev) { 47 // TODO: free last obj 48 prev->next = NULL; 49 } 50 } 51 52 53 UiObject* uic_object_new(UiObject *toplevel, UIWIDGET widget) { 54 UiContext *ctx = toplevel->ctx; 55 56 UiObject *newobj = ucx_mempool_calloc(ctx->mempool, 1, sizeof(UiObject)); 57 newobj->ctx = ctx; 58 newobj->widget = widget; 59 60 return newobj; 61 } 62 63 void uic_obj_add(UiObject *toplevel, UiObject *ctobj) { 64 UiObject *current = uic_current_obj(toplevel); 65 current->next = ctobj; 66 } 67 68 UiObject* uic_current_obj(UiObject *toplevel) { 69 if(!toplevel) { 70 return NULL; 71 } 72 UiObject *obj = toplevel; 73 while(obj->next) { 74 obj = obj->next; 75 } 76 return obj; 77 } 78 79 UiContainer* uic_get_current_container(UiObject *obj) { 80 return uic_current_obj(obj)->container; 81 } 82