// 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 { 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 } Button { id: 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" implicitHeight: width color: control.color Layout.fillWidth: 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) } }