aboutsummaryrefslogtreecommitdiffstats
path: root/src/quickdialogs/quickdialogsquickimpl/qml/ColorDialog.qml
diff options
context:
space:
mode:
Diffstat (limited to 'src/quickdialogs/quickdialogsquickimpl/qml/ColorDialog.qml')
-rw-r--r--src/quickdialogs/quickdialogsquickimpl/qml/ColorDialog.qml262
1 files changed, 262 insertions, 0 deletions
diff --git a/src/quickdialogs/quickdialogsquickimpl/qml/ColorDialog.qml b/src/quickdialogs/quickdialogsquickimpl/qml/ColorDialog.qml
new file mode 100644
index 0000000000..a4cbe498f0
--- /dev/null
+++ b/src/quickdialogs/quickdialogsquickimpl/qml/ColorDialog.qml
@@ -0,0 +1,262 @@
+// 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.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,
+ implicitHeaderWidth,
+ implicitFooterWidth)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding
+ + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0)
+ + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0))
+
+ leftPadding: 6
+ rightPadding: 6
+
+ // Ensure that the background's border is visible.
+ leftInset: -1
+ rightInset: -1
+ topInset: -1
+ bottomInset: -1
+
+ standardButtons: T.Dialog.Ok | T.Dialog.Cancel
+
+ isHsl: true
+
+ ColorDialogImpl.eyeDropperButton: eyeDropperButton
+ ColorDialogImpl.buttonBox: buttonBox
+ ColorDialogImpl.colorPicker: colorPicker
+ ColorDialogImpl.colorInputs: inputs
+ ColorDialogImpl.alphaSlider: alphaSlider
+
+ background: Rectangle {
+ implicitWidth: 200
+ implicitHeight: 600
+ color: control.palette.window
+ border.color: control.palette.dark
+ }
+
+ header: Pane {
+ palette.window: control.palette.light
+ padding: 20
+
+ contentItem: RowLayout {
+ Label {
+ objectName: "titleLabel"
+ text: control.title
+ elide: Label.ElideRight
+ font.bold: true
+
+ Layout.preferredWidth: control.title.length > 0 ? implicitWidth : 0
+ Layout.preferredHeight: control.title.length > 0 ? implicitHeight : 15
+ Layout.leftMargin: 12
+ Layout.alignment: Qt.AlignLeft
+ }
+ Button {
+ id: eyeDropperButton
+ objectName: "eyeDropperButton"
+ icon.source: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/images/eye-dropper.png"
+ flat: true
+ visible: false
+
+ Layout.preferredWidth: implicitHeight
+ Layout.alignment: Qt.AlignRight
+ Layout.rightMargin: 6
+ }
+ }
+ }
+
+ 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: Rectangle {
+ color: control.palette.light
+ implicitWidth: rowLayout.implicitWidth
+ implicitHeight: rowLayout.implicitHeight
+
+ RowLayout {
+ id: rowLayout
+ width: parent.width
+ height: parent.height
+ 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 {
+ // empty space filler
+ Layout.fillWidth: true
+ }
+
+ DialogButtonBox {
+ id: buttonBox
+ standardButtons: control.standardButtons
+ palette.window: control.palette.light
+ spacing: 12
+ horizontalPadding: 0
+ verticalPadding: 20
+
+ Layout.rightMargin: 20
+ }
+ }
+ }
+
+ Overlay.modal: Rectangle {
+ color: Color.transparent(control.palette.shadow, 0.5)
+ }
+
+ Overlay.modeless: Rectangle {
+ color: Color.transparent(control.palette.shadow, 0.12)
+ }
+}