Warning, /plasma/qqc2-breeze-style/style/qtquickcontrols/Dial.qml is written in an unsupported language. File is not indexed.
0001 /* SPDX-FileCopyrightText: 2020 Noah Davis <noahadvs@gmail.com>
0002 * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0003 */
0004
0005 import QtQuick
0006 import QtQml
0007 import QtQuick.Controls as Controls
0008 import QtQuick.Controls.impl
0009 import QtQuick.Templates as T
0010 import org.kde.kirigami as Kirigami
0011 import org.kde.breeze
0012 import org.kde.breeze.impl as Impl
0013
0014 T.Dial {
0015 id: control
0016
0017 implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
0018 implicitContentWidth + leftPadding + rightPadding)
0019 implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
0020 implicitContentHeight + topPadding + bottomPadding)
0021
0022 inputMode: !Kirigami.Settings.tabletMode ? Dial.Vertical : Dial.Circular
0023
0024 Kirigami.Theme.colorSet: Kirigami.Theme.Button
0025 Kirigami.Theme.inherit: false
0026
0027 background: Impl.BreezeDial {
0028 implicitWidth: 100
0029 implicitHeight: 100
0030 backgroundBorderColor: Impl.Theme.separatorColor()
0031 backgroundColor: Kirigami.Theme.backgroundColor
0032 fillBorderColor: Kirigami.Theme.focusColor
0033 fillColor: Kirigami.Theme.alternateBackgroundColor
0034 angle: control.angle
0035 grooveThickness: Impl.Units.grooveHeight
0036 Behavior on angle {
0037 enabled: !Kirigami.Settings.hasTransientTouchInput
0038 SmoothedAnimation {
0039 duration: Kirigami.Units.longDuration
0040 velocity: 800
0041 //SmoothedAnimations have a hardcoded InOutQuad easing
0042 }
0043 }
0044 }
0045
0046 handle: Kirigami.ShadowedRectangle {
0047 id: handle
0048 property real grooveOffset: Impl.Units.grooveHeight * 4
0049 x: control.background.x + (control.background.width - control.handle.width) / 2
0050 y: control.background.y + (control.background.height - control.handle.height) / 2
0051 implicitWidth: implicitHeight
0052 implicitHeight: 100 - grooveOffset + 2
0053 width: height
0054 height: {
0055 let bgExtent = Math.min(control.background.width, control.background.height)
0056 let handleExtent = bgExtent
0057 if (bgExtent - grooveOffset <= grooveOffset*2) {
0058 handleExtent -= grooveOffset/2 - 2
0059 } else {
0060 handleExtent -= grooveOffset - 2
0061 }
0062 return handleExtent
0063 }
0064 radius: height/2
0065
0066 color: Kirigami.Theme.backgroundColor
0067
0068 border {
0069 width: Impl.Units.smallBorder
0070 color: control.hovered || control.pressed || control.visualFocus
0071 ? Kirigami.Theme.focusColor : Impl.Theme.separatorColor()
0072 }
0073
0074 shadow {
0075 color: control.pressed ? "transparent" : Qt.rgba(0,0,0,0.2)
0076 size: control.enabled ? Math.round(handle.height/10 + 1) : 0
0077 yOffset: Math.round(Math.round(handle.height/10 + 1) / 4)
0078 }
0079
0080 Kirigami.ShadowedRectangle {
0081 anchors.fill: parent
0082 anchors.margins: parent.border.width
0083 color: parent.color
0084 radius: height/2
0085 rotation: control.angle
0086 Behavior on rotation {
0087 enabled: !Kirigami.Settings.hasTransientTouchInput
0088 SmoothedAnimation {
0089 duration: Kirigami.Units.longDuration
0090 velocity: 800
0091 //SmoothedAnimations have a hardcoded InOutQuad easing
0092 }
0093 }
0094 Rectangle {
0095 id: handleDot
0096 radius: width/2
0097 anchors.verticalCenter: parent.top
0098 anchors.horizontalCenter: parent.horizontalCenter
0099 anchors.verticalCenterOffset: height
0100 width: 4
0101 height: 4
0102 color: control.enabled ? Kirigami.Theme.focusColor : Impl.Theme.separatorColor()
0103 }
0104 }
0105
0106 Behavior on border.color {
0107 enabled: control.hovered || control.pressed || control.visualFocus
0108 ColorAnimation {
0109 duration: Kirigami.Units.shortDuration
0110 easing.type: Easing.OutCubic
0111 }
0112 }
0113
0114 Behavior on shadow.color {
0115 enabled: control.pressed
0116 ColorAnimation {
0117 duration: Kirigami.Units.shortDuration
0118 easing.type: Easing.OutCubic
0119 }
0120 }
0121
0122 Impl.FocusRect {
0123 z: -1
0124 baseRadius: parent.radius
0125 visible: control.visualFocus
0126 }
0127
0128 Rectangle {
0129 radius: parent.radius
0130 opacity: control.pressed || control.hovered ? 0 : 1
0131 visible: control.enabled
0132 anchors.fill: parent
0133 anchors.margins: parent.border.width
0134 gradient: Gradient {
0135 GradientStop {
0136 position: 0
0137 color: Qt.rgba(1,1,1,0.03125)
0138 }
0139 GradientStop {
0140 position: 1
0141 color: Qt.rgba(0,0,0,0.0625)
0142 }
0143 }
0144 Behavior on opacity {
0145 OpacityAnimator {
0146 duration: Kirigami.Units.shortDuration
0147 easing.type: Easing.OutCubic
0148 }
0149 }
0150 }
0151 }
0152 }