69 lines
1.6 KiB
C
69 lines
1.6 KiB
C
/**
|
|
* Copyright (c) 2021 Dominic Masters
|
|
*
|
|
* This software is released under the MIT License.
|
|
* https://opensource.org/licenses/MIT
|
|
*/
|
|
|
|
#pragma once
|
|
#include "../libs.h"
|
|
#include "menu.h"
|
|
#include "grid.h"
|
|
#include "label.h"
|
|
#include "rectangle.h"
|
|
|
|
/** Colour of the selection box for the text menu */
|
|
#define TEXTMENU_SELECTION_COLOR ((pixel_t){.r=0xFF,.g=0xFF,.b=0xFF,.a=0x64})
|
|
|
|
/** Callback type for when an item is selected */
|
|
typedef void textmenucallback_t(void *user, uint8_t i, char *text);
|
|
|
|
typedef struct {
|
|
menu_t menu;
|
|
grid_t grid;
|
|
font_t *font;
|
|
rectangle_t rectangle;
|
|
|
|
char *texts[MENU_ITEMS_MAX];
|
|
label_t labels[MENU_ITEMS_MAX];
|
|
|
|
textmenucallback_t *onSelect;
|
|
void *user;
|
|
} textmenu_t;
|
|
|
|
/** Callback to be notified from the menu when the menu items are selected. */
|
|
void _textMenuOnSelect(void *user, uint8_t i);
|
|
|
|
/**
|
|
* Initialize a text menu item.
|
|
*
|
|
* @param menu Menu to initialize.
|
|
* @param font Font to use during initialization.
|
|
*/
|
|
void textMenuInit(textmenu_t *menu, font_t *font);
|
|
|
|
/**
|
|
* Add text to a menu list.
|
|
*
|
|
* @param menu Menu to add to.
|
|
* @param item Text to add (must be a constant value).
|
|
* @return The grid subsystem item.
|
|
*/
|
|
menuitem_t * textMenuAdd(textmenu_t *menu, char *item);
|
|
|
|
/**
|
|
* Render a text menu list.
|
|
*
|
|
* @param menu Menu to render.
|
|
* @param shader Shader to use.
|
|
* @param x X position of the menu.
|
|
* @param y Y position of the menu.
|
|
*/
|
|
void textMenuRender(textmenu_t *menu, shaderprogram_t *shader,float x, float y);
|
|
|
|
/**
|
|
* Dispose/Cleanup a text menu.
|
|
*
|
|
* @param menu Text menu to dispose.
|
|
*/
|
|
void textMenuDispse(textmenu_t *menu); |