diff --git a/settings/quickshell.nix b/settings/quickshell.nix index 08ef03e..81f2639 100644 --- a/settings/quickshell.nix +++ b/settings/quickshell.nix @@ -515,19 +515,25 @@ in } // Frame right-column inner border — starts below a flush-right - // dropdown's bottom curve and follows the morph. + // dropdown's bottom curve and follows the morph. The short y + // animation softens the dock/undock jump. Rectangle { x: bar.width - Theme.frameWidth - Theme.borderWidth / 2 y: chrome.mergedRight ? 30 + chrome.height + 8 : 38 width: Theme.borderWidth height: Math.max(0, bar.height - Theme.frameWidth - 8 - y) color: Theme.base03 + Behavior on y { + NumberAnimation { duration: 90; easing.type: Easing.OutCubic } + } } - // Frame top-right inner corner — hidden while a flush-right + // Frame top-right inner corner — fades out while a flush-right // dropdown is merged into the column there. Shape { - visible: !chrome.mergedRight + opacity: chrome.mergedRight ? 0 : 1 + visible: opacity > 0.01 + Behavior on opacity { NumberAnimation { duration: 90 } } preferredRendererType: Shape.CurveRenderer ShapePath { fillColor: "transparent" @@ -1359,13 +1365,20 @@ in NumberAnimation { duration: 280; easing.type: Easing.OutExpo } } + // Crossfade between the floating and column-merged + // silhouettes at dock/undock; the brief double-draw of + // the (near-identical) bodies is imperceptible over blur. PanelShape { - visible: !chrome.mergedRight + opacity: chrome.mergedRight ? 0 : 1 + visible: opacity > 0.01 + Behavior on opacity { NumberAnimation { duration: 90 } } width: chrome.width height: chrome.height } PanelShapeFlush { - visible: chrome.mergedRight + opacity: chrome.mergedRight ? 1 : 0 + visible: opacity > 0.01 + Behavior on opacity { NumberAnimation { duration: 90 } } width: chrome.width height: chrome.height }