/** * Copyright (c) 2021 Dominic Masters * * This software is released under the MIT License. * https://opensource.org/licenses/MIT */ #include "menulist.h" void menuListInit(menulist_t *ml, texture_t *texture) { uint8_t i; ml->x = 0; ml->y = 0; ml->count = 0; frameInit(&ml->frame); ml->frame.texture = texture; } uint8_t menuListAdd(menulist_t *ml, font_t *font, char *text) { uint8_t i; label_t *label; menuitem_t *item; // Get the variables. i = ml->count; label = ml->labels + i; ml->items[i] = text; // Initialize the label. labelInit(label); labelSetText(label, font, text); // Reize the frame frameSetInnerSize( &ml->frame, 100, FONT_LINE_HEIGHT * fontGetScale(label->fontSize) * (i+1) ); // Add Menu Item item = menuAdd(&ml->menu); item->width = 1; item->height = 1; item->x = 0; item->y = i; ml->count++; return i; } void menuListUpdate(menulist_t *ml, engine_t *engine) { menuUpdate(&ml->menu, engine); } void menuListRender(menulist_t *ml, shader_t *shader) { uint8_t i; label_t *label; // Render the frame ml->frame.x = ml->x; ml->frame.y = ml->y; frameRender(&ml->frame, shader); // Render selection box. // Render each labels for(i = 0; i < ml->count; i++) { label = ml->labels + i; label->x = FRAME_BORDER_SIZE; if(ml->menu.selected == i) label->x += 4; label->y = FRAME_BORDER_SIZE + ( i * FONT_LINE_HEIGHT * fontGetScale(label->fontSize) ); labelRender(label, shader); } } void menuListDispose(menulist_t *ml) { uint8_t i; for(i = 0; i < ml->count; i++) { labelDispose(ml->labels + i); } frameDispose(&ml->frame); }