From 7d7f7b9fd652ab320bf605b284600e36eadb4beb Mon Sep 17 00:00:00 2001 From: Benjamin Palko Date: Fri, 25 Jul 2025 10:26:38 -0400 Subject: [PATCH] generic styled popup window --- styled/StyledPopupWindow.qml | 75 ++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 styled/StyledPopupWindow.qml diff --git a/styled/StyledPopupWindow.qml b/styled/StyledPopupWindow.qml new file mode 100644 index 0000000..5474e84 --- /dev/null +++ b/styled/StyledPopupWindow.qml @@ -0,0 +1,75 @@ +import QtQuick +import Quickshell +import Quickshell.Widgets + +PopupWindow { + id: root + property bool opened: false + property int animationDuration: 200 + property int margins: 10 + property alias backgroundColor: background.color + property alias radius: background.radius + required property Component content + + color: "transparent" + + implicitWidth: background.width + implicitHeight: background.height + + Rectangle { + id: background + + implicitWidth: margins.width + implicitHeight: margins.height + + opacity: 0 + Behavior on opacity { + NumberAnimation { + duration: root.animationDuration + } + } + + states: State { + name: "opened" + when: root.opened + PropertyChanges { + background { + opacity: 1 + } + } + } + + transitions: [ + Transition { + from: "" + to: "opened" + ScriptAction { + script: root.visible = true + } + }, + Transition { + from: "opened" + to: "" + SequentialAnimation { + PauseAnimation { + duration: root.animationDuration + } + ScriptAction { + script: root.visible = false + } + } + } + ] + + WrapperItem { + id: margins + + margin: root.margins + + Loader { + active: root.visible + sourceComponent: content + } + } + } +}