diff --git a/examples/ui_style_test/main.c b/examples/ui_style_test/main.c index b18eb56..6281b59 100644 --- a/examples/ui_style_test/main.c +++ b/examples/ui_style_test/main.c @@ -255,7 +255,7 @@ int main() .font = font, .fontSize = 32}; - ui_flags defaultFlags = UI_FLAG_DRAW_BORDER; + ui_flags defaultFlags = UI_FLAG_DRAW_BORDER | UI_FLAG_DRAW_BACKGROUND; ui_box* root = 0; ui_frame() @@ -294,6 +294,9 @@ int main() &(ui_style){.bgColor = {0.5, 1, 0.5, 1}}, UI_STYLE_BG_COLOR); + ui_style_next(&(ui_style){.bgColor = {0.7, 0.7, 0.7, 1}}, UI_STYLE_BG_COLOR); + ui_style_next(&(ui_style){.size.width = {UI_SIZE_PARENT, 1}, .size.height = {UI_SIZE_PARENT, 1}}, UI_STYLE_SIZE); + ui_container("a", defaultFlags) { ui_pattern pattern = {0}; @@ -337,6 +340,14 @@ int main() static f32 slider3 = 0; ui_slider("slider3", 0.3, &slider3); + + ui_style_next(&(ui_style){.size.width = {UI_SIZE_PIXELS, 20}, + .size.height = {UI_SIZE_PIXELS, 200}}, + UI_STYLE_SIZE); + static f32 slider4 = 0; + ui_slider("slider4", 0.3, &slider4); + + } } ui_tag_next("foo"); diff --git a/src/graphics.c b/src/graphics.c index 3c28981..865e18c 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -212,6 +212,7 @@ typedef struct mg_canvas_data u32 vertexCount; u32 indexCount; + mg_surface surface; mg_canvas_backend* backend; } mg_canvas_data; @@ -2734,6 +2735,7 @@ mg_canvas mg_canvas_create(mg_surface surface) memset(canvas, 0, sizeof(mg_canvas_data)); } + canvas->surface = surface; canvas->backend = backend; canvas->attributes.color = (mg_color){0, 0, 0, 1}; @@ -2780,6 +2782,17 @@ mg_canvas mg_canvas_set_current(mg_canvas canvas) return(old); } + +vec2 mg_canvas_size(void) +{ + vec2 res = {0}; + if(__mgCurrentCanvas) + { + mp_rect frame = mg_surface_get_frame(__mgCurrentCanvas->surface); + res = (vec2){frame.w, frame.h}; + } + return(res); +} //////////////////////////////////////////////////////////// diff --git a/src/graphics.h b/src/graphics.h index d8a0e78..5f76bbf 100644 --- a/src/graphics.h +++ b/src/graphics.h @@ -169,15 +169,16 @@ typedef struct mg_text_extents //------------------------------------------------------------------------------------------ //NOTE(martin): graphics canvas //------------------------------------------------------------------------------------------ -MP_API mg_canvas mg_canvas_nil(); +MP_API mg_canvas mg_canvas_nil(void); MP_API bool mg_canvas_is_nil(mg_canvas canvas); MP_API mg_canvas mg_canvas_create(mg_surface surface); MP_API void mg_canvas_destroy(mg_canvas canvas); MP_API mg_canvas mg_canvas_set_current(mg_canvas canvas); -MP_API void mg_flush(); +MP_API void mg_flush(void); +MP_API vec2 mg_canvas_size(void); //------------------------------------------------------------------------------------------ //NOTE(martin): fonts //------------------------------------------------------------------------------------------ diff --git a/src/ui.c b/src/ui.c index 16f0c21..9b5f2ad 100644 --- a/src/ui.c +++ b/src/ui.c @@ -1296,17 +1296,25 @@ void ui_begin_frame() ui->clipStack = 0; ui->z = 0; + vec2 size = mg_canvas_size(); + ui_style defaultStyle = {0}; - defaultStyle.size.s[UI_AXIS_X] = (ui_size){UI_SIZE_CHILDREN}; - defaultStyle.size.s[UI_AXIS_Y] = (ui_size){UI_SIZE_CHILDREN}; + defaultStyle.size.s[UI_AXIS_X] = (ui_size){UI_SIZE_PIXELS, size.x}; + defaultStyle.size.s[UI_AXIS_Y] = (ui_size){UI_SIZE_PIXELS, size.y}; ui->root = ui_box_begin("_root_", 0); *ui->root->targetStyle = defaultStyle; - ui_style_next(&(ui_style){.layout = {UI_AXIS_Y, UI_ALIGN_START, UI_ALIGN_START}, + ui_style_mask contentStyleMask = UI_STYLE_SIZE + | UI_STYLE_LAYOUT + | UI_STYLE_FLOAT; + + ui_style_next(&(ui_style){.size.width = {UI_SIZE_PARENT, 1}, + .size.height = {UI_SIZE_PARENT, 1}, + .layout = {UI_AXIS_Y, UI_ALIGN_START, UI_ALIGN_START}, .floating = {true, true}, .floatTarget = {0, 0}}, - UI_STYLE_LAYOUT | UI_STYLE_FLOAT_X | UI_STYLE_FLOAT_Y); + contentStyleMask); ui_box* contents = ui_box_make("_contents_", 0); diff --git a/src/ui.h b/src/ui.h index 6bf0414..74398ec 100644 --- a/src/ui.h +++ b/src/ui.h @@ -168,6 +168,9 @@ enum | UI_STYLE_LAYOUT_MARGIN_X | UI_STYLE_LAYOUT_MARGIN_Y, + UI_STYLE_FLOAT = UI_STYLE_FLOAT_X + | UI_STYLE_FLOAT_Y, + UI_STYLE_MASK_INHERITED = UI_STYLE_COLOR | UI_STYLE_FONT | UI_STYLE_FONT_SIZE