From 9833fbba1f6259de40828b213090eb9908861047 Mon Sep 17 00:00:00 2001 From: Nikita Zlobin Date: Thu, 21 May 2020 03:25:22 +0500 Subject: [PATCH] Limit frame stroke area --- src/draw.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/draw.c b/src/draw.c index d7e3431..6c78288 100644 --- a/src/draw.c +++ b/src/draw.c @@ -481,6 +481,12 @@ static cairo_surface_t *render_background(cairo_surface_t *srf, cairo_t *c = cairo_create(srf); + /* stroke area doesn't intersect with main area */ + cairo_set_fill_rule(c, CAIRO_FILL_RULE_EVEN_ODD); + + /* for correct combination of adjacent areas */ + cairo_set_operator(c, CAIRO_OPERATOR_ADD); + if (first) height += settings.frame_width; if (last) @@ -489,9 +495,7 @@ static cairo_surface_t *render_background(cairo_surface_t *srf, height += settings.separator_height; if (settings.frame_width > 0) { - cairo_set_source_rgb(c, cl->frame.r, cl->frame.g, cl->frame.b); draw_rounded_rect(c, x, y, width, height, corner_radius, first, last); - cairo_fill(c); /* adding frame */ x += settings.frame_width; @@ -508,12 +512,18 @@ static cairo_surface_t *render_background(cairo_surface_t *srf, height -= settings.separator_height; radius_int = frame_internal_radius (corner_radius, settings.frame_width, height); + + draw_rounded_rect(c, x, y, width, height, radius_int, first, last); + cairo_set_source_rgb(c, cl->frame.r, cl->frame.g, cl->frame.b); + cairo_fill(c); } - cairo_set_source_rgb(c, cl->bg.r, cl->bg.g, cl->bg.b); draw_rounded_rect(c, x, y, width, height, radius_int, first, last); + cairo_set_source_rgb(c, cl->bg.r, cl->bg.g, cl->bg.b); cairo_fill(c); + cairo_set_operator(c, CAIRO_OPERATOR_OVER); + if ( settings.sep_color.type != SEP_FRAME && settings.separator_height > 0 && !last) {