From 81eb56e1d0f4f24108061143006d5129bf5be456 Mon Sep 17 00:00:00 2001 From: zach Date: Sat, 20 Jun 2026 14:23:15 +0200 Subject: [PATCH] fixes for drawing --- Components/ButtonBase.qml | 2 +- Components/ColorArcPicker.qml | 10 +++++----- Drawers/Drawing.qml | 27 ++++++++++++++++++++++++--- Drawers/Interactions.qml | 13 +++++++------ Drawers/Windows.qml | 25 ++++++++++--------------- Modules/Drawing/Content.qml | 14 +++++++------- Modules/Drawing/Wrapper.qml | 4 ++-- 7 files changed, 56 insertions(+), 39 deletions(-) diff --git a/Components/ButtonBase.qml b/Components/ButtonBase.qml index 3fdd628..9dcf2ab 100644 --- a/Components/ButtonBase.qml +++ b/Components/ButtonBase.qml @@ -71,7 +71,7 @@ CustomRect { id: stateLayer color: root.internalChecked ? root.activeOnColor : root.inactiveOnColor - enabled: enabled + enabled: root.enabled onClicked: { if (root.isToggle) diff --git a/Components/ColorArcPicker.qml b/Components/ColorArcPicker.qml index 27202e7..b200bfb 100644 --- a/Components/ColorArcPicker.qml +++ b/Components/ColorArcPicker.qml @@ -45,10 +45,10 @@ Item { } function syncFromPenColor() { - if (!drawing) + if (!drawing.drawingState) return; - const c = drawing.penColor; + const c = drawing.drawingState.penColor; if (c.hsvSaturation > 0) { currentHue = c.hsvHue; @@ -85,7 +85,7 @@ Item { currentHue = relative / arcSweep; lastChromaticHue = currentHue; - drawing.penColor = Qt.hsva(currentHue, drawing.penColor.hsvSaturation, drawing.penColor.hsvValue, drawing.penColor.a); + drawing.drawingState.penColor = Qt.hsva(currentHue, drawing.drawingState.penColor.hsvSaturation, drawing.drawingState.penColor.hsvValue, drawing.drawingState.penColor.a); } implicitHeight: 180 @@ -111,7 +111,7 @@ Item { root.syncFromPenColor(); } - target: root.drawing + target: root.drawing.drawingState } Canvas { @@ -151,7 +151,7 @@ Item { CustomRect { anchors.centerIn: parent - color: root.drawing?.penColor + color: root.drawing?.drawingState.penColor implicitHeight: implicitWidth implicitWidth: canvas.height - root.handleSize - Appearance.padding.extraLarge * 2 radius: Appearance.rounding.full diff --git a/Drawers/Drawing.qml b/Drawers/Drawing.qml index 25447aa..9b45c31 100644 --- a/Drawers/Drawing.qml +++ b/Drawers/Drawing.qml @@ -1,9 +1,30 @@ +pragma ComponentBehavior: Bound + +import Quickshell import QtQuick import ZShell.Internal -StrokeCanvas { +Item { id: root - penColor: "white" - penWidth: 4 + readonly property alias content: contentLoader.item + readonly property PersistentProperties drawingState: PersistentProperties { + property color penColor: "white" + property int penWidth: 4 + + reloadableId: "drawingState" + } + required property PersistentProperties visibilities + + Loader { + id: contentLoader + + active: root.visibilities.isDrawing + anchors.fill: parent + + sourceComponent: StrokeCanvas { + penColor: root.drawingState.penColor + penWidth: root.drawingState.penWidth + } + } } diff --git a/Drawers/Interactions.qml b/Drawers/Interactions.qml index 862b5bb..74a10ac 100644 --- a/Drawers/Interactions.qml +++ b/Drawers/Interactions.qml @@ -123,13 +123,12 @@ Item { property bool setInitialPoint: false acceptedButtons: Qt.LeftButton | Qt.RightButton - enabled: root.visibilities.isDrawing && !root.inLeftPanel(root.panels.drawing, hoverHandler.point.position.x, hoverHandler.point.position.y) - grabPermissions: PointerHandler.CanTakeOverFromAnything | PointerHandler.TakeOverForbidden + enabled: root.visibilities.isDrawing && (!root.inLeftPanel(root.panels.drawing, hoverHandler.point.position.x, hoverHandler.point.position.y) || !root.panels.drawing.expanded) onActiveChanged: { if (!active) { setInitialPoint = false; - root.drawing.endStroke(); + root.drawing.content.endStroke(); } else { root.panels.drawing.expanded = false; } @@ -149,17 +148,19 @@ Item { if (!setInitialPoint) { setInitialPoint = true; - root.drawing.beginStroke(origX, origY); + root.drawing.content.beginStroke(origX, origY); return; } - root.drawing.appendPoint(x, y); + root.drawing.content.appendPoint(x, y); } } HoverHandler { id: hoverHandler + cursorShape: root.visibilities.isDrawing && !root.inLeftPanel(root.panels.drawing, point.position.x, point.position.y) ? Qt.CrossCursor : undefined + onHoveredChanged: { if (!hovered) { if (!root.osdShortcutActive) { @@ -180,7 +181,7 @@ Item { const y = point.position.y; if (root.visibilities.isDrawing) { - if (root.inLeftPanel(root.panels.drawing, x, y)) + if (root.inLeftPanel(root.panels.drawing, x, y) && !(drawingHandler.point.pressedButtons & Qt.LeftButton)) root.panels.drawing.expanded = true; return; } diff --git a/Drawers/Windows.qml b/Drawers/Windows.qml index 30db34c..bfcb512 100644 --- a/Drawers/Windows.qml +++ b/Drawers/Windows.qml @@ -361,23 +361,18 @@ CustomWindow { } } - Loader { - id: drawingLoader + Drawing { + id: drawing - active: visibilities.isDrawing anchors.fill: parent + layer.enabled: true + visibilities: visibilities z: 2 - sourceComponent: Drawing { - id: drawing - - layer.enabled: true - - layer.effect: MultiEffect { - maskEnabled: true - maskInverted: true - maskSource: maskSource - } + layer.effect: MultiEffect { + maskEnabled: true + maskInverted: true + maskSource: maskSource } } @@ -406,7 +401,7 @@ CustomWindow { anchors.fill: parent bar: bar borderThickness: root.borderLayoutThickness - drawing: drawingLoader.item + drawing: drawing enabled: true panels: panels popouts: panels.popouts @@ -418,7 +413,7 @@ CustomWindow { bar: bar borderThickness: root.borderThickness - drawingItem: drawingLoader.item + drawingItem: drawing screen: root.screen visibilities: visibilities diff --git a/Modules/Drawing/Content.qml b/Modules/Drawing/Content.qml index ebc392d..201acaa 100644 --- a/Modules/Drawing/Content.qml +++ b/Modules/Drawing/Content.qml @@ -19,17 +19,17 @@ Item { return; if (!saturationSlider.pressed) - saturationSlider.value = drawing.penColor.hsvSaturation; + saturationSlider.value = drawing.drawingState.penColor.hsvSaturation; if (!brightnessSlider.pressed) - brightnessSlider.value = drawing.penColor.hsvValue; + brightnessSlider.value = drawing.drawingState.penColor.hsvValue; } function updatePenColorFromHsv() { if (!drawing) return; - drawing.penColor = Qt.hsva(huePicker.currentHue, saturationSlider.value, brightnessSlider.value, drawing.penColor.a); + drawing.drawingState.penColor = Qt.hsva(huePicker.currentHue, saturationSlider.value, brightnessSlider.value, drawing.drawingState.penColor.a); } implicitHeight: column.height + Appearance.padding.larger * 2 @@ -42,7 +42,7 @@ Item { root.syncFromPenColor(); } - target: root.drawing + target: root.drawing.drawingState } Column { @@ -126,9 +126,9 @@ Item { multiplier: 1 orientation: Qt.Horizontal to: 45 - value: root.drawing.penWidth + value: root.drawing.drawingState.penWidth - onMoved: root.drawing.penWidth = value + onMoved: root.drawing.drawingState.penWidth = value } } @@ -146,6 +146,6 @@ Item { shapeMorph: true shapeMorphExpansion: pressed ? 12 : 0 - onClicked: root.drawing.penColor = modelData + onClicked: root.drawing.drawingState.penColor = modelData } } diff --git a/Modules/Drawing/Wrapper.qml b/Modules/Drawing/Wrapper.qml index d8dcae9..76512ad 100644 --- a/Modules/Drawing/Wrapper.qml +++ b/Modules/Drawing/Wrapper.qml @@ -44,7 +44,7 @@ Item { Loader { id: icon - active: root.shouldBeActive || root.visible + active: (root.shouldBeActive || root.visible) && opacity > 0 anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter asynchronous: true @@ -63,7 +63,7 @@ Item { Loader { id: content - active: root.shouldBeActive || root.visible + active: (root.shouldBeActive || root.visible) && opacity > 0 anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter asynchronous: true