From 09344df833e6a6e91f97dc091795f593cd723c2d Mon Sep 17 00:00:00 2001 From: EndrII <endriimail@gmail.com> Date: Thu, 20 Feb 2025 15:14:18 +0100 Subject: [PATCH] fix ImaGeView button --- .../src/ViewSolutionsModule/ImageView.qml | 119 ++++++++++-------- 1 file changed, 66 insertions(+), 53 deletions(-) diff --git a/ViewSolutions/src/ViewSolutionsModule/ImageView.qml b/ViewSolutions/src/ViewSolutionsModule/ImageView.qml index 2c4c3c3..5613063 100644 --- a/ViewSolutions/src/ViewSolutionsModule/ImageView.qml +++ b/ViewSolutions/src/ViewSolutionsModule/ImageView.qml @@ -10,29 +10,22 @@ import QtQuick.Layouts import QtQuick.Controls import QtQuick.Controls.Material import QtQuick.Controls.Universal +import QtQuick.Effects -Control { +AbstractButton { id: root property string source: "" property alias imagesource: sourceImg - property string text: "" - property bool hover: false - property bool presed: false - property bool selected: false - property real power: 1.0 property string toolTip: "" - property color textColor: Material.color(Material.Grey) + property color textColor: Material.foreground - property color backgroundColor: colorPicker.pick(source) - property color selectedColor: "#5de2ff" - property color borderColor: "#00000000" - property color hoverColor: "#00000000" - - signal clicked(var mouse); + property color backgroundColor: Material.background + property color selectedColor: Material.accent + property color hoverColor: Material.accent Connections { target: sourceImg @@ -44,11 +37,20 @@ Control { } } + hoverEnabled: true + + opacity: { + if (enabled) { + return 1 + } + + return 0.5 + } + contentItem: Control { id: privateData property int rootMinSize: Math.min(root.height, root.width) - anchors.margins: (root.hover && !presed)? rootMinSize * 0.01: rootMinSize * 0.1 - + bottomPadding : 8 property real rx : 0 property real ry : 0 property real rz : 0 @@ -82,16 +84,19 @@ Control { } background: Rectangle { - color: root.backgroundColor - border.color: (root.hover)? root.hoverColor: root.selected? root.selectedColor: "#00000000" - border.width: 4 - radius: border.width * 2 + color: { - Behavior on border.color { - ColorAnimation { - duration: 250 + if (root.hovered) { + return root.hoverColor } + + if (root.checked) { + return root.selectedColor + } + + return root.backgroundColor } + radius: 16 Behavior on color { ColorAnimation { @@ -101,22 +106,45 @@ Control { } contentItem: ColumnLayout { - Image { - id: sourceImg - source: root.source + spacing: 8 - clip: true - fillMode: Image.PreserveAspectCrop - mipmap: true - smooth: true - Layout.fillHeight: true + + MultiEffect { + id: imgEffect Layout.fillWidth: true - Layout.margins: 4 + Layout.fillHeight: true + source: Image { + id: sourceImg + source: root.source + clip: true + fillMode: Image.PreserveAspectCrop + width: imgEffect.width + height: imgEffect.height + } + + maskEnabled: true + maskSource: ShaderEffectSource { + sourceItem: Rectangle { + radius: 16 + width: imgEffect.width + height: imgEffect.height + color: "Black" + + Rectangle { + color: "Black" + + anchors.bottom: parent.bottom + height: 20 + width: parent.width + } + } + } } + Label { text: root.text visible: text.length @@ -150,7 +178,7 @@ Control { ToolTip { parent: root - visible: root.hover && text.length + visible: root.hovered && text.length text: root.toolTip delay: 500 @@ -158,38 +186,23 @@ Control { MouseArea { - + acceptedButtons: Qt.NoButton hoverEnabled: true; - onEntered: { - root.hover = true - } - onExited: { - root.hover = false; privateData.ry = 0 privateData.rx = 0 } onPositionChanged: (mouse) => { - let fromCenter = root.width / 2 - privateData.ry = -((mouse.x - fromCenter) / (fromCenter * 0.05)) * root.power + let fromCenter = root.width / 2 + privateData.ry = -((mouse.x - fromCenter) / (fromCenter * 0.05)) * root.power - fromCenter = root.height / 2 - privateData.rx = ((mouse.y - fromCenter) / (fromCenter * 0.05)) * root.power + fromCenter = root.height / 2 + privateData.rx = ((mouse.y - fromCenter) / (fromCenter * 0.05)) * root.power - } - - onPressed: { - root.presed = true; - } - - onReleased: (mouse) => { - root.presed = false; - - root.clicked(mouse) - } + } anchors.fill: parent