74 lines
1.9 KiB
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);
|
|
} |