/** * 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); }