mirror of
https://github.com/tomasriveral/nixos.git
synced 2026-08-12 10:30:44 +02:00
ported some quickshell stuff from rivendell-hyprdots
This commit is contained in:
@@ -0,0 +1,198 @@
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import QtQuick
|
||||
import Quickshell
|
||||
import Quickshell.Io
|
||||
import Quickshell.Wayland
|
||||
import "../components"
|
||||
|
||||
// TODO: make configurable: cursor visibility, screen freeze
|
||||
PanelWindow {
|
||||
id: root
|
||||
|
||||
required property var controller
|
||||
|
||||
exclusionMode: ExclusionMode.Ignore
|
||||
anchors {
|
||||
left: true
|
||||
right: true
|
||||
top: true
|
||||
bottom: true
|
||||
}
|
||||
color: "transparent"
|
||||
WlrLayershell.keyboardFocus: WlrKeyboardFocus.Exclusive
|
||||
WlrLayershell.namespace: "shell:screenshot"
|
||||
|
||||
visible: screencopy.hasContent
|
||||
ScreencopyView {
|
||||
id: screencopy
|
||||
captureSource: root.screen
|
||||
anchors.fill: parent
|
||||
paintCursor: false
|
||||
}
|
||||
|
||||
Process {
|
||||
id: cmd
|
||||
running: false
|
||||
onExited: notifyCmd.running = true
|
||||
}
|
||||
Process {
|
||||
id: notifyCmd
|
||||
command: ["notify-send", "\"Screenshot copied\"", "\"The screenshot was copied to your clipboard\""]
|
||||
running: false
|
||||
onExited: root.controller.isOpen = false
|
||||
}
|
||||
|
||||
contentItem {
|
||||
focus: true
|
||||
Keys.onEscapePressed: root.controller.isOpen = false
|
||||
|
||||
Keys.onReturnPressed: () => {
|
||||
const x = Math.ceil(root.left);
|
||||
const y = Math.ceil(root.top);
|
||||
const w = Math.floor(root.right - root.left);
|
||||
const h = Math.floor(root.bottom - root.top);
|
||||
cmd.command = ["sh", "-c", `grim -g "${x},${y} ${w}x${h}" - | wl-copy`];
|
||||
cmd.running = true;
|
||||
}
|
||||
}
|
||||
|
||||
property var left: 0
|
||||
property var top: 0
|
||||
property var right: 0
|
||||
property var bottom: 0
|
||||
|
||||
Canvas {
|
||||
id: canvas
|
||||
anchors.fill: parent
|
||||
|
||||
readonly property var borderExtendX: 56
|
||||
readonly property var borderExtendY: 48
|
||||
readonly property var borderWidthH: 12
|
||||
readonly property var borderWidthV: 18
|
||||
|
||||
onPaint: {
|
||||
var ctx = getContext("2d");
|
||||
ctx.reset();
|
||||
|
||||
// Background
|
||||
ctx.fillStyle = "#44000000";
|
||||
ctx.fillRect(0, 0, root.width, root.height);
|
||||
|
||||
// Border
|
||||
ctx.fillStyle = "#824524";
|
||||
ctx.fillRect(root.left - borderExtendX, root.top - borderWidthH, root.right - root.left + borderExtendX * 2, borderWidthH);
|
||||
ctx.fillRect(root.left - borderExtendX, root.bottom, root.right - root.left + borderExtendX * 2, borderWidthH);
|
||||
ctx.fillRect(root.left - borderWidthV, root.top - borderExtendY, borderWidthV, root.bottom - root.top + borderExtendY * 2);
|
||||
ctx.fillRect(root.right, root.top - borderExtendY, borderWidthV, root.bottom - root.top + borderExtendY * 2);
|
||||
|
||||
// Rect
|
||||
ctx.clearRect(root.left, root.top, root.right - root.left, root.bottom - root.top);
|
||||
}
|
||||
}
|
||||
|
||||
Rope {
|
||||
id: topLeftRope
|
||||
anchors.fill: parent
|
||||
start: Qt.vector2d(0, 0)
|
||||
end: Qt.vector2d(0, 0)
|
||||
}
|
||||
Rope {
|
||||
id: topRightRope
|
||||
anchors.fill: parent
|
||||
start: Qt.vector2d(0, 0)
|
||||
end: Qt.vector2d(0, 0)
|
||||
}
|
||||
Rope {
|
||||
id: bottomRightRope
|
||||
anchors.fill: parent
|
||||
start: Qt.vector2d(0, 0)
|
||||
end: Qt.vector2d(0, 0)
|
||||
}
|
||||
Rope {
|
||||
id: bottomLeftRope
|
||||
anchors.fill: parent
|
||||
start: Qt.vector2d(0, 0)
|
||||
end: Qt.vector2d(0, 0)
|
||||
}
|
||||
|
||||
RopeTie {
|
||||
x: root.left - width / 2
|
||||
y: root.top - height / 2
|
||||
}
|
||||
RopeTie {
|
||||
x: root.right - width / 2
|
||||
y: root.top - height / 2
|
||||
}
|
||||
RopeTie {
|
||||
x: root.right - width / 2
|
||||
y: root.bottom - height / 2
|
||||
}
|
||||
RopeTie {
|
||||
x: root.left - width / 2
|
||||
y: root.bottom - height / 2
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
anchors.fill: parent
|
||||
|
||||
onPressed: e => {
|
||||
root.left = e.x;
|
||||
root.top = e.y;
|
||||
root.right = e.x;
|
||||
root.bottom = e.y;
|
||||
}
|
||||
onPositionChanged: e => {
|
||||
if (e.x > root.left) {
|
||||
root.right = e.x;
|
||||
}
|
||||
|
||||
if (e.y > root.top) {
|
||||
root.bottom = e.y;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onLeftChanged: () => {
|
||||
canvas.requestPaint();
|
||||
topLeftRope.end = Qt.vector2d(left, top);
|
||||
bottomLeftRope.end = Qt.vector2d(left, bottom);
|
||||
}
|
||||
onTopChanged: () => {
|
||||
canvas.requestPaint();
|
||||
topLeftRope.end = Qt.vector2d(left, top);
|
||||
topRightRope.end = Qt.vector2d(right, top);
|
||||
}
|
||||
onRightChanged: () => {
|
||||
canvas.requestPaint();
|
||||
topRightRope.end = Qt.vector2d(right, top);
|
||||
bottomRightRope.end = Qt.vector2d(right, bottom);
|
||||
}
|
||||
onBottomChanged: () => {
|
||||
canvas.requestPaint();
|
||||
bottomRightRope.end = Qt.vector2d(right, bottom);
|
||||
bottomLeftRope.end = Qt.vector2d(left, bottom);
|
||||
}
|
||||
|
||||
onWidthChanged: () => {
|
||||
left = width / 2;
|
||||
right = width / 2;
|
||||
|
||||
topRightRope.start = Qt.vector2d(width, 0);
|
||||
bottomRightRope.start = Qt.vector2d(width, height);
|
||||
}
|
||||
onHeightChanged: () => {
|
||||
top = height / 2;
|
||||
bottom = height / 2;
|
||||
|
||||
bottomRightRope.start = Qt.vector2d(width, height);
|
||||
bottomLeftRope.start = Qt.vector2d(0, height);
|
||||
}
|
||||
|
||||
component RopeTie: Image {
|
||||
width: 48
|
||||
height: 48
|
||||
source: "../assets/rope-tie.png"
|
||||
smooth: false
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user