[canvas] Set command attributes to canvas->attributes by default in mg_push_command()

This commit is contained in:
Martin Fouilleul 2023-02-25 15:35:24 +01:00
parent 193afb61fd
commit e66932e624
1 changed files with 35 additions and 29 deletions

View File

@ -732,6 +732,7 @@ void mg_push_command(mg_canvas_data* canvas, mg_primitive primitive)
ASSERT(canvas->primitiveCount < MG_MAX_PRIMITIVE_COUNT); ASSERT(canvas->primitiveCount < MG_MAX_PRIMITIVE_COUNT);
canvas->primitives[canvas->primitiveCount] = primitive; canvas->primitives[canvas->primitiveCount] = primitive;
canvas->primitives[canvas->primitiveCount].transform = mg_matrix_stack_top(canvas); canvas->primitives[canvas->primitiveCount].transform = mg_matrix_stack_top(canvas);
canvas->primitives[canvas->primitiveCount].attributes = canvas->attributes;
canvas->primitiveCount++; canvas->primitiveCount++;
} }
@ -3479,7 +3480,7 @@ void mg_clear()
mg_canvas_data* canvas = __mgCurrentCanvas; mg_canvas_data* canvas = __mgCurrentCanvas;
if(canvas) if(canvas)
{ {
mg_push_command(canvas, (mg_primitive){.cmd = MG_CMD_CLEAR, .attributes = canvas->attributes}); mg_push_command(canvas, (mg_primitive){.cmd = MG_CMD_CLEAR});
} }
} }
@ -3488,7 +3489,7 @@ void mg_fill()
mg_canvas_data* canvas = __mgCurrentCanvas; mg_canvas_data* canvas = __mgCurrentCanvas;
if(canvas && canvas->path.count) if(canvas && canvas->path.count)
{ {
mg_push_command(canvas, (mg_primitive){.cmd = MG_CMD_FILL, .path = canvas->path, .attributes = canvas->attributes}); mg_push_command(canvas, (mg_primitive){.cmd = MG_CMD_FILL, .path = canvas->path});
mg_new_path(canvas); mg_new_path(canvas);
} }
} }
@ -3498,7 +3499,7 @@ void mg_stroke()
mg_canvas_data* canvas = __mgCurrentCanvas; mg_canvas_data* canvas = __mgCurrentCanvas;
if(canvas && canvas->path.count) if(canvas && canvas->path.count)
{ {
mg_push_command(canvas, (mg_primitive){.cmd = MG_CMD_STROKE, .path = canvas->path, .attributes = canvas->attributes}); mg_push_command(canvas, (mg_primitive){.cmd = MG_CMD_STROKE, .path = canvas->path});
mg_new_path(canvas); mg_new_path(canvas);
} }
} }
@ -3511,7 +3512,7 @@ void mg_rectangle_fill(f32 x, f32 y, f32 w, f32 h)
mg_canvas_data* canvas = __mgCurrentCanvas; mg_canvas_data* canvas = __mgCurrentCanvas;
if(canvas) if(canvas)
{ {
mg_primitive primitive = {.cmd = MG_CMD_RECT_FILL, .rect = (mp_rect){x, y, w, h}, .attributes = canvas->attributes}; mg_primitive primitive = {.cmd = MG_CMD_RECT_FILL, .rect = (mp_rect){x, y, w, h}};
mg_push_command(canvas, primitive); mg_push_command(canvas, primitive);
} }
} }
@ -3521,7 +3522,7 @@ void mg_rectangle_stroke(f32 x, f32 y, f32 w, f32 h)
mg_canvas_data* canvas = __mgCurrentCanvas; mg_canvas_data* canvas = __mgCurrentCanvas;
if(canvas) if(canvas)
{ {
mg_primitive primitive = {.cmd = MG_CMD_RECT_STROKE, .rect = (mp_rect){x, y, w, h}, .attributes = canvas->attributes}; mg_primitive primitive = {.cmd = MG_CMD_RECT_STROKE, .rect = (mp_rect){x, y, w, h}};
mg_push_command(canvas, primitive); mg_push_command(canvas, primitive);
} }
} }
@ -3532,8 +3533,7 @@ void mg_rounded_rectangle_fill(f32 x, f32 y, f32 w, f32 h, f32 r)
if(canvas) if(canvas)
{ {
mg_primitive primitive = {.cmd = MG_CMD_ROUND_RECT_FILL, mg_primitive primitive = {.cmd = MG_CMD_ROUND_RECT_FILL,
.roundedRect = (mg_rounded_rect){x, y, w, h, r}, .roundedRect = (mg_rounded_rect){x, y, w, h, r}};
.attributes = canvas->attributes};
mg_push_command(canvas, primitive); mg_push_command(canvas, primitive);
} }
} }
@ -3544,8 +3544,7 @@ void mg_rounded_rectangle_stroke(f32 x, f32 y, f32 w, f32 h, f32 r)
if(canvas) if(canvas)
{ {
mg_primitive primitive = {.cmd = MG_CMD_ROUND_RECT_STROKE, mg_primitive primitive = {.cmd = MG_CMD_ROUND_RECT_STROKE,
.roundedRect = (mg_rounded_rect){x, y, w, h, r}, .roundedRect = (mg_rounded_rect){x, y, w, h, r}};
.attributes = canvas->attributes};
mg_push_command(canvas, primitive); mg_push_command(canvas, primitive);
} }
} }
@ -3556,8 +3555,7 @@ void mg_circle_fill(f32 x, f32 y, f32 r)
if(canvas) if(canvas)
{ {
mg_primitive primitive = {.cmd = MG_CMD_ELLIPSE_FILL, mg_primitive primitive = {.cmd = MG_CMD_ELLIPSE_FILL,
.rect = (mp_rect){x-r, y-r, 2*r, 2*r}, .rect = (mp_rect){x-r, y-r, 2*r, 2*r}};
.attributes = canvas->attributes};
mg_push_command(canvas, primitive); mg_push_command(canvas, primitive);
} }
} }
@ -3568,8 +3566,7 @@ void mg_circle_stroke(f32 x, f32 y, f32 r)
if(canvas) if(canvas)
{ {
mg_primitive primitive = {.cmd = MG_CMD_ELLIPSE_STROKE, mg_primitive primitive = {.cmd = MG_CMD_ELLIPSE_STROKE,
.rect = (mp_rect){x-r, y-r, 2*r, 2*r}, .rect = (mp_rect){x-r, y-r, 2*r, 2*r}};
.attributes = canvas->attributes};
mg_push_command(canvas, primitive); mg_push_command(canvas, primitive);
} }
} }
@ -3580,8 +3577,7 @@ void mg_ellipse_fill(f32 x, f32 y, f32 rx, f32 ry)
if(canvas) if(canvas)
{ {
mg_primitive primitive = {.cmd = MG_CMD_ELLIPSE_FILL, mg_primitive primitive = {.cmd = MG_CMD_ELLIPSE_FILL,
.rect = (mp_rect){x-rx, y-ry, 2*rx, 2*ry}, .rect = (mp_rect){x-rx, y-ry, 2*rx, 2*ry}};
.attributes = canvas->attributes};
mg_push_command(canvas, primitive); mg_push_command(canvas, primitive);
} }
} }
@ -3592,8 +3588,7 @@ void mg_ellipse_stroke(f32 x, f32 y, f32 rx, f32 ry)
if(canvas) if(canvas)
{ {
mg_primitive primitive = {.cmd = MG_CMD_ELLIPSE_STROKE, mg_primitive primitive = {.cmd = MG_CMD_ELLIPSE_STROKE,
.rect = (mp_rect){x-rx, y-ry, 2*rx, 2*ry}, .rect = (mp_rect){x-rx, y-ry, 2*rx, 2*ry}};
.attributes = canvas->attributes};
mg_push_command(canvas, primitive); mg_push_command(canvas, primitive);
} }
} }
@ -3744,13 +3739,19 @@ MP_API void mg_image_draw_region(mg_image image, mp_rect srcRegion, mp_rect dstR
mg_canvas_data* canvas = __mgCurrentCanvas; mg_canvas_data* canvas = __mgCurrentCanvas;
if(canvas) if(canvas)
{ {
mg_primitive primitive = {.cmd = MG_CMD_RECT_FILL, mg_image oldImage = canvas->attributes.image;
.rect = dstRegion, mp_rect oldSrcRegion = canvas->attributes.srcRegion;
.attributes = canvas->attributes}; mg_color oldColor = canvas->attributes.color;
primitive.attributes.image = image;
primitive.attributes.color = (mg_color){1, 1, 1, 1}; canvas->attributes.image = image;
primitive.attributes.srcRegion = srcRegion; canvas->attributes.srcRegion = srcRegion;
mg_push_command(canvas, primitive); canvas->attributes.color = (mg_color){1, 1, 1, 1};
mg_push_command(canvas, (mg_primitive){.cmd = MG_CMD_RECT_FILL, .rect = dstRegion});
canvas->attributes.image = oldImage;
canvas->attributes.srcRegion = oldSrcRegion;
canvas->attributes.color = oldColor;
} }
} }
@ -3759,12 +3760,17 @@ MP_API void mg_image_draw_region_rounded(mg_image image, mp_rect srcRegion, mp_r
mg_canvas_data* canvas = __mgCurrentCanvas; mg_canvas_data* canvas = __mgCurrentCanvas;
if(canvas) if(canvas)
{ {
mg_image oldImage = canvas->attributes.image;
mp_rect oldSrcRegion = canvas->attributes.srcRegion;
mg_color oldColor = canvas->attributes.color;
canvas->attributes.image = image;
canvas->attributes.srcRegion = srcRegion;
canvas->attributes.color = (mg_color){1, 1, 1, 1};
mg_primitive primitive = {.cmd = MG_CMD_ROUND_RECT_FILL, mg_primitive primitive = {.cmd = MG_CMD_ROUND_RECT_FILL,
.roundedRect = {dstRegion.x, dstRegion.y, dstRegion.w, dstRegion.h, roundness}, .roundedRect = {dstRegion.x, dstRegion.y, dstRegion.w, dstRegion.h, roundness}};
.attributes = canvas->attributes};
primitive.attributes.image = image;
primitive.attributes.color = (mg_color){1, 1, 1, 1};
primitive.attributes.srcRegion = srcRegion;
mg_push_command(canvas, primitive); mg_push_command(canvas, primitive);
} }
} }