diff options
| author | Federico Angelilli <code@fedang.net> | 2024-11-20 22:35:54 +0100 |
|---|---|---|
| committer | Federico Angelilli <code@fedang.net> | 2024-11-20 22:35:54 +0100 |
| commit | 165c408de117b5f3923b945756e4ebffc5b733d7 (patch) | |
| tree | 20343309d893c78a9d0420f9247366cd3aead69b /src/layout.c | |
| parent | 2fd774e1c718f6654d34bc6a472ab180d3c8239d (diff) | |
Make render_capsule function
Diffstat (limited to 'src/layout.c')
| -rw-r--r-- | src/layout.c | 19 |
1 files changed, 8 insertions, 11 deletions
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); |
