feat: screenshot tool

This commit is contained in:
kossLAN 2025-06-11 18:10:21 -04:00
parent de23a67917
commit 6f39dae2ea
Signed by: kossLAN
SSH key fingerprint: SHA256:bdV0x+wdQHGJ6LgmstH3KV8OpWY+OOFmJcPcB0wQPV8
8 changed files with 343 additions and 17 deletions

View file

@ -0,0 +1,54 @@
import QtQuick
import ".."
Canvas {
id: root
property color overlayColor: "#80000000"
property color outlineColor: ShellSettings.colors["primary"]
property rect selectionRect
property point startPosition
signal areaSelected(rect selection)
onPaint: {
var ctx = getContext("2d");
ctx.clearRect(0, 0, width, height);
// grey overlay
ctx.fillStyle = overlayColor;
ctx.fillRect(0, 0, width, height);
// cut out the selection rectangle
ctx.globalCompositeOperation = "destination-out";
ctx.fillRect(selectionRect.x, selectionRect.y, selectionRect.width, selectionRect.height);
ctx.globalCompositeOperation = "source-over";
ctx.strokeStyle = outlineColor;
ctx.lineWidth = 2;
ctx.strokeRect(selectionRect.x, selectionRect.y, selectionRect.width, selectionRect.height);
}
MouseArea {
anchors.fill: parent
onPressed: mouse => {
root.startPosition = Qt.point(mouse.x, mouse.y);
}
onPositionChanged: mouse => {
if (pressed) {
var x = Math.min(root.startPosition.x, mouse.x);
var y = Math.min(root.startPosition.y, mouse.y);
var width = Math.abs(mouse.x - root.startPosition.x);
var height = Math.abs(mouse.y - root.startPosition.y);
root.selectionRect = Qt.rect(x, y, width, height);
root.requestPaint();
}
}
onReleased: mouse => {
root.visible = false;
root.areaSelected(root.selectionRect);
}
}
}