forked from Shinonome/dots-hyprland
screenshot tool: make dark overlay clipped by selection, add selection size indicator
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user