Warning, /frameworks/qqc2-desktop-style/org.kde.desktop/Slider.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 SPDX-FileCopyrightText: 2017 Marco Martin <mart@kde.org> 0003 SPDX-FileCopyrightText: 2017 The Qt Company Ltd. 0004 0005 SPDX-License-Identifier: LGPL-3.0-only OR GPL-2.0-or-later 0006 */ 0007 0008 0009 import QtQuick 2.6 0010 import org.kde.qqc2desktopstyle.private 1.0 as StylePrivate 0011 import QtQuick.Templates 2.15 as T 0012 import org.kde.kirigami 2.4 as Kirigami 0013 0014 T.Slider { 0015 id: controlRoot 0016 Kirigami.Theme.colorSet: Kirigami.Theme.Button 0017 0018 implicitWidth: background.horizontal ? Kirigami.Units.gridUnit * 12 : background.implicitWidth 0019 implicitHeight: background.horizontal ? background.implicitHeight : Kirigami.Units.gridUnit * 12 0020 0021 hoverEnabled: true 0022 LayoutMirroring.enabled: Qt.application.layoutDirection === Qt.RightToLeft 0023 0024 handle: Item { 0025 anchors.verticalCenter: controlRoot.verticalCenter 0026 } 0027 0028 snapMode: T.Slider.SnapOnRelease 0029 0030 background: StylePrivate.StyleItem { 0031 // Rescale for extra precision. Adapts to the range of `from` & `to` to avoid integer overflow. 0032 property int factor: (Math.abs(controlRoot.from) < 100000 && Math.abs(controlRoot.to) < 100000) 0033 ? 10000 : 1 0034 0035 control: controlRoot 0036 elementType: "slider" 0037 sunken: controlRoot.pressed 0038 implicitWidth: 200 0039 contentWidth: horizontal ? controlRoot.implicitWidth : (Kirigami.Settings.tabletMode ? 24 : 22) 0040 contentHeight: horizontal ? (Kirigami.Settings.tabletMode ? 24 : 22) : controlRoot.implicitHeight 0041 anchors.verticalCenter: controlRoot.verticalCenter 0042 0043 maximum: factor * controlRoot.to 0044 minimum: factor * controlRoot.from 0045 step: factor * controlRoot.stepSize 0046 value: factor * controlRoot.value 0047 horizontal: controlRoot.orientation === Qt.Horizontal 0048 enabled: controlRoot.enabled 0049 hasFocus: controlRoot.activeFocus 0050 hover: controlRoot.hovered 0051 activeControl: controlRoot.stepSize > 0 ? "ticks" : "" 0052 0053 // `wheelEnabled: true` doesn't work since it doesn't snap to tickmarks, 0054 // so we have to implement the scroll handling ourselves. See 0055 // https://bugreports.qt.io/browse/QTBUG-93081 0056 MouseArea { 0057 property int wheelDelta: 0 0058 0059 anchors { 0060 fill: parent 0061 leftMargin: controlRoot.leftPadding 0062 rightMargin: controlRoot.rightPadding 0063 } 0064 0065 acceptedButtons: Qt.NoButton 0066 0067 onWheel: { 0068 const lastValue = controlRoot.value 0069 const delta = wheel.angleDelta.y || wheel.angleDelta.x 0070 wheelDelta += delta; 0071 // magic number 120 for common "one click" 0072 // See: https://doc.qt.io/qt-5/qml-qtquick-wheelevent.html#angleDelta-prop 0073 while (wheelDelta >= 120) { 0074 wheelDelta -= 120; 0075 controlRoot.decrease(); 0076 } 0077 while (wheelDelta <= -120) { 0078 wheelDelta += 120; 0079 controlRoot.increase(); 0080 } 0081 if (lastValue !== controlRoot.value) { 0082 controlRoot.moved(); 0083 } 0084 } 0085 } 0086 } 0087 }