Warning, /maui/nomad-style/ScrollBar.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 * Copyright 2017 Marco Martin <mart@kde.org>
0003 * Copyright 2017 The Qt Company Ltd.
0004 *
0005 * GNU Lesser General Public License Usage
0006 * Alternatively, this file may be used under the terms of the GNU Lesser
0007 * General Public License version 3 as published by the Free Software
0008 * Foundation and appearing in the file LICENSE.LGPLv3 included in the
0009 * packaging of this file. Please review the following information to
0010 * ensure the GNU Lesser General Public License version 3 requirements
0011 * will be met: https://www.gnu.org/licenses/lgpl.html.
0012 *
0013 * GNU General Public License Usage
0014 * Alternatively, this file may be used under the terms of the GNU
0015 * General Public License version 2.0 or later as published by the Free
0016 * Software Foundation and appearing in the file LICENSE.GPL included in
0017 * the packaging of this file. Please review the following information to
0018 * ensure the GNU General Public License version 2.0 requirements will be
0019 * met: http://www.gnu.org/licenses/gpl-2.0.html.
0020 */
0021
0022
0023 import QtQuick 2.6
0024 import org.kde.qqc2desktopstyle.private 1.0 as StylePrivate
0025 import QtQuick.Templates 2.3 as T
0026 import org.kde.kirigami 2.2 as Kirigami
0027
0028 T.ScrollBar {
0029 id: controlRoot
0030
0031 implicitWidth: background.implicitWidth
0032 implicitHeight: background.implicitHeight
0033
0034 hoverEnabled: true
0035
0036 visible: controlRoot.size < 1.0
0037
0038 background: MouseArea {
0039 id: mouseArea
0040 anchors.fill: parent
0041 visible: controlRoot.size < 1.0
0042 hoverEnabled: true
0043 state: "inactive"
0044 onPositionChanged: style.activeControl = style.hitTest(mouse.x, mouse.y)
0045 onExited: style.activeControl = "groove";
0046 onPressed: {
0047 if (style.activeControl == "down") {
0048 buttonTimer.increment = 0.02;
0049 buttonTimer.running = true;
0050 mouse.accepted = true
0051 } else if (style.activeControl == "up") {
0052 buttonTimer.increment = -0.02;
0053 buttonTimer.running = true;
0054 mouse.accepted = true
0055 } else {
0056 mouse.accepted = false
0057 }
0058 }
0059 onReleased: {
0060 buttonTimer.running = false;
0061 mouse.accepted = false
0062 }
0063 onCanceled: buttonTimer.running = false;
0064
0065 implicitWidth: style.horizontal ? 200 : style.pixelMetric("scrollbarExtent")
0066 implicitHeight: style.horizontal ? style.pixelMetric("scrollbarExtent") : 200
0067
0068 StylePrivate.StyleItem {
0069 id: style
0070 control: controlRoot
0071 anchors.fill: parent
0072 elementType: "scrollbar"
0073 hover: activeControl != "none"
0074 activeControl: "none"
0075 sunken: controlRoot.pressed
0076 minimum: 0
0077 maximum: (controlRoot.height/controlRoot.size - controlRoot.height)
0078 value: controlRoot.position * (controlRoot.height/controlRoot.size)
0079 horizontal: controlRoot.orientation == Qt.Horizontal
0080 enabled: controlRoot.enabled
0081
0082 visible: controlRoot.size < 1.0
0083 opacity: 1
0084
0085 Timer {
0086 id: buttonTimer
0087 property real increment
0088 repeat: true
0089 interval: 150
0090 onTriggered: {
0091 controlRoot.position += increment;
0092 }
0093 }
0094 }
0095 StylePrivate.StyleItem {
0096 id: inactiveStyle
0097 anchors.fill: parent
0098 control: controlRoot
0099 elementType: "scrollbar"
0100 activeControl: "none"
0101 sunken: false
0102 minimum: 0
0103 maximum: style.maximum
0104 value: style.value
0105 horizontal: style.horizontal
0106 enabled: controlRoot.enabled
0107
0108 visible: controlRoot.size < 1.0
0109 opacity: 1
0110 }
0111 states: [
0112 State {
0113 name: "hover"
0114 when: mouseArea.containsMouse
0115 PropertyChanges {
0116 target: style
0117 opacity: 1
0118 }
0119 PropertyChanges {
0120 target: inactiveStyle
0121 opacity: 0
0122 }
0123 },
0124 State {
0125 name: "inactive"
0126 when: !mouseArea.containsMouse
0127 PropertyChanges {
0128 target: style
0129 opacity: 0
0130 }
0131 PropertyChanges {
0132 target: inactiveStyle
0133 opacity: 1
0134 }
0135 }
0136 ]
0137 transitions: [
0138 Transition {
0139 ParallelAnimation {
0140 NumberAnimation {
0141 target: style
0142 property: "opacity"
0143 duration: Kirigami.Units.shortDuration
0144 easing.type: Easing.InOutQuad
0145 }
0146 NumberAnimation {
0147 target: inactiveStyle
0148 property: "opacity"
0149 duration: Kirigami.Units.shortDuration
0150 easing.type: Easing.InOutQuad
0151 }
0152 }
0153 }
0154 ]
0155 }
0156
0157 contentItem: Item {}
0158 }