/usr/lib/x86_64-linux-gnu/qt5/qml/Ubuntu/Components/1.2/DraggingArea.qml is in qml-module-ubuntu-components 1.3.1918+16.04.20160404-0ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | /*
* Copyright (C) 2013 Canonical, Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation; version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import QtQuick 2.4
import Ubuntu.Components 1.2
MouseArea {
id: draggingArea
property int orientation: Qt.Vertical
property bool dragging
property real dragVelocity: 0
property real dragValue: (orientation == Qt.Vertical ? (mouseY - __pressedPosition.y)
: (mouseX - __pressedPosition.x))
property real lateralPosition: orientation == Qt.Horizontal ? MathUtils.clamp(mouseY, 0, height) : MathUtils.clamp(mouseX, 0, width)
property point __pressedPosition: Qt.point(0, 0)
property var __dragEvents: []
property bool clickValidated: true
property bool zeroVelocityCounts: false
signal dragStart
signal dragEnd
onDragValueChanged: {
if (dragValue != 0 && pressed) {
dragging = true
}
}
onDraggingChanged: {
if (dragging) {
dragStart()
}
else {
dragEnd()
}
}
function updateSpeed() {
var totalSpeed = 0
for (var i=0; i<__dragEvents.length; i++) {
totalSpeed += __dragEvents[i][3]
}
if (zeroVelocityCounts || Math.abs(totalSpeed) > 0.001) {
dragVelocity = totalSpeed / __dragEvents.length * 1000
}
}
function cullOldDragEvents(currentTime) {
// cull events older than 50 ms but always keep the latest 2 events
for (var numberOfCulledEvents=0; numberOfCulledEvents<__dragEvents.length-2; numberOfCulledEvents++) {
// __dragEvents[numberOfCulledEvents][0] is the dragTime
if (currentTime - __dragEvents[numberOfCulledEvents][0] <= 50) break
}
__dragEvents.splice(0, numberOfCulledEvents)
}
function getEventSpeed(currentTime, event) {
if (__dragEvents.length != 0) {
var lastDrag = __dragEvents[__dragEvents.length-1]
var duration = Math.max(1, currentTime - lastDrag[0])
if (orientation == Qt.Vertical) {
return (event.y - lastDrag[2]) / duration
} else {
return (event.x - lastDrag[1]) / duration
}
} else {
return 0
}
}
function pushDragEvent(event) {
var currentTime = new Date().getTime()
__dragEvents.push([currentTime, event.x, event.y, getEventSpeed(currentTime, event)])
cullOldDragEvents(currentTime)
updateSpeed()
}
onPositionChanged: {
if (dragging) {
pushDragEvent(mouse)
}
if (!draggingArea.containsMouse)
clickValidated = false
}
onPressed: {
__pressedPosition = Qt.point(mouse.x, mouse.y)
__dragEvents = []
pushDragEvent(mouse)
clickValidated = true
}
onReleased: {
dragging = false
__pressedPosition = Qt.point(mouse.x, mouse.y)
}
}
|