Warning, /frameworks/kirigami/autotests/wheelhandler/tst_onWheel.qml is written in an unsupported language. File is not indexed.

0001 /* SPDX-FileCopyrightText: 2021 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 2.15
0006 import QtQuick.Controls 2.15 as QQC2
0007 import org.kde.kirigami 2.19 as Kirigami
0008 import QtTest 1.15
0009 
0010 TestCase {
0011     id: root
0012     name: "WheelHandler onWheel"
0013     visible: true
0014     when: windowShown
0015     width: 600
0016     height: 600
0017 
0018     function test_onWheel() {
0019         let contentX = flickable.contentX
0020         let contentY = flickable.contentY
0021         let contentWidth = flickable.contentWidth
0022         let contentHeight = flickable.contentHeight
0023 
0024         // grow
0025         mouseWheel(flickable, flickable.leftMargin, 0, -120, -120, Qt.NoButton, Qt.ControlModifier)
0026         verify(flickable.contentWidth === contentWidth - 120, "-xDelta")
0027         contentWidth = flickable.contentWidth
0028         verify(flickable.contentHeight === contentHeight - 120, "-yDelta")
0029         contentHeight = flickable.contentHeight
0030 
0031         // check if accepting the event prevents scrolling
0032         verify(flickable.contentX === contentX && flickable.contentY === contentY, "not moved")
0033 
0034         // shrink
0035         mouseWheel(flickable, flickable.leftMargin, 0, 120, 120, Qt.NoButton, Qt.ControlModifier)
0036         verify(flickable.contentWidth === contentWidth + 120, "+xDelta")
0037         verify(flickable.contentHeight === contentHeight + 120, "+yDelta")
0038 
0039         // check if accepting the event prevents scrolling
0040         verify(flickable.contentX === contentX && flickable.contentY === contentY, "not moved")
0041     }
0042 
0043     Rectangle {
0044         anchors.fill: parent
0045         color: "black"
0046     }
0047 
0048     Flickable {
0049         id: flickable
0050         anchors.fill: parent
0051         Kirigami.WheelHandler {
0052             id: wheelHandler
0053             target: flickable
0054             onWheel: {
0055                 if (wheel.modifiers & Qt.ControlModifier) {
0056                     // Adding delta is the simplest way to change size without running into floating point number issues
0057                     // NOTE: Not limiting minimum content size to a size greater than the Flickable size makes it so
0058                     // wheel events stop coming to onWheel when the content size is the size of the flickable or smaller.
0059                     // Maybe it's a Flickable issue? Koko had the same problem with Flickable.
0060                     flickable.contentWidth = Math.max(720, flickable.contentWidth + wheel.angleDelta.x)
0061                     flickable.contentHeight = Math.max(720, flickable.contentHeight + wheel.angleDelta.y)
0062                     wheel.accepted = true
0063                 }
0064             }
0065         }
0066         leftMargin: QQC2.ScrollBar.vertical && QQC2.ScrollBar.vertical.visible && QQC2.ScrollBar.vertical.mirrored ? QQC2.ScrollBar.vertical.width : 0
0067         rightMargin: QQC2.ScrollBar.vertical && QQC2.ScrollBar.vertical.visible && !QQC2.ScrollBar.vertical.mirrored ? QQC2.ScrollBar.vertical.width : 0
0068         bottomMargin: QQC2.ScrollBar.horizontal && QQC2.ScrollBar.horizontal.visible ? QQC2.ScrollBar.horizontal.height : 0
0069         QQC2.ScrollBar.vertical: QQC2.ScrollBar {
0070             parent: flickable.parent
0071             anchors.right: flickable.right
0072             anchors.top: flickable.top
0073             anchors.bottom: flickable.bottom
0074             anchors.bottomMargin: flickable.QQC2.ScrollBar.horizontal ? flickable.QQC2.ScrollBar.horizontal.height : anchors.margins
0075             active: flickable.QQC2.ScrollBar.vertical.active
0076         }
0077         QQC2.ScrollBar.horizontal: QQC2.ScrollBar {
0078             parent: flickable.parent
0079             anchors.left: flickable.left
0080             anchors.right: flickable.right
0081             anchors.bottom: flickable.bottom
0082             anchors.rightMargin: flickable.QQC2.ScrollBar.vertical ? flickable.QQC2.ScrollBar.vertical.width : anchors.margins
0083             active: flickable.QQC2.ScrollBar.horizontal.active
0084         }
0085         contentWidth: 1200
0086         contentHeight: 1200
0087         Rectangle {
0088             id: contentRect
0089             anchors.fill: parent
0090             gradient: Gradient.WideMatrix
0091             border.color: Qt.rgba(0,0,0,0.5)
0092             border.width: 2
0093         }
0094     }
0095 
0096     QQC2.Label {
0097         anchors.centerIn: parent
0098         leftPadding: 4
0099         rightPadding: 4
0100         wrapMode: Text.Wrap
0101         color: "white"
0102         text: `Rectangle size: ${contentRect.width}x${contentRect.height}`
0103         background: Rectangle {
0104             color: "black"
0105         }
0106     }
0107 }