summaryrefslogtreecommitdiff
path: root/modules/areapicker/Picker.qml
diff options
context:
space:
mode:
authorFreya Murphy <freya@freyacat.org>2026-01-09 15:15:49 -0500
committerFreya Murphy <freya@freyacat.org>2026-01-09 15:15:49 -0500
commitd8efeffaf11bca0fd4d14b67b5dcc3ffa4cb972d (patch)
tree38b012373dce50c8eecdfaad36332fb6a362f698 /modules/areapicker/Picker.qml
parentonly show active workspaces, fix colors (diff)
downloadcaelestia-shell-d8efeffaf11bca0fd4d14b67b5dcc3ffa4cb972d.tar.gz
caelestia-shell-d8efeffaf11bca0fd4d14b67b5dcc3ffa4cb972d.tar.bz2
caelestia-shell-d8efeffaf11bca0fd4d14b67b5dcc3ffa4cb972d.zip
remove more stuffff
Diffstat (limited to 'modules/areapicker/Picker.qml')
-rw-r--r--modules/areapicker/Picker.qml301
1 files changed, 0 insertions, 301 deletions
diff --git a/modules/areapicker/Picker.qml b/modules/areapicker/Picker.qml
deleted file mode 100644
index 67ec268..0000000
--- a/modules/areapicker/Picker.qml
+++ /dev/null
@@ -1,301 +0,0 @@
-pragma ComponentBehavior: Bound
-
-import qs.components
-import qs.services
-import qs.config
-import Caelestia
-import Quickshell
-import Quickshell.Wayland
-import QtQuick
-import QtQuick.Effects
-
-MouseArea {
- id: root
-
- required property LazyLoader loader
- required property ShellScreen screen
-
- property bool onClient
-
- property real realBorderWidth: onClient ? (Hypr.options["general:border_size"] ?? 1) : 2
- property real realRounding: onClient ? (Hypr.options["decoration:rounding"] ?? 0) : 0
-
- property real ssx
- property real ssy
-
- property real sx: 0
- property real sy: 0
- property real ex: screen.width
- property real ey: screen.height
-
- property real rsx: Math.min(sx, ex)
- property real rsy: Math.min(sy, ey)
- property real sw: Math.abs(sx - ex)
- property real sh: Math.abs(sy - ey)
-
- property list<var> clients: {
- const mon = Hypr.monitorFor(screen);
- if (!mon)
- return [];
-
- const special = mon.lastIpcObject.specialWorkspace;
- const wsId = special.name ? special.id : mon.activeWorkspace.id;
-
- return Hypr.toplevels.values.filter(c => c.workspace?.id === wsId).sort((a, b) => {
- // Pinned first, then fullscreen, then floating, then any other
- const ac = a.lastIpcObject;
- const bc = b.lastIpcObject;
- return (bc.pinned - ac.pinned) || ((bc.fullscreen !== 0) - (ac.fullscreen !== 0)) || (bc.floating - ac.floating);
- });
- }
-
- function checkClientRects(x: real, y: real): void {
- for (const client of clients) {
- if (!client)
- continue;
-
- let {
- at: [cx, cy],
- size: [cw, ch]
- } = client.lastIpcObject;
- cx -= screen.x;
- cy -= screen.y;
- if (cx <= x && cy <= y && cx + cw >= x && cy + ch >= y) {
- onClient = true;
- sx = cx;
- sy = cy;
- ex = cx + cw;
- ey = cy + ch;
- break;
- }
- }
- }
-
- function save(): void {
- const tmpfile = Qt.resolvedUrl(`/tmp/caelestia-picker-${Quickshell.processId}-${Date.now()}.png`);
- CUtils.saveItem(screencopy, tmpfile, Qt.rect(Math.ceil(rsx), Math.ceil(rsy), Math.floor(sw), Math.floor(sh)), path => {
- if (root.loader.clipboardOnly) {
- Quickshell.execDetached(["sh", "-c", "wl-copy --type image/png < " + path]);
- Quickshell.execDetached(["notify-send", "-a", "caelestia-cli", "-i", path, "Screenshot taken", "Screenshot copied to clipboard"]);
- } else {
- Quickshell.execDetached(["swappy", "-f", path]);
- }
- });
- closeAnim.start();
- }
-
- onClientsChanged: checkClientRects(mouseX, mouseY)
-
- anchors.fill: parent
- opacity: 0
- hoverEnabled: true
- cursorShape: Qt.CrossCursor
-
- Component.onCompleted: {
- Hypr.extras.refreshOptions();
-
- // Break binding if frozen
- if (loader.freeze)
- clients = clients;
-
- opacity = 1;
-
- const c = clients[0];
- if (c) {
- const cx = c.lastIpcObject.at[0] - screen.x;
- const cy = c.lastIpcObject.at[1] - screen.y;
- onClient = true;
- sx = cx;
- sy = cy;
- ex = cx + c.lastIpcObject.size[0];
- ey = cy + c.lastIpcObject.size[1];
- } else {
- sx = screen.width / 2 - 100;
- sy = screen.height / 2 - 100;
- ex = screen.width / 2 + 100;
- ey = screen.height / 2 + 100;
- }
- }
-
- onPressed: event => {
- ssx = event.x;
- ssy = event.y;
- }
-
- onReleased: {
- if (closeAnim.running)
- return;
-
- if (root.loader.freeze) {
- save();
- } else {
- overlay.visible = border.visible = false;
- screencopy.visible = false;
- screencopy.active = true;
- }
- }
-
- onPositionChanged: event => {
- const x = event.x;
- const y = event.y;
-
- if (pressed) {
- onClient = false;
- sx = ssx;
- sy = ssy;
- ex = x;
- ey = y;
- } else {
- checkClientRects(x, y);
- }
- }
-
- focus: true
- Keys.onEscapePressed: closeAnim.start()
-
- SequentialAnimation {
- id: closeAnim
-
- PropertyAction {
- target: root.loader
- property: "closing"
- value: true
- }
- ParallelAnimation {
- Anim {
- target: root
- property: "opacity"
- to: 0
- duration: Appearance.anim.durations.large
- }
- ExAnim {
- target: root
- properties: "rsx,rsy"
- to: 0
- }
- ExAnim {
- target: root
- property: "sw"
- to: root.screen.width
- }
- ExAnim {
- target: root
- property: "sh"
- to: root.screen.height
- }
- }
- PropertyAction {
- target: root.loader
- property: "activeAsync"
- value: false
- }
- }
-
- Loader {
- id: screencopy
-
- anchors.fill: parent
-
- active: root.loader.freeze
- asynchronous: true
-
- sourceComponent: ScreencopyView {
- captureSource: root.screen
-
- onHasContentChanged: {
- if (hasContent && !root.loader.freeze) {
- overlay.visible = border.visible = true;
- root.save();
- }
- }
- }
- }
-
- StyledRect {
- id: overlay
-
- anchors.fill: parent
- color: Colours.palette.m3secondaryContainer
- opacity: 0.3
-
- layer.enabled: true
- layer.effect: MultiEffect {
- maskSource: selectionWrapper
- maskEnabled: true
- maskInverted: true
- maskSpreadAtMin: 1
- maskThresholdMin: 0.5
- }
- }
-
- Item {
- id: selectionWrapper
-
- anchors.fill: parent
- layer.enabled: true
- visible: false
-
- Rectangle {
- id: selectionRect
-
- radius: root.realRounding
- x: root.rsx
- y: root.rsy
- implicitWidth: root.sw
- implicitHeight: root.sh
- }
- }
-
- Rectangle {
- id: border
-
- color: "transparent"
- radius: root.realRounding > 0 ? root.realRounding + root.realBorderWidth : 0
- border.width: root.realBorderWidth
- border.color: Colours.palette.m3primary
-
- x: selectionRect.x - root.realBorderWidth
- y: selectionRect.y - root.realBorderWidth
- implicitWidth: selectionRect.implicitWidth + root.realBorderWidth * 2
- implicitHeight: selectionRect.implicitHeight + root.realBorderWidth * 2
-
- Behavior on border.color {
- CAnim {}
- }
- }
-
- Behavior on opacity {
- Anim {
- duration: Appearance.anim.durations.large
- }
- }
-
- Behavior on rsx {
- enabled: !root.pressed
-
- ExAnim {}
- }
-
- Behavior on rsy {
- enabled: !root.pressed
-
- ExAnim {}
- }
-
- Behavior on sw {
- enabled: !root.pressed
-
- ExAnim {}
- }
-
- Behavior on sh {
- enabled: !root.pressed
-
- ExAnim {}
- }
-
- component ExAnim: Anim {
- duration: Appearance.anim.durations.expressiveDefaultSpatial
- easing.bezierCurve: Appearance.anim.curves.expressiveDefaultSpatial
- }
-}