2025-01-26 18:33:45 +01:00

156 lines
3.7 KiB
C

/*
Raydium - CQFD Corp.
http://raydium.org/
License: GPL - GNU General Public License, see "gpl.txt" file.
*/
// window borders & moves
// multiple windows tests
// modal windows
#ifndef RAY_GUI_H
#define RAY_GUI_H
#define RAYDIUM_GUI_MAX_OBJECTS 128
#define RAYDIUM_GUI_MAX_WINDOWS 16
#define RAYDIUM_GUI_BUTTON 1
#define RAYDIUM_GUI_LABEL 2
#define RAYDIUM_GUI_TRACK 3
#define RAYDIUM_GUI_EDIT 4
#define RAYDIUM_GUI_CHECK 5
#define RAYDIUM_GUI_COMBO 6
#define RAYDIUM_GUI_ZONE 7
#define RAYDIUM_GUI_NORMAL 1
#define RAYDIUM_GUI_FOCUS 2
#define RAYDIUM_GUI_HOVER 3
#define RAYDIUM_GUI_DATASIZE 4096
#define RAYDIUM_GUI_ITEM_SEPARATOR '\n'
#define RAYDIUM_GUI_COMBO_LIST_HEIGHT 5
typedef struct raydium_gui_Button
{
void * OnClick;
char caption[RAYDIUM_MAX_NAME_LEN];
GLfloat uv_normal[4];
GLfloat uv_focus[4];
GLfloat uv_hover[4];
GLfloat font_color[3];
} raydium_gui_Button;
typedef struct raydium_gui_Zone
{
void * OnClick;
GLfloat col_normal[4];
GLfloat col_focus[4];
GLfloat col_hover[4];
int tag;
} raydium_gui_Zone;
typedef struct raydium_gui_Label
{
char caption[RAYDIUM_MAX_NAME_LEN];
GLfloat font_color[3];
} raydium_gui_Label;
typedef struct raydium_gui_Track
{
GLfloat uv_rule[4];
GLfloat uv_cursor_normal[4];
GLfloat uv_cursor_focus[4];
int min;
int max;
int current;
} raydium_gui_Track;
typedef struct raydium_gui_Edit
{
char text[RAYDIUM_GUI_DATASIZE];
GLfloat uv_normal[4];
GLfloat uv_focus[4];
GLfloat font_color[3];
int cursor;
int offset;
} raydium_gui_Edit;
typedef struct raydium_gui_Check
{
char caption[RAYDIUM_MAX_NAME_LEN];
signed char checked;
GLfloat uv_normal[4];
GLfloat uv_checked[4];
GLfloat font_color_normal[3];
GLfloat font_color_focus[3];
} raydium_gui_Check;
typedef struct raydium_gui_Combo
{
char items[RAYDIUM_GUI_DATASIZE];
int current;
char current_str[RAYDIUM_GUI_DATASIZE]; // provided as a "bonus"
signed char expanded;
int offset;
GLfloat uv_body_normal[4];
GLfloat uv_body_focus[4];
int body_border_right;
GLfloat uv_list_top[4];
GLfloat uv_list_middle[4];
GLfloat uv_list_bottom[4];
GLfloat uv_list_current[4];
GLfloat uv_arrow[4];
GLfloat font_color[3];
} raydium_gui_Combo;
// Parent of all widgets
typedef struct raydium_gui_Object
{
int id;
char name[RAYDIUM_MAX_NAME_LEN];
signed char state;
signed char type;
int window;
GLfloat pos[2];
GLfloat size[2];
GLfloat font_size;
void * widget;
} raydium_gui_Object;
typedef struct raydium_gui_Window
{
int id;
char name[RAYDIUM_MAX_NAME_LEN];
signed char state;
GLfloat pos[2];
GLfloat size[2];
raydium_gui_Object widgets[RAYDIUM_GUI_MAX_OBJECTS];
int focused_widget;
int old_focused;
void * OnDelete;
} raydium_gui_Window;
typedef struct raydium_gui_Theme
{
signed char loaded;
char filename[RAYDIUM_MAX_NAME_LEN];
int texture;
int texture_size[2];
GLfloat background_uv[4];
char font[RAYDIUM_MAX_NAME_LEN];
} raydium_gui_Theme;
__global raydium_gui_Theme raydium_gui_theme_current;
__global raydium_gui_Window raydium_gui_windows[RAYDIUM_GUI_MAX_WINDOWS];
__global signed char raydium_gui_visible;
__global int raydium_gui_window_focused;
__global signed char raydium_gui_oldstate;
__global GLfloat raydium_gui_widget_sizes_default[3];
__global int raydium_gui_button_clicked_id;
__global void * raydium_gui_AfterGuiDrawCallback;
#endif