v4k-git-backup/engine/split/v4k_gui.h

58 lines
2.1 KiB
C
Raw Normal View History

2023-11-26 15:27:33 +00:00
// ----------------------------------------------------------------------------
// game ui
typedef struct guiskin_t {
2023-11-26 21:21:57 +00:00
void (*drawrect)(void* userdata, const char *skin, vec4 rect);
void (*getskinsize)(void* userdata, const char *skin, vec2 *size);
2023-11-28 13:31:56 +00:00
void (*getscissorrect)(void* userdata, const char *skin, vec4 rect, vec4 *dims);
bool (*ismouseinrect)(void* userdata, const char *skin, vec4 rect);
2023-11-26 15:27:33 +00:00
void (*free)(void* userdata);
void *userdata;
} guiskin_t;
API void gui_pushskin(guiskin_t skin);
API void* gui_userdata();
2023-11-26 21:21:57 +00:00
API vec2 gui_getskinsize(const char *skin);
2023-11-28 13:31:56 +00:00
API bool gui_ismouseinrect(const char *skin, vec4 rect);
2023-11-26 15:27:33 +00:00
// --
2023-11-28 13:31:56 +00:00
API void gui_panel_id(int id, vec4 rect, const char *skin);
API void gui_rect_id(int id, vec4 rect, const char *skin);
API bool gui_button_id(int id, vec4 rect, const char *skin);
API bool gui_slider_id(int id, vec4 rect, const char *skin, float min, float max, float step, float *value);
API void gui_panel_end();
2023-11-26 15:27:33 +00:00
API void gui_popskin();
// helpers
2023-11-28 13:31:56 +00:00
#define gui_panel(...) gui_panel_id(__LINE__, __VA_ARGS__)
#define gui_rect(...) gui_rect_id(__LINE__, __VA_ARGS__)
#define gui_button(...) gui_button_id(__LINE__, __VA_ARGS__)
#define gui_slider(...) gui_slider_id(__LINE__, __VA_ARGS__)
2023-11-26 15:27:33 +00:00
2023-11-26 17:54:02 +00:00
// default renderers
2023-11-26 15:27:33 +00:00
2023-11-26 17:54:02 +00:00
/// skinned
2023-11-28 13:48:54 +00:00
/* The skinning engine depends on an Aseprite asset with slices set up.
While you can specify your own skins for various GUI widgets, some
skin variants are hardcoded and expected to be present in your asset:
gui_panel():
- "panel" (overridable)
gui_button():
- "button" (base overridable)
- "_hover" (ex. "scarybtn_hover")
- "_press"
gui_rect():
- no defaults, always pass your own skin/slice name
gui_slider():
- "slider" (overridable)
- "slider_cursor" (partially overridable, ex. "bigslider_cursor")
- "_hover" (ex. "slider_cursor_hover")
- "_press"
*/
2023-11-26 15:27:33 +00:00
typedef struct skinned_t {
atlas_t atlas;
float scale;
} skinned_t;
2023-11-28 13:48:54 +00:00
API guiskin_t gui_skinned(const char *asefile, float scale);