diff options
Diffstat (limited to 'tests/manual/pointer/content')
-rw-r--r-- | tests/manual/pointer/content/FakeFlickable.qml | 101 | ||||
-rw-r--r-- | tests/manual/pointer/content/LeftDrawer.qml | 101 | ||||
-rw-r--r-- | tests/manual/pointer/content/Slider.qml | 33 |
3 files changed, 191 insertions, 44 deletions
diff --git a/tests/manual/pointer/content/FakeFlickable.qml b/tests/manual/pointer/content/FakeFlickable.qml index ffb5c4e914..636399ba2c 100644 --- a/tests/manual/pointer/content/FakeFlickable.qml +++ b/tests/manual/pointer/content/FakeFlickable.qml @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2019 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the manual tests of the Qt Toolkit. @@ -26,10 +26,12 @@ ** ****************************************************************************/ -import QtQuick 2.12 +import QtQuick 2.14 +import Qt.labs.animation 1.0 Item { id: root + objectName: "viewport" default property alias data: __contentItem.data property alias velocity: anim.velocity property alias contentX: __contentItem.x // sign is reversed compared to Flickable.contentX @@ -45,52 +47,81 @@ Item { width: childrenRect.width height: childrenRect.height - property real xlimit: root.width - __contentItem.width - property real ylimit: root.height - __contentItem.height + BoundaryRule on x { + id: xbr + minimum: root.width - __contentItem.width + maximum: 0 + minimumOvershoot: 100 + maximumOvershoot: 100 + overshootFilter: BoundaryRule.Peak + } - function returnToBounds() { - if (x > 0) { - returnXAnim.to = 0 - returnXAnim.start() - } else if (x < xlimit) { - returnXAnim.to = xlimit - returnXAnim.start() - } - if (y > 0) { - returnYAnim.to = 0 - returnYAnim.start() - } else if (y < ylimit) { - returnYAnim.to = ylimit - returnYAnim.start() - } + BoundaryRule on y { + id: ybr + minimum: root.height - __contentItem.height + maximum: 0 + minimumOvershoot: 100 + maximumOvershoot: 100 + overshootFilter: BoundaryRule.Peak } DragHandler { id: dragHandler - onActiveChanged: if (!active) anim.restart(centroid.velocity) + onActiveChanged: + if (active) { + anim.stop() + root.flickStarted() + } else { + var vel = centroid.velocity + if (xbr.returnToBounds()) + vel.x = 0 + if (ybr.returnToBounds()) + vel.y = 0 + if (vel.x !== 0 || vel.y !== 0) + anim.restart(vel) + else + root.flickEnded() + } + } + WheelHandler { + rotationScale: 15 + property: "x" + orientation: Qt.Horizontal + acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad + onActiveChanged: + // emitting signals in both instances is redundant but hard to avoid + // when the touchpad is flicking along both axes + if (active) { + anim.stop() + root.flickStarted() + } else { + xbr.returnToBounds() + root.flickEnded() + } + } + WheelHandler { + rotationScale: 15 + property: "y" + orientation: Qt.Vertical + acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad + onActiveChanged: + if (active) { + anim.stop() + root.flickStarted() + } else { + ybr.returnToBounds() + root.flickEnded() + } } MomentumAnimation { id: anim target: __contentItem onStarted: root.flickStarted() onStopped: { - __contentItem.returnToBounds() + xbr.returnToBounds() + ybr.returnToBounds() root.flickEnded() } } - NumberAnimation { - id: returnXAnim - target: __contentItem - property: "x" - duration: 200 - easing.type: Easing.OutQuad - } - NumberAnimation { - id: returnYAnim - target: __contentItem - property: "y" - duration: 200 - easing.type: Easing.OutQuad - } } } diff --git a/tests/manual/pointer/content/LeftDrawer.qml b/tests/manual/pointer/content/LeftDrawer.qml new file mode 100644 index 0000000000..08f2f67b5c --- /dev/null +++ b/tests/manual/pointer/content/LeftDrawer.qml @@ -0,0 +1,101 @@ +/**************************************************************************** +** +** Copyright (C) 2019 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the manual tests of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL-EXCEPT$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +import QtQuick 2.14 +import Qt.labs.animation 1.0 +import QtGraphicalEffects 1.14 + +Item { + id: root + objectName: "LeftHandlerDrawer" + width: 100 + height: 400 + property real stickout: 4 + property real xOpen: rect.radius * -2 + property real xClosed: stickout - width + x: xClosed + y: 10 + + function close() { + openCloseAnimation.to = xClosed + openCloseAnimation.start() + } + function open() { + openCloseAnimation.to = xOpen + openCloseAnimation.start() + } + + DragHandler { + id: dragHandler + yAxis.enabled: false + xAxis.minimum: -1000 + margin: 20 + onActiveChanged: + if (!active) { + if (xbr.returnToBounds()) + return; + if (translation.x > 0) + open() + if (translation.x < 0) + close() + } + } + + BoundaryRule on x { + id: xbr + minimum: xClosed + maximum: xOpen + minimumOvershoot: rect.radius + maximumOvershoot: rect.radius + } + + NumberAnimation on x { + id: openCloseAnimation + duration: 300 + easing { type: Easing.OutBounce; overshoot: 5 } + } + + RectangularGlow { + id: effect + anchors.fill: parent + glowRadius: dragHandler.margin + spread: 0.2 + color: "cyan" + cornerRadius: rect.radius + glowRadius + } + + Rectangle { + id: rect + anchors.fill: parent + anchors.margins: 3 + color: "#333" + border.color: "cyan" + border.width: 2 + radius: 10 + antialiasing: true + } +} diff --git a/tests/manual/pointer/content/Slider.qml b/tests/manual/pointer/content/Slider.qml index c381d97c7c..beb84b176b 100644 --- a/tests/manual/pointer/content/Slider.qml +++ b/tests/manual/pointer/content/Slider.qml @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2017 The Qt Company Ltd. +** Copyright (C) 2019 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the manual tests of the Qt Toolkit. @@ -26,7 +26,8 @@ ** ****************************************************************************/ -import QtQuick 2.12 +import QtQuick 2.14 +import Qt.labs.animation 1.0 Item { id: root @@ -42,8 +43,16 @@ Item { objectName: label.text + " DragHandler" target: knob xAxis.enabled: false - yAxis.minimum: slot.y - yAxis.maximum: slot.height + slot.y - knob.height + } + + WheelHandler { + id: wheelHandler + objectName: label.text + " WheelHandler" + acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad + invertible: false // Don't let the system "natural scrolling" setting affect this + rotationScale: -0.5 // But make it go consistently in the same direction as the fingers or wheel, a bit slow + target: knob + property: "y" } Rectangle { @@ -51,8 +60,8 @@ Item { anchors.top: parent.top anchors.bottom: parent.bottom anchors.margins: 10 - anchors.topMargin: 30 - anchors.bottomMargin: 30 + anchors.topMargin: label.height + 6 + anchors.bottomMargin: valueLabel.height + 4 anchors.horizontalCenter: parent.horizontalCenter width: 10 color: "black" @@ -82,10 +91,10 @@ Item { height: root.width / 2 width: implicitWidth / implicitHeight * height property bool programmatic: false - property real multiplier: root.maximumValue / (dragHandler.yAxis.maximum - dragHandler.yAxis.minimum) - onYChanged: if (!programmatic) root.value = root.maximumValue - (knob.y - dragHandler.yAxis.minimum) * multiplier + property real multiplier: root.maximumValue / (ybr.maximum - ybr.minimum) + onYChanged: if (!programmatic) root.value = root.maximumValue - (knob.y - ybr.minimum) * multiplier transformOrigin: Item.Center - function setValue(value) { knob.y = dragHandler.yAxis.maximum - value / knob.multiplier } + function setValue(value) { knob.y = ybr.maximum - value / knob.multiplier } TapHandler { id: tap objectName: label.text + " TapHandler" @@ -95,9 +104,15 @@ Item { root.tapped } } + BoundaryRule on y { + id: ybr + minimum: slot.y + maximum: slot.height + slot.y - knob.height + } } Text { + id: valueLabel font.pointSize: 16 color: "red" anchors.bottom: parent.bottom |