87 lines
1.6 KiB
C
87 lines
1.6 KiB
C
/**
|
|
* 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);
|
|
} |