Dawn/src/ui/framedtextmenu.c

74 lines
1.9 KiB
C

/**
* Copyright (c) 2021 Dominic Masters
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/
#include "framedtextmenu.h"
void framedTextMenuInit(framedtextmenu_t *menu, font_t *font, texture_t *text) {
frameInit(&menu->frame);
textMenuInit(&menu->menu, font);
menu->frame.texture = text;
menu->width = -1;
menu->height = -1;
}
void framedTextMenuUpdate(framedtextmenu_t *menu, engine_t *engine) {
float iw, ih;
uint8_t bp;
gridbreakpoint_t *breakpoint;
bp = gridGetBreakpoint(&menu->menu.menu.grid, engine->render.width);
breakpoint = menu->menu.menu.grid.breakpoints + bp;
if(menu->width < 0) {
if(menu->menu.menu.grid.childCount > 0) {
iw = 0;
for(uint8_t i = 0; i < menu->menu.menu.grid.childCount; i++) {
iw = mathMax(menu->menu.labels[i].info.width, iw);
}
iw *= breakpoint->columns;
if(iw == 0) iw = engine->render.width - FRAME_BORDER_SIZE_FULL;
} else {
iw = engine->render.width - FRAME_BORDER_SIZE_FULL;
}
} else {
iw = menu->width - FRAME_BORDER_SIZE_FULL;
}
if(menu->height < 0) {
if(menu->menu.menu.grid.childCount > 0) {
ih = breakpoint->rows * (
fontGetScale(menu->menu.labels->fontSize) * FONT_LINE_HEIGHT
);
} else {
ih = 0;
}
} else {
ih = menu->height - FRAME_BORDER_SIZE_FULL;
}
frameSetInnerSize(&menu->frame, iw, ih);
gridSetSize(&menu->menu.menu.grid,
engine->render.width, engine->render.height,
iw, ih,
0, 0
);
menu2Update(&menu->menu.menu, engine);
}
void framedTextMenuRender(
framedtextmenu_t *menu, shader_t *shader, float x, float y
) {
frameRender(&menu->frame, shader, x, y);
textMenuListRender(&menu->menu, shader,
x + FRAME_BORDER_SIZE, y + FRAME_BORDER_SIZE
);
}
void framedTextMenuDispose(framedtextmenu_t *menu) {
textMenuDispse(&menu->menu);
frameDispose(&menu->frame);
}