aboutsummaryrefslogtreecommitdiff
path: root/src/layout.c
diff options
context:
space:
mode:
authorFederico Angelilli <code@fedang.net>2024-11-20 22:35:54 +0100
committerFederico Angelilli <code@fedang.net>2024-11-20 22:35:54 +0100
commit165c408de117b5f3923b945756e4ebffc5b733d7 (patch)
tree20343309d893c78a9d0420f9247366cd3aead69b /src/layout.c
parent2fd774e1c718f6654d34bc6a472ab180d3c8239d (diff)
Make render_capsule function
Diffstat (limited to 'src/layout.c')
-rw-r--r--src/layout.c19
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);