diff options
Diffstat (limited to 'src/quickcontrols/imagine/RangeSlider.qml')
-rw-r--r-- | src/quickcontrols/imagine/RangeSlider.qml | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/src/quickcontrols/imagine/RangeSlider.qml b/src/quickcontrols/imagine/RangeSlider.qml new file mode 100644 index 0000000000..bb5c8a09c6 --- /dev/null +++ b/src/quickcontrols/imagine/RangeSlider.qml @@ -0,0 +1,104 @@ +// Copyright (C) 2017 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.Templates as T +import QtQuick.Controls.Imagine +import QtQuick.Controls.Imagine.impl + +T.RangeSlider { + id: control + + implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, + first.implicitHandleWidth + leftPadding + rightPadding, + second.implicitHandleWidth + leftPadding + rightPadding) + implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, + first.implicitHandleHeight + topPadding + bottomPadding, + second.implicitHandleHeight + topPadding + bottomPadding) + + topPadding: background ? background.topPadding : 0 + leftPadding: background ? background.leftPadding : 0 + rightPadding: background ? background.rightPadding : 0 + bottomPadding: background ? background.bottomPadding : 0 + + topInset: background ? -background.topInset || 0 : 0 + leftInset: background ? -background.leftInset || 0 : 0 + rightInset: background ? -background.rightInset || 0 : 0 + bottomInset: background ? -background.bottomInset || 0 : 0 + + first.handle: Image { + x: control.leftPadding + (control.horizontal ? control.first.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.first.visualPosition * (control.availableHeight - height)) + + source: control.Imagine.url + "rangeslider-handle" + ImageSelector on source { + states: [ + {"first": true}, + {"vertical": control.vertical}, + {"horizontal": control.horizontal}, + {"disabled": !control.enabled}, + {"pressed": control.first.pressed}, + {"focused": control.first.handle?.activeFocus ?? false}, + {"mirrored": control.mirrored}, + {"hovered": control.first.hovered} + ] + } + } + + second.handle: Image { + x: control.leftPadding + (control.horizontal ? control.second.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2) + y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.second.visualPosition * (control.availableHeight - height)) + + source: control.Imagine.url + "rangeslider-handle" + ImageSelector on source { + states: [ + {"second": true}, + {"vertical": control.vertical}, + {"horizontal": control.horizontal}, + {"disabled": !control.enabled}, + {"pressed": control.second.pressed}, + {"focused": control.second.handle?.activeFocus ?? false}, + {"mirrored": control.mirrored}, + {"hovered": control.second.hovered} + ] + } + } + + background: NinePatchImage { + scale: control.horizontal && control.mirrored ? -1 : 1 + + source: control.Imagine.url + "rangeslider-background" + NinePatchImageSelector on source { + states: [ + {"vertical": control.vertical}, + {"horizontal": control.horizontal}, + {"disabled": !control.enabled}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.enabled && control.hovered} + ] + } + + NinePatchImage { + readonly property real handleWidth: control.first.handle ? control.first.handle.width : 0 + readonly property real handleHeight: control.first.handle ? control.first.handle.height : 0 + + x: control.horizontal ? handleWidth / 2 + control.first.position * (parent.width - handleWidth) : (parent.width - width) / 2 + y: control.horizontal ? (parent.height - height) / 2 : handleHeight / 2 + control.second.visualPosition * (parent.height - handleHeight) + width: control.horizontal ? control.second.position * (parent.width - handleWidth) - control.first.position * (parent.width - handleWidth) : parent.width + height: control.vertical ? control.second.position * (parent.height - handleHeight) - control.first.position * (parent.height - handleHeight): parent.height + + source: control.Imagine.url + "rangeslider-progress" + NinePatchImageSelector on source { + states: [ + {"vertical": control.vertical}, + {"horizontal": control.horizontal}, + {"disabled": !control.enabled}, + {"focused": control.visualFocus}, + {"mirrored": control.mirrored}, + {"hovered": control.enabled && control.hovered} + ] + } + } + } +} |