Skip to content
Snippets Groups Projects
Select Git revision
  • 73a7a2d01775c28f725a50b2747f4d4d747e8cbe
  • main default protected
  • Issue/3133-subProjectsChanges
  • dev protected
  • Issue/2489-addNotificationManagement
  • Issue/3085-useNewApiClient
  • Issue/3043-DataStorageNrwResource
  • Issue/3011-maintenanceMode
  • Issue/2446-addingResponsibleOrganization
  • Issue/2900-removeInsituteField
  • Issue/2981-dataPubInDb
  • Issue/2881-messageController
  • Issue/2921-changesToDataPublicationFeature
  • Issue/2926-regAppLogin
  • Issue/2672-fixSfbPidPointing
  • Issue/2875-devcontainer
  • Issue/2401-advisoryServiceUI2
  • Issue/2445-extractedMetadata
  • Issue/2829-useHrefProperty
  • Issue/xxxx-configurableApiHostname
  • Issue/2627-addPidRecord
  • v3.16.0
  • v3.15.0
  • v3.14.0
  • v3.13.0
  • v3.12.0
  • v3.11.0
  • v3.10.0
  • v3.9.0
  • v3.8.0
  • v3.7.0
  • v3.6.0
  • v3.5.0
  • v3.4.3
  • v3.4.2
  • v3.4.1
  • v3.4.0
  • v3.3.2-package.0
  • v3.3.1
  • v3.3.0
  • v3.2.1
41 results

index.ts

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    board_xml_layout.c 3.17 KiB
    #ifndef _BOARD_XML_LAYOUT_C
    #define _BOARD_XML_LAYOUT_C
    
    #include "board_xml_common.c"
    
    #include <stdbool.h>
    
    typedef struct {
        GLfloat size;
    } board_xml_spacer_layout_t;
    
    static BOARD_XML_LAYOUT_ONLAYOUT(board_xml_spacer_layout_onLayout, data, board) {
        board_xml_data_cast(board_xml_spacer_layout_t, spacer, data);
        glLSpacer(spacer->size);
    }
    
    static void board_xml_spacer_layout_parse(board_xml_t *b, xmlNode *node, board_xml_layout_t *layout) {
        layout->onLayout = board_xml_spacer_layout_onLayout;
        board_xml_spacer_layout_t *spacer = layout->data = calloc(1, sizeof(board_xml_spacer_layout_t)); // free
    
        spacer->size = board_xml_float_parse(xmlUtilsFindAttrVal(node, "size"), 2.0f);
    }
    
    
    
    typedef struct {
        bool isHorizontal;
        size_t childCount;
        board_xml_layout_t *children;
    } board_xml_linear_layout_t;
    
    static BOARD_XML_LAYOUT_INIT(board_xml_linear_layout_init, data, board) {
        board_xml_data_cast(board_xml_linear_layout_t, linear, data);
        for (size_t i = 0; i < linear->childCount; i++) board_xml_layout_init(&linear->children[i], board);
    }
    static BOARD_XML_LAYOUT_ONLAYOUT(board_xml_linear_layout_onLayout, data, board) {
        board_xml_data_cast(board_xml_linear_layout_t, linear, data);
        linear->isHorizontal ? glLBeginHorizontal() : glLBeginVertical();
        for (size_t i = 0; i < linear->childCount; i++) board_xml_layout_onLayout(&linear->children[i], board);
        linear->isHorizontal ? glLEndHorizontal() : glLEndVertical();
    }
    static BOARD_XML_LAYOUT_ONKEY(board_xml_linear_layout_onKey, data, board, key, scancode, action, mods) {
        board_xml_data_cast(board_xml_linear_layout_t, linear, data);
        for (size_t i = 0; i < linear->childCount; i++)
            board_xml_layout_onKey(&linear->children[i], board, key, scancode, action, mods);
    }
    static BOARD_XML_LAYOUT_FREE(board_xml_linear_layout_free, data) {
        board_xml_data_cast(board_xml_linear_layout_t, linear, data);
        for (size_t i = 0; i < linear->childCount; i++) board_xml_layout_free(&linear->children[i]);
        free(linear->children);
    }
    
    
    static void board_xml_linear_layout_parse(board_xml_t *b, xmlNode *node, board_xml_layout_t *layout, bool isHorizontal) {
        layout->init = board_xml_linear_layout_init;
        layout->onLayout = board_xml_linear_layout_onLayout;
        layout->onKey = board_xml_linear_layout_onKey;
        layout->free = board_xml_linear_layout_free;
        board_xml_linear_layout_t *linear = layout->data = calloc(1, sizeof(board_xml_linear_layout_t)); // free
        
        linear->isHorizontal = isHorizontal;
        linear->childCount = xmlChildElementCount(node);
        board_xml_layout_t *children = linear->children = calloc(linear->childCount, sizeof(board_xml_layout_t));
        size_t index = 0;
        for (node = node->children; node; node = node->next) if (node->type == XML_ELEMENT_NODE)
            board_xml_layout_parse(b, node, &children[index++]);
    }
    static void board_xml_vertical_layout_parse(board_xml_t *b, xmlNode *node, board_xml_layout_t *layout) {
        board_xml_linear_layout_parse(b, node, layout, false);
    }
    static void board_xml_horizontal_layout_parse(board_xml_t *b, xmlNode *node, board_xml_layout_t *layout) {
        board_xml_linear_layout_parse(b, node, layout, true);
    }
    
    
    
    
    #endif // _BOARD_XML_LAYOUT_C