Nuklear/gui.h

612 lines
20 KiB
C
Raw Normal View History

2015-03-03 19:24:02 +03:00
/*
Copyright (c) 2015
vurtun <polygone@gmx.net>
MIT licence
*/
2015-03-09 22:04:45 +03:00
#ifndef GUI_H_
#define GUI_H_
2015-03-20 12:58:11 +03:00
2015-04-10 19:35:17 +03:00
#ifdef __cplusplus
extern "C" {
#endif
2015-03-03 19:24:02 +03:00
#define GUI_UTF_SIZE 4
2015-03-07 19:02:37 +03:00
#define GUI_INPUT_MAX 16
2015-04-30 17:12:21 +03:00
#define GUI_UTF_INVALID 0xFFFD
2015-05-10 16:47:54 +03:00
#define GUI_HOOK_PANEL_NAME panel
#define GUI_HOOK_LIST_NAME list
#define GUI_HOOK_ATTR(T, name) struct T name
#define GUI_HOOK_OUT gui_command_list
2015-04-10 19:35:17 +03:00
#ifdef GUI_USE_FIXED_TYPES
#include <stdint.h>
typedef int32_t gui_int;
typedef int32_t gui_bool;
typedef int16_t gui_short;
typedef int64_t gui_long;
typedef float gui_float;
2015-04-27 17:22:56 +03:00
typedef uint16_t gui_ushort;
2015-04-10 19:35:17 +03:00
typedef uint32_t gui_uint;
typedef uint64_t gui_ulong;
typedef uint32_t gui_flags;
typedef uint8_t gui_char;
typedef uint8_t gui_byte;
typedef uint32_t gui_flag;
typedef uint64_t gui_size;
#else
2015-03-03 19:24:02 +03:00
typedef int gui_int;
2015-04-10 19:35:17 +03:00
typedef int gui_bool;
2015-03-05 21:50:56 +03:00
typedef short gui_short;
typedef long gui_long;
2015-04-10 19:35:17 +03:00
typedef float gui_float;
2015-04-27 17:22:56 +03:00
typedef unsigned short gui_ushort;
2015-04-10 19:35:17 +03:00
typedef unsigned int gui_uint;
2015-03-20 12:58:11 +03:00
typedef unsigned long gui_ulong;
2015-03-05 17:37:11 +03:00
typedef unsigned int gui_flags;
2015-03-03 19:24:02 +03:00
typedef unsigned char gui_char;
typedef unsigned char gui_byte;
2015-03-07 19:02:37 +03:00
typedef unsigned int gui_flag;
2015-03-03 19:24:02 +03:00
typedef unsigned long gui_size;
2015-04-10 19:35:17 +03:00
#endif
2015-03-03 19:24:02 +03:00
enum {gui_false, gui_true};
2015-03-17 16:42:49 +03:00
enum gui_heading {GUI_UP, GUI_RIGHT, GUI_DOWN, GUI_LEFT};
2015-03-03 19:24:02 +03:00
struct gui_color {gui_byte r,g,b,a;};
struct gui_vec2 {gui_float x,y;};
struct gui_rect {gui_float x,y,w,h;};
2015-04-04 19:26:22 +03:00
struct gui_key {gui_bool down, clicked;};
2015-04-19 23:12:37 +03:00
struct gui_font;
2015-03-03 19:24:02 +03:00
2015-04-30 17:46:11 +03:00
typedef void* gui_image;
2015-04-19 23:12:37 +03:00
typedef gui_char gui_glyph[GUI_UTF_SIZE];
typedef gui_size(*gui_text_width_f)(void*,const gui_char*, gui_size);
typedef void(*gui_scissor)(void*, gui_float, gui_float, gui_float, gui_float);
typedef void(*gui_draw_line)(void*, gui_float, gui_float, gui_float, gui_float, struct gui_color);
typedef void(*gui_draw_rect)(void*, gui_float, gui_float, gui_float, gui_float, struct gui_color);
2015-04-30 17:46:11 +03:00
typedef void(*gui_draw_image)(void*, gui_float, gui_float, gui_float, gui_float, gui_image);
2015-04-19 23:12:37 +03:00
typedef void(*gui_draw_circle)(void*, gui_float, gui_float, gui_float, gui_float, struct gui_color);
2015-04-24 16:17:10 +03:00
typedef void(*gui_draw_triangle)(void*, gui_float, gui_float, gui_float, gui_float,
gui_float, gui_float, struct gui_color);
2015-04-19 23:12:37 +03:00
typedef void(*gui_draw_text)(void*, gui_float, gui_float, gui_float, gui_float,
const gui_char*, gui_size, const struct gui_font*,
struct gui_color, struct gui_color);
enum gui_keys {
GUI_KEY_SHIFT,
GUI_KEY_CTRL,
GUI_KEY_DEL,
GUI_KEY_ENTER,
GUI_KEY_BACKSPACE,
GUI_KEY_ESCAPE,
GUI_KEY_SPACE,
GUI_KEY_MAX
};
struct gui_input {
struct gui_key keys[GUI_KEY_MAX];
gui_char text[GUI_INPUT_MAX];
gui_size text_len;
struct gui_vec2 mouse_pos;
struct gui_vec2 mouse_prev;
struct gui_vec2 mouse_delta;
gui_bool mouse_down;
gui_uint mouse_clicked;
struct gui_vec2 mouse_clicked_pos;
};
enum gui_text_align {
GUI_TEXT_LEFT,
GUI_TEXT_CENTERED,
GUI_TEXT_RIGHT
};
2015-03-13 00:53:28 +03:00
struct gui_text {
2015-04-19 23:12:37 +03:00
struct gui_vec2 padding;
struct gui_color foreground;
2015-03-13 00:53:28 +03:00
struct gui_color background;
2015-03-13 22:01:31 +03:00
};
2015-03-14 19:05:30 +03:00
enum gui_button_behavior {
2015-04-10 19:35:17 +03:00
GUI_BUTTON_DEFAULT,
2015-03-14 19:05:30 +03:00
GUI_BUTTON_REPEATER
};
2015-03-09 22:04:45 +03:00
struct gui_button {
gui_float border;
2015-04-19 23:12:37 +03:00
struct gui_vec2 padding;
2015-03-09 22:04:45 +03:00
struct gui_color background;
struct gui_color foreground;
2015-03-20 12:58:11 +03:00
struct gui_color content;
2015-03-17 16:42:49 +03:00
struct gui_color highlight;
2015-03-20 12:58:11 +03:00
struct gui_color highlight_content;
};
enum gui_toggle_type {
GUI_TOGGLE_CHECK,
GUI_TOGGLE_OPTION
2015-03-09 22:04:45 +03:00
};
struct gui_toggle {
2015-04-19 23:12:37 +03:00
struct gui_vec2 padding;
2015-03-09 22:04:45 +03:00
struct gui_color font;
struct gui_color background;
struct gui_color foreground;
2015-05-02 22:18:45 +03:00
struct gui_color cursor;
2015-03-09 22:04:45 +03:00
};
struct gui_slider {
2015-04-19 23:12:37 +03:00
struct gui_vec2 padding;
2015-03-09 22:04:45 +03:00
struct gui_color background;
struct gui_color foreground;
};
struct gui_scroll {
struct gui_color background;
struct gui_color foreground;
2015-03-16 16:02:47 +03:00
struct gui_color border;
2015-03-09 22:04:45 +03:00
};
2015-03-14 19:05:30 +03:00
enum gui_input_filter {
GUI_INPUT_DEFAULT,
GUI_INPUT_FLOAT,
GUI_INPUT_DEC,
GUI_INPUT_HEX,
GUI_INPUT_OCT,
2015-03-20 12:58:11 +03:00
GUI_INPUT_BIN
2015-03-13 22:01:31 +03:00
};
struct gui_edit {
2015-04-19 23:12:37 +03:00
struct gui_vec2 padding;
2015-03-16 11:51:33 +03:00
gui_bool show_cursor;
2015-03-14 19:05:30 +03:00
enum gui_input_filter filter;
2015-03-13 22:01:31 +03:00
struct gui_color background;
struct gui_color foreground;
};
enum gui_graph_type {
GUI_GRAPH_LINES,
GUI_GRAPH_HISTO,
GUI_GRAPH_MAX
2015-03-09 22:04:45 +03:00
};
struct gui_graph {
enum gui_graph_type type;
gui_float x, y;
gui_float w, h;
gui_float min, max;
struct gui_vec2 last;
gui_size index;
gui_size count;
2015-03-09 22:04:45 +03:00
};
2015-05-02 22:18:45 +03:00
enum gui_table_lines {
GUI_TABLE_HHEADER = 0x01,
GUI_TABLE_VHEADER = 0x02,
GUI_TABLE_HBODY = 0x04,
GUI_TABLE_VBODY = 0x08
};
2015-04-24 16:17:10 +03:00
struct gui_font {
void *userdata;
gui_float height;
gui_text_width_f width;
};
struct gui_canvas {
void *userdata;
gui_size width;
gui_size height;
gui_scissor scissor;
gui_draw_line draw_line;
gui_draw_rect draw_rect;
gui_draw_circle draw_circle;
gui_draw_triangle draw_triangle;
2015-04-30 17:46:11 +03:00
gui_draw_image draw_image;
2015-04-24 16:17:10 +03:00
gui_draw_text draw_text;
};
struct gui_memory {
void *memory;
gui_size size;
};
struct gui_memory_status {
gui_size size;
gui_size allocated;
gui_size needed;
gui_size clipped_commands;
gui_size clipped_memory;
};
2015-04-24 16:17:10 +03:00
struct gui_allocator {
2015-04-28 12:56:12 +03:00
void *userdata;
void*(*alloc)(void *usr, gui_size);
void*(*realloc)(void *usr, void*, gui_size);
void(*free)(void *usr, void*);
2015-04-24 16:17:10 +03:00
};
enum gui_command_type {
GUI_COMMAND_NOP,
GUI_COMMAND_SCISSOR,
GUI_COMMAND_LINE,
GUI_COMMAND_RECT,
GUI_COMMAND_CIRCLE,
GUI_COMMAND_TRIANGLE,
GUI_COMMAND_TEXT,
GUI_COMMAND_IMAGE,
GUI_COMMAND_MAX
2015-04-24 16:17:10 +03:00
};
struct gui_command {
enum gui_command_type type;
2015-05-03 13:54:02 +03:00
gui_size offset;
2015-04-24 16:17:10 +03:00
};
struct gui_command_scissor {
struct gui_command header;
2015-04-27 17:22:56 +03:00
gui_short x, y;
gui_ushort w, h;
2015-04-24 16:17:10 +03:00
};
struct gui_command_line {
struct gui_command header;
2015-04-27 17:22:56 +03:00
gui_short begin[2];
gui_short end[2];
2015-04-24 16:17:10 +03:00
struct gui_color color;
};
struct gui_command_rect {
struct gui_command header;
2015-04-27 17:22:56 +03:00
gui_short x, y;
gui_ushort w, h;
2015-04-24 16:17:10 +03:00
struct gui_color color;
};
struct gui_command_circle {
struct gui_command header;
2015-04-27 17:22:56 +03:00
gui_short x, y;
gui_ushort w, h;
2015-04-24 16:17:10 +03:00
struct gui_color color;
};
2015-04-30 17:46:11 +03:00
struct gui_command_image {
struct gui_command header;
gui_short x, y;
gui_ushort w, h;
gui_image img;
};
2015-04-24 16:17:10 +03:00
struct gui_command_triangle {
struct gui_command header;
2015-04-27 17:22:56 +03:00
gui_short a[2];
gui_short b[2];
gui_short c[2];
2015-04-24 16:17:10 +03:00
struct gui_color color;
};
struct gui_command_text {
struct gui_command header;
2015-04-28 12:56:12 +03:00
void *font;
2015-04-27 17:22:56 +03:00
gui_short x, y;
gui_ushort w, h;
2015-04-24 16:17:10 +03:00
struct gui_color bg;
struct gui_color fg;
2015-04-28 12:56:12 +03:00
gui_size length;
2015-04-24 16:17:10 +03:00
gui_char string[1];
};
2015-05-02 16:41:11 +03:00
enum gui_buffer_flags {
GUI_BUFFER_DEFAULT = 0,
GUI_BUFFER_CLIPPING = 0x01,
GUI_BUFFER_OWNER = 0x02,
GUI_BUFFER_LOCKED = 0x04
2015-05-02 16:14:28 +03:00
};
2015-04-24 16:17:10 +03:00
struct gui_command_buffer {
void *memory;
2015-05-02 16:41:11 +03:00
gui_flags flags;
2015-04-24 16:17:10 +03:00
struct gui_allocator allocator;
struct gui_command *begin;
struct gui_command *end;
2015-04-27 17:01:40 +03:00
struct gui_rect clip;
gui_size clipped_cmds;
gui_size clipped_memory;
2015-04-24 16:17:10 +03:00
gui_float grow_factor;
2015-05-02 16:14:28 +03:00
gui_size sub_size;
gui_size sub_cap;
2015-04-24 16:17:10 +03:00
gui_size allocated;
gui_size capacity;
gui_size needed;
gui_size count;
};
struct gui_command_list {
struct gui_command_list *next;
2015-04-24 16:17:10 +03:00
struct gui_command *begin;
struct gui_command *end;
gui_size count;
};
enum gui_panel_colors {
2015-03-08 21:19:07 +03:00
GUI_COLOR_TEXT,
GUI_COLOR_PANEL,
GUI_COLOR_HEADER,
2015-03-08 21:19:07 +03:00
GUI_COLOR_BORDER,
GUI_COLOR_BUTTON,
GUI_COLOR_BUTTON_BORDER,
2015-03-17 16:42:49 +03:00
GUI_COLOR_BUTTON_HOVER,
GUI_COLOR_BUTTON_TOGGLE,
2015-03-17 16:42:49 +03:00
GUI_COLOR_BUTTON_HOVER_FONT,
2015-03-20 12:58:11 +03:00
GUI_COLOR_CHECK,
2015-05-02 22:18:45 +03:00
GUI_COLOR_CHECK_BACKGROUND,
2015-03-20 12:58:11 +03:00
GUI_COLOR_CHECK_ACTIVE,
GUI_COLOR_OPTION,
2015-05-02 22:18:45 +03:00
GUI_COLOR_OPTION_BACKGROUND,
2015-03-20 12:58:11 +03:00
GUI_COLOR_OPTION_ACTIVE,
2015-03-08 21:19:07 +03:00
GUI_COLOR_SCROLL,
GUI_COLOR_SCROLL_CURSOR,
GUI_COLOR_SLIDER,
GUI_COLOR_SLIDER_CURSOR,
GUI_COLOR_PROGRESS,
GUI_COLOR_PROGRESS_CURSOR,
2015-03-10 15:50:27 +03:00
GUI_COLOR_INPUT,
GUI_COLOR_INPUT_BORDER,
2015-03-14 19:05:30 +03:00
GUI_COLOR_SPINNER,
GUI_COLOR_SPINNER_BORDER,
2015-03-20 12:58:11 +03:00
GUI_COLOR_SELECTOR,
GUI_COLOR_SELECTOR_BORDER,
2015-03-10 15:50:27 +03:00
GUI_COLOR_HISTO,
GUI_COLOR_HISTO_BARS,
GUI_COLOR_HISTO_NEGATIVE,
GUI_COLOR_HISTO_HIGHLIGHT,
GUI_COLOR_PLOT,
GUI_COLOR_PLOT_LINES,
2015-03-11 20:17:37 +03:00
GUI_COLOR_PLOT_HIGHLIGHT,
2015-03-16 11:51:33 +03:00
GUI_COLOR_SCROLLBAR,
GUI_COLOR_SCROLLBAR_CURSOR,
2015-03-16 16:02:47 +03:00
GUI_COLOR_SCROLLBAR_BORDER,
2015-05-02 22:18:45 +03:00
GUI_COLOR_TABLE_LINES,
2015-04-07 19:20:28 +03:00
GUI_COLOR_SCALER,
2015-03-08 21:19:07 +03:00
GUI_COLOR_COUNT
};
struct gui_config {
2015-03-10 15:50:27 +03:00
struct gui_vec2 panel_padding;
struct gui_vec2 panel_min_size;
2015-03-08 21:19:07 +03:00
struct gui_vec2 item_spacing;
struct gui_vec2 item_padding;
2015-03-25 16:15:42 +03:00
struct gui_vec2 scaler_size;
2015-03-16 11:51:33 +03:00
gui_float scrollbar_width;
2015-03-08 21:19:07 +03:00
struct gui_color colors[GUI_COLOR_COUNT];
2015-03-05 17:37:11 +03:00
};
2015-03-10 15:50:27 +03:00
enum gui_panel_flags {
GUI_PANEL_HIDDEN = 0x01,
2015-04-03 19:59:24 +03:00
GUI_PANEL_BORDER = 0x02,
2015-05-09 18:44:27 +03:00
GUI_PANEL_MINIMIZABLE = 0x04,
GUI_PANEL_CLOSEABLE = 0x08,
GUI_PANEL_MOVEABLE = 0x10,
GUI_PANEL_SCALEABLE = 0x20,
2015-04-07 04:24:31 +03:00
/* internal */
2015-04-20 22:14:58 +03:00
GUI_PANEL_ACTIVE = 0x40,
GUI_PANEL_SCROLLBAR = 0x80,
2015-05-09 18:44:27 +03:00
GUI_PANEL_TAB = 0x100,
GUI_PANEL_NO_HEADER = 0x200
};
2015-03-05 17:37:11 +03:00
struct gui_panel {
2015-03-11 16:00:59 +03:00
gui_float x, y;
2015-04-19 23:12:37 +03:00
gui_float w, h;
gui_flags flags;
gui_float offset;
gui_bool minimized;
struct gui_font font;
const struct gui_config *config;
2015-05-07 16:52:35 +03:00
struct gui_panel *next;
struct gui_panel *prev;
};
struct gui_panel_layout {
gui_float x, y, w, h;
gui_float offset;
2015-05-02 22:18:45 +03:00
gui_bool is_table;
gui_flags tbl_flags;
gui_bool valid;
gui_float at_x;
2015-03-11 16:00:59 +03:00
gui_float at_y;
gui_size index;
gui_float width, height;
2015-03-16 11:51:33 +03:00
gui_float header_height;
2015-03-11 16:00:59 +03:00
gui_float row_height;
gui_size row_columns;
2015-04-19 23:12:37 +03:00
struct gui_rect clip;
2015-04-24 16:17:10 +03:00
struct gui_font font;
2015-03-09 22:04:45 +03:00
const struct gui_config *config;
const struct gui_input *input;
2015-04-19 23:12:37 +03:00
const struct gui_canvas *canvas;
2015-03-03 19:24:02 +03:00
};
2015-05-07 16:52:35 +03:00
struct gui_panel_stack {
gui_size count;
struct gui_panel *begin;
struct gui_panel *end;
};
2015-05-10 16:47:54 +03:00
2015-05-10 12:19:28 +03:00
struct gui_panel_hook {
2015-05-10 16:47:54 +03:00
GUI_HOOK_ATTR(gui_panel, GUI_HOOK_PANEL_NAME);
GUI_HOOK_ATTR(GUI_HOOK_OUT, GUI_HOOK_LIST_NAME);
};
2015-03-09 22:04:45 +03:00
/* Input */
2015-04-30 17:12:21 +03:00
gui_size gui_utf_decode(const gui_char*, gui_long*, gui_size);
gui_size gui_utf_encode(gui_long, gui_char*, gui_size);
2015-04-02 21:09:03 +03:00
void gui_input_begin(struct gui_input*);
void gui_input_motion(struct gui_input*, gui_int x, gui_int y);
2015-04-04 19:26:22 +03:00
void gui_input_key(struct gui_input*, enum gui_keys, gui_bool down);
2015-04-02 21:09:03 +03:00
void gui_input_button(struct gui_input*, gui_int x, gui_int y, gui_bool down);
void gui_input_char(struct gui_input*, const gui_glyph);
void gui_input_end(struct gui_input*);
2015-03-03 19:24:02 +03:00
2015-04-24 16:17:10 +03:00
2015-04-27 17:01:40 +03:00
/* Buffer */
2015-04-26 14:30:22 +03:00
void gui_buffer_init(struct gui_command_buffer*, const struct gui_allocator*,
2015-05-02 16:41:11 +03:00
gui_size initial_size, gui_float grow_factor, gui_flag clipping);
2015-04-27 17:01:40 +03:00
void gui_buffer_init_fixed(struct gui_command_buffer*, const struct gui_memory*,
2015-05-02 16:41:11 +03:00
gui_flag clipping);
2015-04-26 14:30:22 +03:00
void gui_buffer_begin(struct gui_canvas *canvas, struct gui_command_buffer *buffer,
gui_size width, gui_size height);
void gui_buffer_lock(struct gui_canvas*, struct gui_command_buffer *buffer,
struct gui_command_buffer *sub, gui_flag clipping,
gui_size width, gui_size height);
void gui_buffer_unlock(struct gui_command_list*, struct gui_command_buffer *buf,
struct gui_command_buffer *sub, struct gui_canvas*,
struct gui_memory_status*);
2015-04-26 14:30:22 +03:00
void *gui_buffer_push(struct gui_command_buffer*,
2015-04-24 16:17:10 +03:00
enum gui_command_type, gui_size size);
2015-04-26 14:30:22 +03:00
void gui_buffer_push_scissor(struct gui_command_buffer*, gui_float, gui_float,
2015-04-24 16:17:10 +03:00
gui_float, gui_float);
2015-04-26 14:30:22 +03:00
void gui_buffer_push_line(struct gui_command_buffer*, gui_float, gui_float,
2015-04-24 16:17:10 +03:00
gui_float, gui_float, struct gui_color);
2015-04-26 14:30:22 +03:00
void gui_buffer_push_rect(struct gui_command_buffer*, gui_float, gui_float,
2015-04-24 16:17:10 +03:00
gui_float, gui_float, struct gui_color);
2015-04-26 14:30:22 +03:00
void gui_buffer_push_circle(struct gui_command_buffer*, gui_float, gui_float,
2015-04-24 16:17:10 +03:00
gui_float, gui_float, struct gui_color);
2015-04-30 17:46:11 +03:00
void gui_buffer_push_triangle(struct gui_command_buffer*, gui_float, gui_float,
gui_float, gui_float, gui_float, gui_float, struct gui_color);
void gui_buffer_push_image(struct gui_command_buffer*, gui_float, gui_float,
gui_float, gui_float, gui_image);
2015-04-26 14:30:22 +03:00
void gui_buffer_push_text(struct gui_command_buffer*, gui_float, gui_float,
2015-04-24 16:17:10 +03:00
gui_float, gui_float, const gui_char*, gui_size,
const struct gui_font*, struct gui_color, struct gui_color);
2015-04-26 14:30:22 +03:00
void gui_buffer_clear(struct gui_command_buffer*);
void gui_buffer_end(struct gui_command_list*, struct gui_command_buffer*,
struct gui_canvas*, struct gui_memory_status*);
2015-04-24 16:17:10 +03:00
2015-05-04 12:03:15 +03:00
2015-05-03 13:54:02 +03:00
/* List */
const struct gui_command* gui_list_begin(const struct gui_command_list*);
const struct gui_command* gui_list_next(const struct gui_command_list*,
const struct gui_command*);
2015-04-24 16:17:10 +03:00
2015-05-04 12:03:15 +03:00
2015-03-09 22:04:45 +03:00
/* Widgets */
2015-04-19 23:12:37 +03:00
void gui_text(const struct gui_canvas*, gui_float x, gui_float y, gui_float w, gui_float h,
const char *text, gui_size len, const struct gui_text*, enum gui_text_align,
const struct gui_font*);
2015-04-19 23:12:37 +03:00
gui_bool gui_button_text(const struct gui_canvas*, gui_float x, gui_float y,
2015-04-24 16:17:10 +03:00
gui_float w, gui_float h, const char*, enum gui_button_behavior,
const struct gui_button*, const struct gui_input*, const struct gui_font*);
2015-04-30 17:46:11 +03:00
gui_bool gui_button_image(const struct gui_canvas*, gui_float x, gui_float y,
gui_float w, gui_float h, gui_image, enum gui_button_behavior,
const struct gui_button*, const struct gui_input*);
2015-04-19 23:12:37 +03:00
gui_bool gui_button_triangle(const struct gui_canvas*, gui_float x, gui_float y,
2015-04-24 16:17:10 +03:00
gui_float w, gui_float h, enum gui_heading, enum gui_button_behavior,
const struct gui_button*, const struct gui_input*);
2015-04-19 23:12:37 +03:00
gui_bool gui_toggle(const struct gui_canvas*, gui_float x, gui_float y, gui_float w,
2015-04-24 16:17:10 +03:00
gui_float h, gui_bool, const char*, enum gui_toggle_type,
const struct gui_toggle*, const struct gui_input*, const struct gui_font*);
2015-04-19 23:12:37 +03:00
gui_float gui_slider(const struct gui_canvas*, gui_float x, gui_float y, gui_float w,
gui_float h, gui_float min, gui_float val, gui_float max, gui_float step,
const struct gui_slider*, const struct gui_input*);
gui_size gui_progress(const struct gui_canvas*, gui_float x, gui_float y, gui_float w,
gui_float h, gui_size value, gui_size max, gui_bool modifyable,
const struct gui_slider*, const struct gui_input*);
gui_size gui_edit(const struct gui_canvas*, gui_float x, gui_float y, gui_float w,
2015-04-19 23:12:37 +03:00
gui_float h, gui_char*, gui_size, gui_size max, gui_bool*,
const struct gui_edit*, const struct gui_input*, const struct gui_font*);
2015-04-19 23:12:37 +03:00
gui_float gui_scroll(const struct gui_canvas*, gui_float x, gui_float y,
gui_float w, gui_float h, gui_float offset, gui_float target,
gui_float step, const struct gui_scroll*, const struct gui_input*);
2015-03-09 22:04:45 +03:00
2015-03-09 22:04:45 +03:00
/* Panel */
2015-04-24 16:17:10 +03:00
void gui_default_config(struct gui_config*);
2015-05-04 12:03:15 +03:00
void gui_panel_init(struct gui_panel*, gui_float x, gui_float y, gui_float w, gui_float h,
gui_flags, const struct gui_config *config, const struct gui_font*);
gui_bool gui_panel_begin(struct gui_panel_layout *layout, struct gui_panel*,
const char *title, const struct gui_canvas*, const struct gui_input*);
2015-05-07 16:52:35 +03:00
gui_bool gui_panel_begin_stacked(struct gui_panel_layout*, struct gui_panel*,
struct gui_panel_stack*, const char*, const struct gui_canvas*,
const struct gui_input*);
void gui_panel_row(struct gui_panel_layout*, gui_float height, gui_size cols);
void gui_panel_alloc_space(struct gui_rect*, struct gui_panel_layout*);
void gui_panel_seperator(struct gui_panel_layout*, gui_size cols);
void gui_panel_text(struct gui_panel_layout*, const char*, gui_size, enum gui_text_align);
2015-05-02 22:18:45 +03:00
void gui_panel_text_colored(struct gui_panel_layout*, const char*, gui_size, enum gui_text_align,
struct gui_color color);
void gui_panel_label(struct gui_panel_layout*, const char*, enum gui_text_align);
void gui_panel_label_colored(struct gui_panel_layout*, const char*, enum gui_text_align,
struct gui_color color);
gui_bool gui_panel_check(struct gui_panel_layout*, const char*, gui_bool active);
gui_bool gui_panel_option(struct gui_panel_layout*, const char*, gui_bool active);
gui_bool gui_panel_button_text(struct gui_panel_layout*, const char*, enum gui_button_behavior);
gui_bool gui_panel_button_color(struct gui_panel_layout*, const struct gui_color,
enum gui_button_behavior);
gui_bool gui_panel_button_triangle(struct gui_panel_layout*, enum gui_heading,
enum gui_button_behavior);
2015-04-30 17:46:11 +03:00
gui_bool gui_panel_button_image(struct gui_panel_layout*, gui_image image,
enum gui_button_behavior);
gui_bool gui_panel_button_toggle(struct gui_panel_layout*, const char*, gui_bool value);
gui_float gui_panel_slider(struct gui_panel_layout*, gui_float min, gui_float val,
gui_float max, gui_float step);
gui_size gui_panel_progress(struct gui_panel_layout*, gui_size cur, gui_size max,
gui_bool modifyable);
gui_size gui_panel_edit(struct gui_panel_layout*, gui_char *buffer, gui_size len,
2015-04-19 23:12:37 +03:00
gui_size max, gui_bool *active, enum gui_input_filter);
gui_bool gui_panel_shell(struct gui_panel_layout*, gui_char *buffer, gui_size *len,
gui_size max, gui_bool *active);
gui_int gui_panel_spinner(struct gui_panel_layout*, gui_int min, gui_int value,
2015-04-20 23:29:31 +03:00
gui_int max, gui_int step, gui_bool *active);
gui_size gui_panel_selector(struct gui_panel_layout*, const char *items[],
gui_size item_count, gui_size item_current);
void gui_panel_graph_begin(struct gui_panel_layout*, struct gui_graph*, enum gui_graph_type,
gui_size count, gui_float min_value, gui_float max_value);
gui_bool gui_panel_graph_push(struct gui_panel_layout *layout, struct gui_graph*, gui_float);
void gui_panel_graph_end(struct gui_panel_layout *layout, struct gui_graph*);
gui_int gui_panel_graph(struct gui_panel_layout*, enum gui_graph_type,
const gui_float *values, gui_size count);
2015-05-03 12:45:29 +03:00
gui_int gui_panel_graph_ex(struct gui_panel_layout*, enum gui_graph_type, gui_size count,
gui_float(*get_value)(void*, gui_size), void *userdata);
2015-05-02 22:18:45 +03:00
void gui_panel_table_begin(struct gui_panel_layout*, gui_flags flags,
gui_size row_height, gui_size cols);
void gui_panel_table_row(struct gui_panel_layout*);
void gui_panel_table_end(struct gui_panel_layout*);
gui_bool gui_panel_tab_begin(struct gui_panel_layout*, struct gui_panel_layout *tab,
2015-05-01 14:18:19 +03:00
const char*, gui_bool);
void gui_panel_tab_end(struct gui_panel_layout*, struct gui_panel_layout *tab);
void gui_panel_group_begin(struct gui_panel_layout*, struct gui_panel_layout *tab,
const char*,gui_float offset);
gui_float gui_panel_group_end(struct gui_panel_layout*, struct gui_panel_layout* tab);
gui_size gui_panel_shelf_begin(struct gui_panel_layout*, struct gui_panel_layout *shelf,
const char *tabs[], gui_size size, gui_size active, gui_float offset);
gui_float gui_panel_shelf_end(struct gui_panel_layout*, struct gui_panel_layout *shelf);
void gui_panel_end(struct gui_panel_layout*, struct gui_panel*);
2015-05-07 16:52:35 +03:00
/* Stack */
void gui_stack_clear(struct gui_panel_stack*);
void gui_stack_push(struct gui_panel_stack*, struct gui_panel*);
void gui_stack_pop(struct gui_panel_stack*, struct gui_panel*);
2015-05-10 16:47:54 +03:00
/* Hook */
#define gui_hook(p) ((struct gui_panel_hook*)(p))
#define gui_hook_panel(h) (&((h)->GUI_HOOK_PANEL_NAME))
#define gui_hook_list(h) (&((h)->GUI_HOOK_LIST_NAME))
#define gui_hook_init(hook, x, y, w, h, flags, config, font)\
gui_panel_init(&(*(hook)).GUI_HOOK_PANEL_NAME, x, y, w, h, flags, config, font)
#define gui_hook_begin(layout, hook, stack, title, canvas, in)\
gui_panel_begin_stacked(layout, &(*(hook)).GUI_HOOK_PANEL_NAME, stack, title, canvas, in)
#define gui_hook_end(layout, hook)\
gui_panel_end((layout), &(hook)->GUI_HOOK_PANEL_NAME)
#define gui_stack_push_hook(stack, hook)\
gui_stack_push(stack, &(*(hook)).GUI_HOOK_PANEL_NAME)
#define gui_stack_pop_hook(stack, hook)\
gui_stack_pop(stack, &(*(hook)).GUI_HOOK_PANEL_NAME)
2015-04-10 19:35:17 +03:00
#ifdef __cplusplus
}
#endif
2015-03-03 19:24:02 +03:00
#endif