mirror of
https://github.com/AntonioND/nitro-engine.git
synced 2025-06-18 16:45:33 -04:00
230 lines
8.2 KiB
C
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__
|