From 137fd56bb28aafb6973194208e2b0346367a10fe Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Mon, 5 May 2025 20:21:56 +1000 Subject: feat: show osd on border hover --- modules/background/Border.qml | 6 ++++++ modules/osd/Osd.qml | 12 ++++++++++++ services/Drawers.qml | 20 ++++++++++++++++++++ 3 files changed, 38 insertions(+) create mode 100644 services/Drawers.qml diff --git a/modules/background/Border.qml b/modules/background/Border.qml index e944299..143097a 100644 --- a/modules/background/Border.qml +++ b/modules/background/Border.qml @@ -68,6 +68,12 @@ Scope { LayerShadow { source: effect } + + MouseArea { + anchors.fill: parent + hoverEnabled: true + onPositionChanged: event => Drawers.setPosForScreen(root.screen, event.x, event.y) + } } ExclusionZone { diff --git a/modules/osd/Osd.qml b/modules/osd/Osd.qml index 009eb2f..f16b396 100644 --- a/modules/osd/Osd.qml +++ b/modules/osd/Osd.qml @@ -12,6 +12,7 @@ Variants { required property ShellScreen modelData readonly property Brightness.Monitor monitor: Brightness.getMonitorForScreen(modelData) + property int winHeight property bool osdVisible property bool hovered @@ -50,6 +51,15 @@ Variants { } } + Connections { + target: Drawers + + function onPosChanged(screen: ShellScreen, x: int, y: int): void { + if (screen === root.modelData && x > screen.width / 2 && y > (screen.height - root.winHeight) / 2 && y < (screen.height + root.winHeight) / 2) + root.show(); + } + } + LazyLoader { loading: true @@ -68,6 +78,8 @@ Variants { anchors.right: true height: wrapper.height + Component.onCompleted: root.winHeight = height + Background { id: bg diff --git a/services/Drawers.qml b/services/Drawers.qml new file mode 100644 index 0000000..1f524ab --- /dev/null +++ b/services/Drawers.qml @@ -0,0 +1,20 @@ +pragma Singleton + +import Quickshell + +Singleton { + id: root + + property var positions: ({}) + + signal posChanged(screen: ShellScreen, x: int, y: int) + + function getPosForScreen(screen: ShellScreen): point { + return positions[screen] || Qt.point(0, 0); + } + + function setPosForScreen(screen: ShellScreen, x: int, y: int): void { + positions[screen] = Qt.point(x, y); + posChanged(screen, x, y); + } +} -- cgit v1.2.3-freya