From 50569a14270c2192fbfa768361089656a71f4a15 Mon Sep 17 00:00:00 2001 From: Martin Fouilleul Date: Fri, 24 Feb 2023 23:06:39 +0100 Subject: [PATCH] Allow setting texture on arbitrary path fills --- examples/image/main.c | 10 +++++++- src/graphics.c | 54 +++++++++++++++++++++---------------------- src/graphics.h | 5 ++-- 3 files changed, 38 insertions(+), 31 deletions(-) diff --git a/examples/image/main.c b/examples/image/main.c index 9fbeda6..88d12dd 100644 --- a/examples/image/main.c +++ b/examples/image/main.c @@ -79,7 +79,15 @@ int main() mg_matrix_push((mg_mat2x3){0.707, -0.707, 200, 0.707, 0.707, 100}); - mg_image_draw_rounded(image, (mp_rect){0, 0, imageSize.x/8, imageSize.y/8}, 40.); + mg_set_image(image); + mg_move_to(0, 0); + mg_line_to(100, 0); + mg_line_to(150, 50); + mg_line_to(100, 100); + mg_line_to(0, 100); + mg_line_to(50, 50); + mg_fill(); + //mg_image_draw_rounded(image, (mp_rect){0, 0, imageSize.x/8, imageSize.y/8}, 40.); mg_matrix_pop(); diff --git a/src/graphics.c b/src/graphics.c index cd081fc..fa9d0d5 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -3078,11 +3078,10 @@ void mg_clip_pop() void mg_set_color(mg_color color) { mg_canvas_data* canvas = __mgCurrentCanvas; - if(!canvas) + if(canvas) { - return; + canvas->attributes.color = color; } - canvas->attributes.color = color; } void mg_set_color_rgba(f32 r, f32 g, f32 b, f32 a) @@ -3093,81 +3092,82 @@ void mg_set_color_rgba(f32 r, f32 g, f32 b, f32 a) void mg_set_width(f32 width) { mg_canvas_data* canvas = __mgCurrentCanvas; - if(!canvas) + if(canvas) { - return; + canvas->attributes.width = width; } - canvas->attributes.width = width; } void mg_set_tolerance(f32 tolerance) { mg_canvas_data* canvas = __mgCurrentCanvas; - if(!canvas) + if(canvas) { - return; + canvas->attributes.tolerance = tolerance; } - canvas->attributes.tolerance = tolerance; } void mg_set_joint(mg_joint_type joint) { mg_canvas_data* canvas = __mgCurrentCanvas; - if(!canvas) + if(canvas) { - return; + canvas->attributes.joint = joint; } - canvas->attributes.joint = joint; } void mg_set_max_joint_excursion(f32 maxJointExcursion) { mg_canvas_data* canvas = __mgCurrentCanvas; - if(!canvas) + if(canvas) { - return; + canvas->attributes.maxJointExcursion = maxJointExcursion; } - canvas->attributes.maxJointExcursion = maxJointExcursion; } void mg_set_cap(mg_cap_type cap) { mg_canvas_data* canvas = __mgCurrentCanvas; - if(!canvas) + if(canvas) { - return; + canvas->attributes.cap = cap; } - canvas->attributes.cap = cap; } void mg_set_font(mg_font font) { mg_canvas_data* canvas = __mgCurrentCanvas; - if(!canvas) + if(canvas) { - return; + canvas->attributes.font = font; } - canvas->attributes.font = font; } void mg_set_font_size(f32 fontSize) { mg_canvas_data* canvas = __mgCurrentCanvas; - if(!canvas) + if(canvas) { - return; + canvas->attributes.fontSize = fontSize; } - canvas->attributes.fontSize = fontSize; } void mg_set_text_flip(bool flip) { mg_canvas_data* canvas = __mgCurrentCanvas; - if(!canvas) + if(canvas) { - return; + canvas->textFlip = flip; + } +} + +void mg_set_image(mg_image image) +{ + mg_canvas_data* canvas = __mgCurrentCanvas; + if(canvas) + { + canvas->attributes.image = image; } - canvas->textFlip = flip; } mg_color mg_get_color() diff --git a/src/graphics.h b/src/graphics.h index f66a662..571a8cd 100644 --- a/src/graphics.h +++ b/src/graphics.h @@ -105,8 +105,8 @@ MP_API void mg_surface_set_hidden(mg_surface surface, bool hidden); //NOTE(martin): graphics canvas structs //------------------------------------------------------------------------------------------ typedef struct mg_canvas { u64 h; } mg_canvas; -typedef struct mg_stream { u64 h; } mg_stream; typedef struct mg_font { u64 h; } mg_font; +typedef struct mg_image { u64 h; } mg_image; typedef struct mg_mat2x3 { @@ -193,6 +193,7 @@ MP_API void mg_set_cap(mg_cap_type cap); MP_API void mg_set_font(mg_font font); MP_API void mg_set_font_size(f32 size); MP_API void mg_set_text_flip(bool flip); +MP_API void mg_set_image(mg_image image); MP_API mg_color mg_get_color(); MP_API f32 mg_get_width(); @@ -269,8 +270,6 @@ MP_API mp_rect mg_text_bounding_box(mg_font font, f32 fontSize, str8 text); //------------------------------------------------------------------------------------------ //NOTE(martin): images //------------------------------------------------------------------------------------------ -typedef struct mg_image { u64 h; } mg_image; - MP_API mg_image mg_image_nil(); MP_API bool mg_image_is_nil(mg_image a);