loleaflet/src/dom/Draggable.js                |    2 
 loleaflet/src/map/handler/Map.TouchGesture.js |   57 ++++++++++++++++++++++++++
 2 files changed, 58 insertions(+), 1 deletion(-)

New commits:
commit 7338e3d8185170dbedcc3b40a15c4a6adcc47ef1
Author:     Pranam Lashkari <lpra...@collabora.com>
AuthorDate: Fri Feb 7 07:13:08 2020 +0530
Commit:     Henry Castro <hcas...@collabora.com>
CommitDate: Mon Feb 10 22:27:47 2020 +0100

    Made document scrolling  Ergonomic
    
    added momentum to scrolling making scolling feel smoother and easier
    
    Change-Id: If760761580aeea57116673b67787f9f5451ab5e2
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/88072
    Tested-by: Henry Castro <hcas...@collabora.com>
    Reviewed-by: Henry Castro <hcas...@collabora.com>

diff --git a/loleaflet/src/dom/Draggable.js b/loleaflet/src/dom/Draggable.js
index 5ed23ed73..a442ec798 100644
--- a/loleaflet/src/dom/Draggable.js
+++ b/loleaflet/src/dom/Draggable.js
@@ -132,7 +132,7 @@ L.Draggable = L.Evented.extend({
                        }
                }
                if (!offset.x && !offset.y) { return; }
-               if (L.Browser.touch && Math.abs(offset.x) + Math.abs(offset.y) 
< 3) { return; }
+               if (L.Browser.touch && Math.abs(offset.x) + Math.abs(offset.y) 
< 3 && !e.autoscroll) { return; }
 
                L.DomEvent.preventDefault(e);
 
diff --git a/loleaflet/src/map/handler/Map.TouchGesture.js 
b/loleaflet/src/map/handler/Map.TouchGesture.js
index db7efb084..5fb364ef9 100644
--- a/loleaflet/src/map/handler/Map.TouchGesture.js
+++ b/loleaflet/src/map/handler/Map.TouchGesture.js
@@ -42,6 +42,10 @@ L.Map.TouchGesture = L.Handler.extend({
                                time: 500
                        });
 
+                       this._hammer.get('swipe').set({
+                               threshold: 5
+                       });
+
                        var singleTap = this._hammer.get('tap');
                        var doubleTap = this._hammer.get('doubletap');
                        var tripleTap = new Hammer.Tap({event: 'tripletap', 
taps: 3 });
@@ -93,6 +97,7 @@ L.Map.TouchGesture = L.Handler.extend({
                this._hammer.on('pinchmove', L.bind(this._onPinch, this));
                this._hammer.on('pinchend', L.bind(this._onPinchEnd, this));
                this._hammer.on('tripletap', L.bind(this._onTripleTap, this));
+               this._hammer.on('swipe', L.bind(this._onSwipe, this));
                this._map.on('updatepermission', this._onPermission, this);
                this._onPermission({perm: this._map._permission});
        },
@@ -109,6 +114,7 @@ L.Map.TouchGesture = L.Handler.extend({
                this._hammer.off('doubletap', L.bind(this._onDoubleTap, this));
                this._hammer.off('press', L.bind(this._onPress, this));
                this._hammer.off('tripletap', L.bind(this._onTripleTap, this));
+               this._hammer.off('swipe', L.bind(this._onSwipe, this));
                this._map.off('updatepermission', this._onPermission, this);
        },
 
@@ -359,6 +365,7 @@ L.Map.TouchGesture = L.Handler.extend({
        },
 
        _onPanStart: function (e) {
+               L.Util.cancelAnimFrame(this.autoscrollAnimReq);
                var point = e.pointers[0],
                    containerPoint = 
this._map.mouseEventToContainerPoint(point),
                    layerPoint = 
this._map.containerPointToLayerPoint(containerPoint),
@@ -546,5 +553,55 @@ L.Map.TouchGesture = L.Handler.extend({
                };
 
                return fakeEvt;
+       },
+
+       // Code and maths for the ergonomic scrolling is inspired formul
+       // https://ariya.io/2013/11/javascript-kinetic-scrolling-part-2
+       // Some constants are changed based on the 
testing/experimenting/trial-error
+
+       _onSwipe: function (e) {
+               this._velocity = new L.Point(e.velocityX, e.velocityY);
+               this._amplitude = this._velocity.multiplyBy(32);
+               this._newPos = L.DomUtil.getPosition(this._map._mapPane);
+               var evt = this._constructFakeEvent({
+                       clientX: e.center.x,
+                       clientY: e.center.y,
+                       target: this._map._mapPane
+               },'mousedown');
+               this._startSwipePoint = new L.Point(evt.clientX, evt.clientY);
+               this._map.dragging._draggable._onDown(evt);
+               this._timeStamp = Date.now();
+               L.Util.requestAnimFrame(this._autoscroll, this, true);
+       },
+
+       _autoscroll: function() {
+               var elapsed, delta;
+               elapsed = Date.now() - this._timeStamp;
+               delta = this._amplitude.multiplyBy(Math.exp(-elapsed / 325));
+               var e = this._constructFakeEvent({
+                       clientX: delta.x + this._startSwipePoint.x,
+                       clientY: delta.y + this._startSwipePoint.y,
+                       target: this._map._mapPane,
+               }, 'mousemove');
+               e.autoscroll = true;
+               if (delta.x > 0.2 || delta.x < -0.2 || delta.y > 0.2 || delta.y 
< -0.2) {
+                       if (this._map.getDocSize().x < this._map.getSize().x) {
+                               //don't scroll horizontally if document fits 
the view
+                               delta.x = 0;
+                       }
+                       if (this._map.getDocSize().y < this._map.getSize().y) {
+                               //don't scroll vertically if document fits the 
view
+                               delta.y = 0;
+                       }
+
+                       this._map.dragging._draggable._startPoint = 
this._startSwipePoint;
+                       this._map.dragging._draggable._startPos = this._newPos;
+                       this._newPos._add(delta);
+                       this._map.dragging._draggable._onMove(e);
+                       this.autoscrollAnimReq = 
L.Util.requestAnimFrame(this._autoscroll, this, true);
+               }
+               else {
+                       this._map.dragging._draggable._onUp(e);
+               }
        }
 });
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to