Skip to content

Commit

Permalink
Fixed: corner frame and side frame now match at large radius
Browse files Browse the repository at this point in the history
  • Loading branch information
dj95 committed Oct 29, 2017
1 parent ede2e62 commit dc10dce
Showing 1 changed file with 19 additions and 16 deletions.
35 changes: 19 additions & 16 deletions src/x11/x.c
Original file line number Diff line number Diff line change
Expand Up @@ -594,26 +594,28 @@ static dimension_t x_render_layout(cairo_t *c, colored_layout *cl, colored_layou
cairo_rectangle(c, bg_x, bg_y, bg_width, bg_height);
cairo_fill(c);

int corner_radius = (settings.corner_radius < bg_height) ? settings.corner_radius : bg_height;

if (settings.frame_width > 0) {
if (first && last) {
cairo_new_sub_path (c);
cairo_arc (c, bg_x + bg_width - settings.corner_radius, bg_y + settings.corner_radius, settings.corner_radius, -90 * degrees, 0 * degrees);
cairo_arc (c, bg_x + bg_width - settings.corner_radius, bg_y + bg_height - settings.corner_radius, settings.corner_radius, 0 * degrees, 90 * degrees);
cairo_arc (c, bg_x + settings.corner_radius, bg_y + bg_height - settings.corner_radius, settings.corner_radius, 90 * degrees, 180 * degrees);
cairo_arc (c, bg_x + settings.corner_radius, bg_y + settings.corner_radius, settings.corner_radius, 180 * degrees, 270 * degrees);
cairo_arc (c, bg_x + bg_width - corner_radius, bg_y + corner_radius, corner_radius, -90 * degrees, 0 * degrees);
cairo_arc (c, bg_x + bg_width - corner_radius, bg_y + bg_height - corner_radius, corner_radius, 0 * degrees, 90 * degrees);
cairo_arc (c, bg_x + corner_radius, bg_y + bg_height - corner_radius, corner_radius, 90 * degrees, 180 * degrees);
cairo_arc (c, bg_x + corner_radius, bg_y + corner_radius, corner_radius, 180 * degrees, 270 * degrees);
cairo_close_path (c);
} else if (first) {
cairo_new_sub_path (c);
cairo_arc (c, bg_x + bg_width - settings.corner_radius, bg_y + settings.corner_radius, settings.corner_radius, -90 * degrees, 0 * degrees);
cairo_arc (c, bg_x + bg_width - corner_radius, bg_y + corner_radius, corner_radius, -90 * degrees, 0 * degrees);
cairo_arc (c, bg_x + bg_width, bg_y + bg_height, 0, 0, 0);
cairo_arc (c, bg_x, bg_y + bg_height, 0, 0, 0);
cairo_arc (c, bg_x + settings.corner_radius, bg_y + settings.corner_radius, settings.corner_radius, 180 * degrees, 270 * degrees);
cairo_arc (c, bg_x + corner_radius, bg_y + corner_radius, corner_radius, 180 * degrees, 270 * degrees);
cairo_close_path (c);
} else if (last) {
cairo_new_sub_path (c);
cairo_arc (c, bg_x + bg_width, bg_y, 0, 0, 0);
cairo_arc (c, bg_x + bg_width - settings.corner_radius, bg_y + bg_height - settings.corner_radius, settings.corner_radius, 0 * degrees, 90 * degrees);
cairo_arc (c, bg_x + settings.corner_radius, bg_y + bg_height - settings.corner_radius, settings.corner_radius, 90 * degrees, 180 * degrees);
cairo_arc (c, bg_x + bg_width - corner_radius, bg_y + bg_height - corner_radius, corner_radius, 0 * degrees, 90 * degrees);
cairo_arc (c, bg_x + corner_radius, bg_y + bg_height - corner_radius, corner_radius, 90 * degrees, 180 * degrees);
cairo_arc (c, bg_x, bg_y , 0, 180 * degrees, 270 * degrees);
cairo_close_path (c);
} else {
Expand All @@ -636,26 +638,27 @@ static dimension_t x_render_layout(cairo_t *c, colored_layout *cl, colored_layou
if (last)
bg_height -= settings.frame_width;

corner_radius = (settings.corner_radius < bg_height) ? settings.corner_radius : bg_height;
cairo_set_source_rgb(c, cl->bg.r, cl->bg.g, cl->bg.b);
if (first && last) {
cairo_new_sub_path (c);
cairo_arc (c, bg_x + bg_width - settings.corner_radius, bg_y + settings.corner_radius, settings.corner_radius, -90 * degrees, 0 * degrees);
cairo_arc (c, bg_x + bg_width - settings.corner_radius, bg_y + bg_height - settings.corner_radius, settings.corner_radius, 0 * degrees, 90 * degrees);
cairo_arc (c, bg_x + settings.corner_radius, bg_y + bg_height - settings.corner_radius, settings.corner_radius, 90 * degrees, 180 * degrees);
cairo_arc (c, bg_x + settings.corner_radius, bg_y + settings.corner_radius, settings.corner_radius, 180 * degrees, 270 * degrees);
cairo_arc (c, bg_x + bg_width - corner_radius, bg_y + corner_radius, corner_radius, -90 * degrees, 0 * degrees);
cairo_arc (c, bg_x + bg_width - corner_radius, bg_y + bg_height - corner_radius, corner_radius, 0 * degrees, 90 * degrees);
cairo_arc (c, bg_x + corner_radius, bg_y + bg_height - corner_radius, corner_radius, 90 * degrees, 180 * degrees);
cairo_arc (c, bg_x + corner_radius, bg_y + corner_radius, corner_radius, 180 * degrees, 270 * degrees);
cairo_close_path (c);
} else if (first) {
cairo_new_sub_path (c);
cairo_arc (c, bg_x + bg_width - settings.corner_radius, bg_y + settings.corner_radius, settings.corner_radius, -90 * degrees, 0 * degrees);
cairo_arc (c, bg_x + bg_width - corner_radius, bg_y + corner_radius, corner_radius, -90 * degrees, 0 * degrees);
cairo_arc (c, bg_x + bg_width, bg_y + bg_height, 0, 0, 0);
cairo_arc (c, bg_x, bg_y + bg_height, 0, 0, 0);
cairo_arc (c, bg_x + settings.corner_radius, bg_y + settings.corner_radius, settings.corner_radius, 180 * degrees, 270 * degrees);
cairo_arc (c, bg_x + corner_radius, bg_y + corner_radius, corner_radius, 180 * degrees, 270 * degrees);
cairo_close_path (c);
} else if (last) {
cairo_new_sub_path (c);
cairo_arc (c, bg_x + bg_width, bg_y, 0, 0, 0);
cairo_arc (c, bg_x + bg_width - settings.corner_radius, bg_y + bg_height - settings.corner_radius, settings.corner_radius, 0 * degrees, 90 * degrees);
cairo_arc (c, bg_x + settings.corner_radius, bg_y + bg_height - settings.corner_radius, settings.corner_radius, 90 * degrees, 180 * degrees);
cairo_arc (c, bg_x + bg_width - corner_radius, bg_y + bg_height - corner_radius, corner_radius, 0 * degrees, 90 * degrees);
cairo_arc (c, bg_x + corner_radius, bg_y + bg_height - corner_radius, corner_radius, 90 * degrees, 180 * degrees);
cairo_arc (c, bg_x, bg_y , 0, 180 * degrees, 270 * degrees);
cairo_close_path (c);
} else {
Expand Down

0 comments on commit dc10dce

Please sign in to comment.