From 165c408de117b5f3923b945756e4ebffc5b733d7 Mon Sep 17 00:00:00 2001 From: Federico Angelilli Date: Wed, 20 Nov 2024 22:35:54 +0100 Subject: Make render_capsule function --- src/layout.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) (limited to 'src/layout.c') diff --git a/src/layout.c b/src/layout.c index b0aee0c..193ebbd 100644 --- a/src/layout.c +++ b/src/layout.c @@ -19,6 +19,7 @@ void layout_init(layout_t *layout, block_t *block, layout_info_t info) layout->x_padding = block->x_padding; layout->y_padding = block->y_padding; layout->height = info.height; + layout->line_width = block->line_width; switch (block->type) { case BLOCK_TEXT: { @@ -93,9 +94,10 @@ void layout_init(layout_t *layout, block_t *block, layout_info_t info) void layout_render(layout_t *layout, cairo_t *cr) { - const double degree = M_PI / 180.0; - int radius = layout->height / 2 - layout->y_padding; - int line_radius = radius - layout->block->line_width / 2; + const int radius = layout->height / 2 - layout->y_padding; + + int block_x = layout->x + layout->x_padding; + int block_y = layout->y + layout->y_padding; // Update gradients cairo_matrix_t matrix; @@ -105,10 +107,7 @@ void layout_render(layout_t *layout, cairo_t *cr) // Render background cairo_pattern_t *pattern = layout->block->bg_color.pattern; if (pattern != NULL) { - cairo_new_sub_path(cr); - cairo_arc(cr, layout->x + layout->x_padding + radius, layout->y + layout->y_padding + radius, radius, 90 * degree, 270 * degree); - cairo_arc(cr, layout->x + layout->width - layout->x_padding - radius, layout->y + layout->y_padding + radius, radius, 270 * degree, 450 * degree); - cairo_close_path(cr); + render_capsule(cr, block_x, block_y, layout->width - layout->x_padding, radius, radius); cairo_pattern_set_matrix(pattern, &matrix); cairo_set_source(cr, pattern); @@ -118,10 +117,8 @@ void layout_render(layout_t *layout, cairo_t *cr) // Render border pattern = layout->block->line_color.pattern; if (pattern != NULL) { - cairo_new_sub_path(cr); - cairo_arc(cr, layout->x + layout->x_padding + radius, layout->y + layout->y_padding + radius, line_radius, 90 * degree, 270 * degree); - cairo_arc(cr, layout->x + layout->width - layout->x_padding - radius, layout->y + layout->y_padding + radius, line_radius, 270 * degree, 450 * degree); - cairo_close_path(cr); + int line_radius = radius - layout->line_width / 2; + render_capsule(cr, block_x, block_y, layout->width - layout->x_padding, radius, line_radius); cairo_pattern_set_matrix(pattern, &matrix); cairo_set_source(cr, pattern); -- cgit v1.2.3