screenshot tool: make dark overlay clipped by selection, add selection size indicator

This commit is contained in:
end-4
2025-09-28 18:44:05 +02:00
parent ccab724db2
commit 8713e94428
+30 -8
View File
@@ -15,6 +15,7 @@ import qs.modules.common.functions
import QtQuick import QtQuick
import QtQuick.Controls import QtQuick.Controls
import QtQuick.Layouts import QtQuick.Layouts
import Qt5Compat.GraphicalEffects
import Quickshell import Quickshell
import Quickshell.Io import Quickshell.Io
import Quickshell.Widgets import Quickshell.Widgets
@@ -137,7 +138,8 @@ ShellRoot {
}) })
readonly property list<var> layerRegions: { readonly property list<var> layerRegions: {
const layersOfThisMonitor = root.layers[panelWindow.hyprlandMonitor.name] const layersOfThisMonitor = root.layers[panelWindow.hyprlandMonitor.name]
const topLayers = layersOfThisMonitor.levels["2"] const topLayers = layersOfThisMonitor?.levels["2"]
if (!topLayers) return [];
const nonBarTopLayers = topLayers const nonBarTopLayers = topLayers
.filter(layer => !(layer.namespace.includes(":bar") || layer.namespace.includes(":verticalBar") || layer.namespace.includes(":dock"))) .filter(layer => !(layer.namespace.includes(":bar") || layer.namespace.includes(":verticalBar") || layer.namespace.includes(":dock")))
.map(layer => { .map(layer => {
@@ -390,14 +392,24 @@ ShellRoot {
// Overlay to darken screen // Overlay to darken screen
Rectangle { // Base Rectangle { // Base
id: overlayRect id: darkenOverlay
z: 0 z: 1
anchors.fill: parent anchors {
color: root.overlayColor left: parent.left
layer.enabled: true top: parent.top
leftMargin: panelWindow.regionX - darkenOverlay.border.width
topMargin: panelWindow.regionY - darkenOverlay.border.width
}
width: panelWindow.regionWidth + darkenOverlay.border.width * 2
height: panelWindow.regionHeight + darkenOverlay.border.width * 2
color: "transparent"
// border.color: root.selectionBorderColor
border.color: root.overlayColor
border.width: Math.max(panelWindow.width, panelWindow.height)
radius: root.standardRounding
} }
Rectangle { Rectangle {
// TODO: Make this mask the base instead of just overlaying a border id: selectionBorder
z: 1 z: 1
anchors { anchors {
left: parent.left left: parent.left
@@ -410,11 +422,21 @@ ShellRoot {
color: "transparent" color: "transparent"
border.color: root.selectionBorderColor border.color: root.selectionBorderColor
border.width: 2 border.width: 2
radius: root.standardRounding // radius: root.standardRounding
radius: 0 // TODO: figure out how to make the overlay thing work with rounding
}
StyledText {
anchors {
bottom: selectionBorder.bottom
right: selectionBorder.right
margins: 8
}
text: `${Math.round(panelWindow.regionWidth)} x ${Math.round(panelWindow.regionHeight)}`
} }
// Instructions // Instructions
Rectangle { Rectangle {
z: 9999
anchors { anchors {
top: parent.top top: parent.top
horizontalCenter: parent.horizontalCenter horizontalCenter: parent.horizontalCenter