Add a solid outline tracing the frame's outer edge
Version Bump / check-bump-label (pull_request) Skipped
Version Bump / apply-version-bump (pull_request) Successful in 23s

New plugin:hyprchrome:outline_size (px, 0 = off) and outline_color
(default white) stroke the frame's outer silhouette - chamfers, title bar
plateau and side notches - with a flat color, so it reads as a drawn line
against the gradient-filled frame underneath. Off by default.

The line sits inside the frame rather than centred on the silhouette. The
outer path runs along the texture's own bounds, so half of a centred
stroke would fall off the surface and vanish on exactly those sides;
stroking at double width leaves the inner half, which comes to
outline_size on every edge.

The clip is the whole ring rather than just the outer path, so an outline
thicker than the frame stops at the window's edge instead of spilling
across the ring onto the window, and a miter spike at the plateau's dip
stays confined to the frame.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-31 02:00:06 +02:00
co-authored by Claude Opus 5
parent d69fe10b46
commit a22403d603
6 changed files with 72 additions and 6 deletions
+11
View File
@@ -43,6 +43,15 @@ struct GlobalState {
"Peak opacity of the inward glow at the window edge, 0-1",
0.35F,
FloatValueOptions{.min = 0.F, .max = 1.F}),
.outlineSize = makeShared<IntValue>(
"plugin:hyprchrome:outline_size",
"Thickness of the solid outline tracing the frame's edges, in pixels (0 disables it)",
0,
IntValueOptions{.min = 0}),
.outlineColor = makeShared<ColorValue>(
"plugin:hyprchrome:outline_color",
"Color of the outline tracing the frame's edges",
RGBAToARGB(0xFFFFFFFF)),
.shadowSize = makeShared<IntValue>(
"plugin:hyprchrome:shadow_size",
"How far the frame's drop shadow reaches past its outline, in pixels (0 disables it)",
@@ -77,6 +86,8 @@ struct GlobalState {
HyprlandAPI::addConfigValueV2(plugin, config.inactiveColor);
HyprlandAPI::addConfigValueV2(plugin, config.glowSize);
HyprlandAPI::addConfigValueV2(plugin, config.glowStrength);
HyprlandAPI::addConfigValueV2(plugin, config.outlineSize);
HyprlandAPI::addConfigValueV2(plugin, config.outlineColor);
HyprlandAPI::addConfigValueV2(plugin, config.shadowSize);
HyprlandAPI::addConfigValueV2(plugin, config.shadowColor);
HyprlandAPI::addConfigValueV2(plugin, config.shadowOffset);