1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-08-01 19:18:28 -04:00

refactor(blurSync): reimplement blur sync in popouts & modals

This commit is contained in:
purian23
2026-07-06 23:52:57 -04:00
parent 19a7dcf17d
commit 0bb8353a33
3 changed files with 44 additions and 14 deletions
@@ -62,6 +62,11 @@ Item {
property bool animationsEnabled: true
function _kickBlurCommit() {
if (typeof contentWindow.update === "function")
contentWindow.update();
}
function open() {
closeTimer.stop();
isClosing = false;
@@ -201,6 +206,12 @@ Item {
}
})(), dpr)
onAlignedXChanged: _kickBlurCommit()
onAlignedYChanged: _kickBlurCommit()
onAlignedWidthChanged: _kickBlurCommit()
onAlignedHeightChanged: _kickBlurCommit()
onShouldBeVisibleChanged: _kickBlurCommit()
PanelWindow {
id: clickCatcher
visible: false
@@ -244,11 +255,13 @@ Item {
WindowBlur {
targetWindow: contentWindow
readonly property real s: Math.min(1, modalContainer.scaleValue)
readonly property real op: Math.max(0, Math.min(1, (morph.openProgress - 0.06) * 2))
readonly property real visibleScale: s * op
// Blur tracks the surface's scaled rect, matching the connected backend.
blurX: modalContainer.x + modalContainer.width * (1 - s) * 0.5 + Theme.snap(modalContainer.animX, root.dpr)
blurY: modalContainer.y + modalContainer.height * (1 - s) * 0.5 + Theme.snap(modalContainer.animY, root.dpr)
blurWidth: root.shouldBeVisible ? modalContainer.width * s : 0
blurHeight: root.shouldBeVisible ? modalContainer.height * s : 0
blurX: modalContainer.x + modalContainer.width * (1 - visibleScale) * 0.5 + Theme.snap(modalContainer.animX, root.dpr)
blurY: modalContainer.y + modalContainer.height * (1 - visibleScale) * 0.5 + Theme.snap(modalContainer.animY, root.dpr)
blurWidth: root.shouldBeVisible ? modalContainer.width * visibleScale : 0
blurHeight: root.shouldBeVisible ? modalContainer.height * visibleScale : 0
blurRadius: root.cornerRadius
}
@@ -338,6 +351,7 @@ Item {
QtObject {
id: morph
property real openProgress: root.shouldBeVisible ? 1 : 0
onOpenProgressChanged: root._kickBlurCommit()
Behavior on openProgress {
enabled: root.animationsEnabled
DankAnim {
@@ -82,6 +82,12 @@ Item {
readonly property real windowWidth: alignedWidth + contentX + shadowPad
readonly property real windowHeight: alignedHeight + contentY + shadowPad
onAlignedXChanged: _kickBlurCommit()
onAlignedYChanged: _kickBlurCommit()
onAlignedWidthChanged: _kickBlurCommit()
onAlignedHeightChanged: _kickBlurCommit()
onContentVisibleChanged: _kickBlurCommit()
readonly property color backgroundColor: Theme.withAlpha(Theme.surfaceContainer, Theme.popupTransparency)
readonly property bool useBackgroundDarken: !FrameTransitionState.effectiveFrameEnabled && SettingsData.modalDarkenBackground
readonly property bool useSingleWindow: CompositorService.isHyprland || useBackgroundDarken
@@ -113,6 +119,11 @@ Item {
signal dialogClosed
function _kickBlurCommit() {
if (typeof launcherWindow.update === "function")
launcherWindow.update();
}
function _ensureContentLoadedAndInitialize(query, mode) {
_pendingQuery = query || "";
_pendingMode = mode || "";
@@ -366,11 +377,13 @@ Item {
WindowBlur {
targetWindow: launcherWindow
readonly property real s: Math.min(1, modalContainer.publishedScale)
readonly property real op: Math.max(0, Math.min(1, (modalContainer.opacity - 0.06) * 2))
readonly property real visibleScale: s * op
// Blur tracks the surface's scaled rect
blurX: modalContainer.x + modalContainer.width * (1 - s) * 0.5
blurY: modalContainer.y + modalContainer.height * (1 - s) * 0.5
blurWidth: contentVisible ? modalContainer.width * s : 0
blurHeight: contentVisible ? modalContainer.height * s : 0
blurX: modalContainer.x + modalContainer.width * (1 - visibleScale) * 0.5
blurY: modalContainer.y + modalContainer.height * (1 - visibleScale) * 0.5
blurWidth: contentVisible ? modalContainer.width * visibleScale : 0
blurHeight: contentVisible ? modalContainer.height * visibleScale : 0
blurRadius: root.cornerRadius
}
@@ -460,6 +473,8 @@ Item {
opacity: contentVisible ? 1 : 0
scale: contentVisible ? 1 : 0.96
transformOrigin: Item.Center
onOpacityChanged: root._kickBlurCommit()
onPublishedScaleChanged: root._kickBlurCommit()
Behavior on opacity {
NumberAnimation {