moment/src/gui/Base/HKineticScrollingDisabler.qml

68 lines
1.8 KiB
QML
Raw Normal View History

2020-05-16 07:48:31 +10:00
// SPDX-License-Identifier: LGPL-3.0-or-later
import QtQuick 2.12
MouseArea {
id: mouseArea
enabled: ! window.settings.enableKineticScrolling
2020-05-16 07:48:31 +10:00
propagateComposedEvents: true
acceptedButtons: Qt.NoButton
2020-05-16 07:48:31 +10:00
onWheel: {
// Make components below the stack notice the wheel event
wheel.accepted = false
2020-05-16 07:48:31 +10:00
const pos = getNewPosition(flickable, wheel)
2020-05-16 07:48:31 +10:00
flickable.flick(0, 0)
flickable.contentY = pos
}
property Flickable flickable: parent
// Used to get default flickDeceleration value
readonly property Flickable dummy: Flickable {}
2020-05-16 07:48:31 +10:00
function getNewPosition(flickable, wheel) {
// wheel.pixelDelta will be available on high resolution trackpads.
// Otherwise use wheel.angleDelta, which is available from mouses and
// low resolution trackpads.
// When higher pixelDelta, more scroll will be applied
const pixelDelta =
wheel.pixelDelta.y ||
wheel.angleDelta.y / 8 * Qt.styleHints.wheelScrollLines
2020-05-16 07:48:31 +10:00
// Return current position if there was not any movement
if (flickable.contentHeight < flickable.height || !pixelDelta)
return flickable.contentY
const maxScroll =
2020-05-16 07:48:31 +10:00
flickable.contentHeight +
flickable.originY +
flickable.bottomMargin -
flickable.height
const minScroll = flickable.topMargin + flickable.originY
2020-05-16 07:48:31 +10:00
// Avoid overscrolling
return Math.max(
minScroll,
Math.min(maxScroll, flickable.contentY - pixelDelta)
)
}
Binding {
target: flickable
property: "maximumFlickVelocity"
value: mouseArea.enabled ? 0 : 4000.0
}
Binding {
target: flickable
property: "flickDeceleration"
value: mouseArea.enabled ? 0 : dummy.flickDeceleration
2020-05-16 07:48:31 +10:00
}
}