aboutsummaryrefslogtreecommitdiffstats
path: root/src/quickdialogs/quickdialogsquickimpl/qml/+Material/ColorDialog.qml
diff options
context:
space:
mode:
Diffstat (limited to 'src/quickdialogs/quickdialogsquickimpl/qml/+Material/ColorDialog.qml')
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qml/+Material/ColorDialog.qml252
1 files changed, 252 insertions, 0 deletions
diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/+Material/ColorDialog.qml b/src/quickdialogs/quickdialogsquickimpl/qml/+Material/ColorDialog.qml
new file mode 100644
index 0000000000..dd1f887dd9
--- /dev/null
+++ b/src/quickdialogs/quickdialogsquickimpl/qml/+Material/ColorDialog.qml
@@ -0,0 +1,252 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.impl
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+import QtQuick.Dialogs
+import QtQuick.Dialogs.quickimpl
+import QtQuick.Layouts
+import QtQuick.Templates as T
+
+ColorDialogImpl {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding,
+ implicitFooterWidth)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding
+ + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0)
+ + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0))
+
+ leftPadding: 0
+ rightPadding: 0
+
+ standardButtons: T.Dialog.Ok | T.Dialog.Cancel
+
+ isHsl: true
+
+ ColorDialogImpl.eyeDropperButton: eyeDropperButton
+ ColorDialogImpl.buttonBox: buttonBox
+ ColorDialogImpl.colorPicker: colorPicker
+ ColorDialogImpl.alphaSlider: alphaSlider
+ ColorDialogImpl.colorInputs: inputs
+
+ Material.elevation: 24
+
+ background: Rectangle {
+ implicitWidth: 200
+ implicitHeight: 560
+ radius: 2
+ color: control.Material.dialogColor
+ layer.enabled: control.Material.elevation > 0
+ layer.effect: ElevationEffect {
+ elevation: control.Material.elevation
+ }
+ }
+
+ header: RowLayout {
+ Label {
+ objectName: "titleLabel"
+ text: control.title
+ elide: Label.ElideRight
+ font.bold: true
+ font.pixelSize: 16
+ leftPadding: 24
+ rightPadding: 24
+ topPadding: 24
+ bottomPadding: 24
+
+ Layout.preferredWidth: control.title.length > 0 ? implicitWidth : 0
+ Layout.preferredHeight: control.title.length > 0 ? implicitHeight : 15
+ }
+
+ Button {
+ id: eyeDropperButton
+ objectName: "eyeDropperButton"
+ icon.source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/eye-dropper.png"
+ flat: true
+ topPadding: 24
+ bottomPadding: 24
+ visible: false
+
+ Layout.alignment: Qt.AlignRight
+ Layout.rightMargin: 24
+ }
+ }
+
+ contentItem: ColumnLayout {
+ spacing: 12
+ SaturationLightnessPicker {
+ id: colorPicker
+ objectName: "colorPicker"
+ color: control.color
+
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ }
+
+ Slider {
+ id: hueSlider
+ objectName: "hueSlider"
+ orientation: Qt.Horizontal
+ value: control.hue
+ implicitHeight: 20
+ onMoved: function() { control.hue = value; }
+ handle: PickerHandle {
+ x: hueSlider.leftPadding + (hueSlider.horizontal
+ ? hueSlider.visualPosition * (hueSlider.availableWidth - width)
+ : (hueSlider.availableWidth - width) / 2)
+ y: hueSlider.topPadding + (hueSlider.horizontal
+ ? (hueSlider.availableHeight - height) / 2
+ : hueSlider.visualPosition * (hueSlider.availableHeight - height))
+ picker: hueSlider
+ }
+ background: Rectangle {
+ anchors.fill: parent
+ anchors.leftMargin: hueSlider.handle.width / 2
+ anchors.rightMargin: hueSlider.handle.width / 2
+ border.width: 2
+ border.color: control.palette.dark
+ radius: 10
+ color: "transparent"
+ Rectangle {
+ anchors.fill: parent
+ anchors.margins: 4
+ radius: 10
+ gradient: HueGradient {
+ orientation: Gradient.Horizontal
+ }
+ }
+ }
+
+ Layout.fillWidth: true
+ Layout.leftMargin: 12
+ Layout.rightMargin: 12
+ }
+
+ Slider {
+ id: alphaSlider
+ objectName: "alphaSlider"
+ orientation: Qt.Horizontal
+ value: control.alpha
+ implicitHeight: 20
+ handle: PickerHandle {
+ x: alphaSlider.leftPadding + (alphaSlider.horizontal
+ ? alphaSlider.visualPosition * (alphaSlider.availableWidth - width)
+ : (alphaSlider.availableWidth - width) / 2)
+ y: alphaSlider.topPadding + (alphaSlider.horizontal
+ ? (alphaSlider.availableHeight - height) / 2
+ : alphaSlider.visualPosition * (alphaSlider.availableHeight - height))
+ picker: alphaSlider
+ }
+ background: Rectangle {
+ anchors.fill: parent
+ anchors.leftMargin: parent.handle.width / 2
+ anchors.rightMargin: parent.handle.width / 2
+ border.width: 2
+ border.color: control.palette.dark
+ radius: 10
+ color: "transparent"
+
+ Image {
+ anchors.fill: alphaSliderGradient
+ source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/checkers.png"
+ fillMode: Image.Tile
+ }
+
+ Rectangle {
+ id: alphaSliderGradient
+ anchors.fill: parent
+ anchors.margins: 4
+ radius: 10
+ gradient: Gradient {
+ orientation: Gradient.Horizontal
+ GradientStop {
+ position: 0
+ color: "transparent"
+ }
+ GradientStop {
+ position: 1
+ color: Qt.rgba(control.color.r,
+ control.color.g,
+ control.color.b,
+ 1)
+ }
+ }
+ }
+ }
+
+ Layout.fillWidth: true
+ Layout.leftMargin: 12
+ Layout.rightMargin: 12
+ }
+
+ ColorInputs {
+ id: inputs
+
+ color: control.color
+
+ Layout.fillWidth: true
+ Layout.leftMargin: 12
+ Layout.rightMargin: 12
+ Layout.bottomMargin: 12
+ }
+ }
+
+ footer: RowLayout {
+ spacing: 20
+
+ Label {
+ text: qsTr("Color")
+
+ Layout.leftMargin: 20
+ }
+
+ Rectangle {
+ implicitWidth: 32
+ implicitHeight: 32
+ border.width: 2
+ border.color: control.palette.dark
+ color: "transparent"
+
+ Image {
+ anchors.fill: parent
+ anchors.margins: 4
+ source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/checkers.png"
+ fillMode: Image.Tile
+ }
+
+ Rectangle {
+ anchors.fill: parent
+ anchors.margins: 4
+ color: control.color
+ }
+ }
+
+ Item {
+ Layout.fillWidth: true
+ }
+
+ DialogButtonBox {
+ id: buttonBox
+ standardButtons: control.standardButtons
+ spacing: 12
+ horizontalPadding: 0
+
+ Layout.rightMargin: 20
+ Layout.alignment: Qt.AlignRight
+ }
+ }
+
+ Overlay.modal: Rectangle {
+ color: Color.transparent(control.palette.shadow, 0.5)
+ }
+
+ Overlay.modeless: Rectangle {
+ color: Color.transparent(control.palette.shadow, 0.12)
+ }
+}