From 662aee1f519319b3f3bd79d5081f38f20ca49042 Mon Sep 17 00:00:00 2001 From: Luo Yi Date: Wed, 14 Sep 2022 11:55:40 +0800 Subject: [PATCH] Make border drawing outside of window by set a negative border width --- .vscode/settings.json | 22 ------------------- ...ensions.rounded-window-corners.gschema.xml | 3 ++- src/effect/shader/rounded_corners.frag | 21 +++++++++++++----- src/preferences/pages/general.ui | 4 ++-- 4 files changed, 20 insertions(+), 30 deletions(-) delete mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 545a384..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "cSpell.words": [ - "Adwaita", - "cogl", - "GLSL", - "Graphene", - "libadwaita", - "libhandy", - "Prefs", - "valign", - "vfunc" - ], - "emeraldwalk.runonsave": { - "commands": [ - { - "match": ".ts", - "isAsync": true, - "cmd": "yarn build" - } - ] - }, -} \ No newline at end of file diff --git a/resources/schemas/org.gnome.shell.extensions.rounded-window-corners.gschema.xml b/resources/schemas/org.gnome.shell.extensions.rounded-window-corners.gschema.xml index 2f5401d..34b29a5 100644 --- a/resources/schemas/org.gnome.shell.extensions.rounded-window-corners.gschema.xml +++ b/resources/schemas/org.gnome.shell.extensions.rounded-window-corners.gschema.xml @@ -28,8 +28,9 @@ false - + Border width for rounded corners window + 0 diff --git a/src/effect/shader/rounded_corners.frag b/src/effect/shader/rounded_corners.frag index aa46bea..3efb000 100644 --- a/src/effect/shader/rounded_corners.frag +++ b/src/effect/shader/rounded_corners.frag @@ -95,11 +95,22 @@ void main() { vec2 texture_coord = cogl_tex_coord0_in.xy / pixel_step; float outer_alpha = rounded_rect_coverage(texture_coord, bounds, radius, exponent); - if(border_width > 0.1) { - float inner_alpha = rounded_rect_coverage(texture_coord, inner_bounds, inner_radius, exponent); - float border_alpha = clamp(outer_alpha - inner_alpha, 0.0, 1.0) * cogl_color_out.a; - cogl_color_out = mix(cogl_color_out, vec4(border_color.rgb, 1.0), border_alpha * border_color.a); + // Clip window corners first + cogl_color_out.a *= outer_alpha; + + // Draw border later + if(border_width > 0.9 || border_width < -0.9) { + float inner_alpha = rounded_rect_coverage(texture_coord, inner_bounds, inner_radius, exponent); + float border_alpha = clamp(abs(outer_alpha - inner_alpha), 0.0, 1.0); + + if (border_width > 0.9) { + // If border is drawing inside window, mix color of window + cogl_color_out = mix(cogl_color_out, vec4(border_color.rgb, 1.0), border_alpha * border_color.a); + cogl_color_out.a *= outer_alpha; + } else { + // If border is drawing outside window, just draw border + cogl_color_out = mix(cogl_color_out, border_color, border_alpha); + } } - cogl_color_out.a *= outer_alpha; } diff --git a/src/preferences/pages/general.ui b/src/preferences/pages/general.ui index 3889ff4..54fe8b4 100644 --- a/src/preferences/pages/general.ui +++ b/src/preferences/pages/general.ui @@ -374,8 +374,8 @@ - 0 - 40 + -20 + 20 1 1