62 lines
1.2 KiB
C
62 lines
1.2 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 "../input/input.h"
|
|
#include "../epoch/epoch.h"
|
|
#include "../util/array.h"
|
|
#include "../engine/engine.h"
|
|
|
|
/** The maximum number of items a menu can hold */
|
|
#define MENU_ITEMS_MAX 32
|
|
|
|
/** Callback for when menu events are fired. */
|
|
typedef void menucallback_t(void *user, uint8_t i);
|
|
|
|
typedef struct {
|
|
uint8_t x;
|
|
uint8_t y;
|
|
uint8_t width;
|
|
uint8_t height;
|
|
} menuitem_t;
|
|
|
|
typedef struct {
|
|
menuitem_t items[MENU_ITEMS_MAX];
|
|
uint8_t itemCount;
|
|
uint8_t selected;
|
|
uint8_t cursorX;
|
|
uint8_t cursorY;
|
|
|
|
void *user;
|
|
menucallback_t *onSelect;
|
|
} menu_t;
|
|
|
|
/**
|
|
* Initialize a menu.
|
|
*
|
|
* @param menu Menu to initialize.
|
|
* @param columns Count of rows.
|
|
* @param rows Count of columns.
|
|
*/
|
|
void menuInit(menu_t *menu);
|
|
|
|
/**
|
|
* Updates the menu to handle inputs.
|
|
*
|
|
* @param menu Menu to update.
|
|
* @param engine Engine to update from.
|
|
*/
|
|
void menuUpdate(menu_t *menu, engine_t *engine);
|
|
|
|
/**
|
|
* Add an item to the menu
|
|
*
|
|
* @param menu Menu to add to.
|
|
* @return Item to add to.
|
|
*/
|
|
menuitem_t * menuAdd(menu_t *menu); |