Revision control

Copy as Markdown

// 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
// Qt-Security score:significant reason:default
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,
implicitContentWidth + leftPadding + rightPadding,
implicitHeaderWidth,
implicitFooterWidth)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
implicitContentHeight + 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
visible: parent.parent?.parent?.parent === Overlay.overlay
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
Accessible.name: qsTr("Eyedropper")
}
}
}
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
}
}
}
Accessible.name: qsTr("Hue")
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)
}
}
}
}
Accessible.name: qsTr("Alpha")
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
defaultStandardButton: T.Dialog.Ok
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)
}
}