nitro-engine/include/NEGUI.h
Antonio Niño Díaz 82171bbf69 chore: Simplify copyright years in notices
Instead of listing every individual year, keep only the first and last
years.
2024-03-09 01:42:29 +00:00

230 lines
8.2 KiB
C

// SPDX-License-Identifier: MIT
//
// Copyright (c) 2008-2022 Antonio Niño Díaz
//
// This file is part of Nitro Engine
#ifndef NE_GUI_H__
#define NE_GUI_H__
#include "NEMain.h"
/// @file NEGUI.h
/// @brief GUI functions.
/// @defgroup gui_system GUI system
///
/// Functions to create basic buttons, check boxes, radio buttons and slidebars.
///
/// @{
#define NE_GUI_DEFAULT_OBJECTS 64 ///< Default max number of GUI elements
#define NE_GUI_POLY_ID 62 ///< Polygon ID to use for most GUI elements.
#define NE_GUI_POLY_ID_ALT 61 ///< Alternative poly ID to use for the GUI.
#define NE_GUI_MIN_PRIORITY 100 ///< Minimum 2D priority of GUI elements.
/// GUI element types.
typedef enum {
NE_Button = 1, ///< Button
NE_CheckBox, ///< Check box
NE_RadioButton, ///< Radio button
NE_SlideBar ///< Slidebar (horizontal or vertical)
} NE_GUITypes;
/// Possible states of a GUI object.
typedef enum {
/// The GUI hasn't been updated or the input hasn't been updated.
NE_Error = -1,
/// The object isn't pressed.
NE_None = 0,
/// The object has just been pressed.
NE_Pressed = 1,
/// The object is being held pressed.
NE_Held = 1 << 1,
/// The object has just been released.
NE_Clicked = 1 << 2
} NE_GUIState;
/// Holds information of an GUI object.
typedef struct {
NE_GUITypes type; ///< Type of GUI object
void *pointer; ///< Pointer to object-specific information.
} NE_GUIObj;
/// Updates all GUI objects.
///
/// NE_UpdateInput() must be called every frame for this function to work.
void NE_GUIUpdate(void);
/// Draw all GUI objects.
///
/// You must call NE_2DViewInit() before this.
void NE_GUIDraw(void);
/// Creates a new button object.
///
/// @param x1 (x1, y1) Top left corner.
/// @param y1 (x1, y1) Top left corner.
/// @param x2 (x2, y2) Bottom right corner.
/// @param y2 (x2, y2) Bottom right corner.
/// @return Returns a pointer to the new object.
NE_GUIObj *NE_GUIButtonCreate(s16 x1, s16 y1, s16 x2, s16 y2);
/// Creates a new check button.
///
/// @param x1 (x1, y1) Top left corner.
/// @param y1 (x1, y1) Top left corner.
/// @param x2 (x2, y2) Bottom right corner.
/// @param y2 (x2, y2) Bottom right corner.
/// @param initialvalue If true, the checkbox is created in "checked" state.
/// @return Returns a pointer to the new object.
NE_GUIObj *NE_GUICheckBoxCreate(s16 x1, s16 y1, s16 x2, s16 y2,
bool initialvalue);
/// Creates a new radio button.
///
/// @param x1 (x1, y1) Top left corner.
/// @param y1 (x1, y1) Top left corner.
/// @param x2 (x2, y2) Bottom right corner.
/// @param y2 (x2, y2) Bottom right corner.
/// @param group Radio button group.
/// @param initialvalue If true, the button is created in "checked" state and
/// resets all other buttons in same group.
/// @return Returns a pointer to the new object.
NE_GUIObj *NE_GUIRadioButtonCreate(s16 x1, s16 y1, s16 x2, s16 y2, int group,
bool initialvalue);
/// Creates a new slidebar.
///
/// It determines wether it is a vertical bar or horizontal bar depending on the
/// size of the bar.
///
/// The size of the sliding button depends on the range of values. It changes
/// sizes between the ranges of 1 to 100. Any range bigger than 100 has the same
/// button size as a range of 100.
///
/// @param x1 (x1, y1) Top left corner.
/// @param y1 (x1, y1) Top left corner.
/// @param x2 (x2, y2) Bottom right corner.
/// @param y2 (x2, y2) Bottom right corner.
/// @param min Minimum value (it can be negative).
/// @param max Maximum value (it can be negative).
/// @param initialvalue Initial value.
/// @return Returns a pointer to the new object.
NE_GUIObj *NE_GUISlideBarCreate(s16 x1, s16 y1, s16 x2, s16 y2, int min,
int max, int initialvalue);
/// Configures display properties of a button.
///
/// @param btn Button to configure.
/// @param material Material used when not pressed.
/// @param color Color used when not pressed.
/// @param alpha Alpha value used when not pressed.
/// @param pressedmaterial Material used when pressed.
/// @param pressedcolor Color used when pressed.
/// @param pressedalpha Alpha value used when pressed.
void NE_GUIButtonConfig(NE_GUIObj *btn, NE_Material *material, u32 color,
u32 alpha, NE_Material *pressedmaterial,
u32 pressedcolor, u32 pressedalpha);
/// Configures display properties of a check box.
///
/// @param chbx Check box to configure.
/// @param materialtrue Material used when the check box is checked.
/// @param materialfalse Material used when the check box not is checked.
/// @param color Color used when not pressed.
/// @param alpha Alpha value used when not pressed.
/// @param pressedcolor Color used when pressed.
/// @param pressedalpha Alpha value used when pressed.
void NE_GUICheckBoxConfig(NE_GUIObj *chbx, NE_Material *materialtrue,
NE_Material *materialfalse, u32 color, u32 alpha,
u32 pressedcolor, u32 pressedalpha);
/// Configures display properties of a radio button.
///
/// @param rdbtn Radio button to configure.
/// @param materialtrue Material used when the radio button is checked.
/// @param materialfalse Material used when the radio button is not checked.
/// @param color Color used when not pressed.
/// @param alpha Alpha value used when not pressed.
/// @param pressedcolor Color used when pressed.
/// @param pressedalpha Alpha value used when pressed.
void NE_GUIRadioButtonConfig(NE_GUIObj *rdbtn, NE_Material *materialtrue,
NE_Material *materialfalse, u32 color, u32 alpha,
u32 pressedcolor, u32 pressedalpha);
/// Configures display properties of a slide bar.
///
/// @param sldbar Slide bar to configure.
/// @param matbtn Material of the buttons on the sides.
/// @param matbarbtn Material of the sliding button.
/// @param matbar Material of the bar.
/// @param normalcolor Color of buttons when not pressed.
/// @param pressedcolor Color of buttons when pressed.
/// @param barcolor Color of the bar.
/// @param alpha Alpha value of buttons when not pressed.
/// @param pressedalpha Alpha value of buttons when pressed.
/// @param baralpha Alpha value of the bar.
void NE_GUISlideBarConfig(NE_GUIObj *sldbar, NE_Material *matbtn,
NE_Material *matbarbtn, NE_Material *matbar,
u32 normalcolor, u32 pressedcolor, u32 barcolor,
u32 alpha, u32 pressedalpha, u32 baralpha);
/// Sets the minimum and maximum values of this slide bar.
///
/// @param sldbr Slide bar to configure.
/// @param min Minimum value (it can be negative).
/// @param max Maximum value (it can be negative).
void NE_GUISlideBarSetMinMax(NE_GUIObj *sldbr, int min, int max);
/// Returns the current event of a GUI object.
///
/// It returns a NE_GUIState value. If the object is a slide is a slide bar it
/// returns (event button A | event button B | event button bar) instead.
///
/// @param obj Pointer to the object.
/// @return Event.
NE_GUIState NE_GUIObjectGetEvent(const NE_GUIObj *obj);
/// Gets the value of a check box.
///
/// @param chbx Check box.
/// @return It returns true if the check box is checked.
bool NE_GUICheckBoxGetValue(const NE_GUIObj *chbx);
/// Gets the value of a radio button.
///
/// @param rdbtn Radio button.
/// @return It returns true if the radio button is checked.
bool NE_GUIRadioButtonGetValue(const NE_GUIObj *rdbtn);
/// Gets the value of a slide bar.
///
/// @param sldbr Slide bar.
/// @return It returns the value of the slide bar.
int NE_GUISlideBarGetValue(const NE_GUIObj *sldbr);
/// Deletes the given object.
///
/// @param obj Object.
void NE_GUIDeleteObject(NE_GUIObj *obj);
/// Deletes all GUI objects and all memory used by them.
void NE_GUIDeleteAll(void);
/// Resets the GUI system and sets the maximun number of objects.
///
/// @param max_objects Max number of objects. If it is lower than 1, the
/// function will create space for NE_GUI_DEFAULT_OBJECTS.
/// @return Returns 0 on success.
int NE_GUISystemReset(int max_objects);
/// Ends GUI system and all memory used by it.
void NE_GUISystemEnd(void);
/// @}
#endif // NE_GUI_H__