2 * Copyright (C) 2013 Canonical, Ltd.
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; version 3.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18import Ubuntu.Components 0.1
19import "Math.js" as MathLocal
24 property int orientation: Qt.Vertical
25 property bool dragging
26 property real dragVelocity: 0
27 property real dragValue: (orientation == Qt.Vertical ? (mouseY - __pressedPosition.y)
28 : (mouseX - __pressedPosition.x))
29 property real lateralPosition: orientation == Qt.Horizontal ? MathLocal.clamp(mouseY, 0, height) : MathLocal.clamp(mouseX, 0, width)
30 property point __pressedPosition: Qt.point(0, 0)
31 property var __dragEvents: []
32 property bool clickValidated: true
33 property bool zeroVelocityCounts: false
35 // Can be replaced with a fake implementation during tests
36 // property var __getCurrentTimeMs: function () { return new Date().getTime() }
37 property var __dateTime: new function() {
38 this.getCurrentTimeMs = function() {return new Date().getTime()}
46 if (dragValue != 0 && pressed) {
60 function updateSpeed() {
62 for (var i=0; i<__dragEvents.length; i++) {
63 totalSpeed += __dragEvents[i][3]
66 if (zeroVelocityCounts || Math.abs(totalSpeed) > 0.001) {
67 dragVelocity = totalSpeed / __dragEvents.length * 1000
71 function cullOldDragEvents(currentTime) {
72 // cull events older than 50 ms but always keep the latest 2 events
73 for (var numberOfCulledEvents=0; numberOfCulledEvents<__dragEvents.length-2; numberOfCulledEvents++) {
74 // __dragEvents[numberOfCulledEvents][0] is the dragTime
75 if (currentTime - __dragEvents[numberOfCulledEvents][0] <= 50) break
78 __dragEvents.splice(0, numberOfCulledEvents)
81 function getEventSpeed(currentTime, event) {
82 if (__dragEvents.length != 0) {
83 var lastDrag = __dragEvents[__dragEvents.length-1]
84 var duration = Math.max(1, currentTime - lastDrag[0])
85 if (orientation == Qt.Vertical) {
86 return (event.y - lastDrag[2]) / duration
88 return (event.x - lastDrag[1]) / duration
95 function pushDragEvent(event) {
96 var currentTime = __dateTime.getCurrentTimeMs()
97 __dragEvents.push([currentTime, event.x, event.y, getEventSpeed(currentTime, event)])
98 cullOldDragEvents(currentTime)
106 if (!draggingArea.containsMouse)
107 clickValidated = false
111 __pressedPosition = Qt.point(mouse.x, mouse.y)
114 clickValidated = true
119 __pressedPosition = Qt.point(mouse.x, mouse.y)
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list