X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=vg%2Fvg_ui.h;h=fe46da0040a8bcd795f9628134d3519d78807b63;hb=a46972aa1ee718339c2512cae986f2943bed0e04;hp=35a3e3b8df9294a8ab30aac94f4d2d41a33bbb72;hpb=e00ea4ccba1891970699f9b5b78ba1ebaada2974;p=fishladder.git diff --git a/vg/vg_ui.h b/vg/vg_ui.h index 35a3e3b..fe46da0 100644 --- a/vg/vg_ui.h +++ b/vg/vg_ui.h @@ -55,6 +55,26 @@ typedef i16 ui_px; typedef u32 ui_colour; typedef ui_px ui_rect[4]; typedef struct ui_ctx ui_ctx; +typedef struct ui_colourset ui_colourset; + +struct ui_colourset +{ + union + { + struct + { + ui_colour main; + ui_colour hover; + ui_colour active; + }; + struct + { + ui_colour background; + ui_colour bar; + ui_colour bar_hover; + }; + }; +}; struct ui_ctx { @@ -96,6 +116,9 @@ struct ui_ctx // User input ui_px mouse[2]; int click_state; // 0: released, 1: on down, 2: pressed, 3: on release + + ui_colourset *colours_main; + ui_colourset *colours_current; }; // Shortnames @@ -105,7 +128,7 @@ struct ui_ctx #define gui_hasmouse(...) ui_hasmouse( &ui_global_ctx, __VA_ARGS__) #define gui_end() ui_end( &ui_global_ctx ) #define gui_end_down() ui_end_down( &ui_global_ctx ) -#define gui_end_right() ui_fill_right( &ui_global_ctx ) +#define gui_end_right() ui_end_right( &ui_global_ctx ) #define gui_fill_y() ui_fill_y( &ui_global_ctx) #define gui_fill_x() ui_fill_x( &ui_global_ctx) #define gui_align_bottom() ui_align_bottom( &ui_global_ctx ) @@ -127,6 +150,10 @@ struct ui_ctx #define gui_window(...) ui_window( &ui_global_ctx, __VA_ARGS__) #define gui_want_mouse() ui_want_mouse( &ui_global_ctx ) +#define gui_scrollbar(...) ui_scrollbar( &ui_global_ctx, __VA_ARGS__) +#define gui_override_colours(...) ui_override_colours( &ui_global_ctx, __VA_ARGS__) +#define gui_reset_colours(...) ui_reset_colours( &ui_global_ctx ) + // Globals // =========================================================================================================== @@ -141,7 +168,16 @@ GLuint ui_ebo; #define UI_BUFFER_SIZE 30000 #define UI_INDEX_SIZE 20000 -ui_ctx ui_global_ctx = { .padding = 8 }; +ui_colourset ui_default_colours = { + .main = 0xff00ff00, + .hover = 0xffff00ff, + .active = 0xffff0000 +}; +ui_ctx ui_global_ctx = { + .padding = 8, + .colours_current = &ui_default_colours, + .colours_main = &ui_default_colours +}; // Initialization @@ -678,7 +714,7 @@ static int ui_button( ui_ctx *ctx, u32 id ) if( ui_hasmouse(ctx) ) { - ui_fill_rect( ctx, ctx->cursor, 0xffcccccc ); + ui_fill_rect( ctx, ctx->cursor, ctx->colours_current->hover ); if( ctx->click_state == 1 ) { @@ -691,7 +727,7 @@ static int ui_button( ui_ctx *ctx, u32 id ) return k_button_hold; } else - ui_fill_rect( ctx, ctx->cursor, 0xff999999 ); + ui_fill_rect( ctx, ctx->cursor, ctx->colours_current->main ); } return k_button_released; @@ -796,8 +832,8 @@ static void ui_scrollbar( ui_ctx *ctx, struct ui_scrollbar *scrollbar, u32 id ) ui_new_node( ctx ); { - ui_fill_rect( ctx, ctx->cursor, 0xff000000 ); - ui_capture_mouse( ctx, __COUNTER__ ); + ui_fill_rect( ctx, ctx->cursor, ctx->colours_current->background ); + ui_capture_mouse( ctx, id ); ctx->cursor[1] += scrollbar->py; ctx->cursor[3] = scrollbar->bar_height; @@ -805,14 +841,14 @@ static void ui_scrollbar( ui_ctx *ctx, struct ui_scrollbar *scrollbar, u32 id ) ui_new_node( ctx ); { ui_capture_mouse( ctx, __COUNTER__ ); - struct ui_vert *drag_bar = ui_fill_rect( ctx, ctx->cursor, 0xff555555 ); + struct ui_vert *drag_bar = ui_fill_rect( ctx, ctx->cursor, ctx->colours_current->bar ); if( ui_hasmouse( ctx ) || scrollbar->drag ) { - drag_bar[0].colour = 0xff777777; - drag_bar[1].colour = 0xff777777; - drag_bar[2].colour = 0xff777777; - drag_bar[3].colour = 0xff777777; + drag_bar[0].colour = ctx->colours_current->bar_hover; + drag_bar[1].colour = ctx->colours_current->bar_hover; + drag_bar[2].colour = ctx->colours_current->bar_hover; + drag_bar[3].colour = ctx->colours_current->bar_hover; // start drag if( ctx->click_state == 1 ) @@ -834,3 +870,14 @@ static ui_px ui_calculate_content_scroll( struct ui_scrollbar *scrollbar, ui_px float range = scrollbar->view_height - scrollbar->bar_height; return ((float)scrollbar->py / range) * overlap; } + +static void ui_override_colours( ui_ctx *ctx, ui_colourset *set ) +{ + ctx->colours_current = set; +} + +static void ui_reset_colours( ui_ctx *ctx ) +{ + ctx->colours_current = ctx->colours_main; + ctx->override_colour = 0xffffffff; +}