[Libreoffice-commits] online.git: Branch 'feature/calc-canvas' - 2 commits - loleaflet/src

Jan Holesovsky (via logerrit) logerrit at kemper.freedesktop.org
Tue Sep 8 13:10:34 UTC 2020


 loleaflet/src/layer/tile/CanvasTileLayer.js   |   35 +++++++++++++++++++++-----
 loleaflet/src/map/anim/Map.ZoomAnimation.js   |    2 -
 loleaflet/src/map/handler/Map.TouchGesture.js |   12 ++------
 3 files changed, 34 insertions(+), 15 deletions(-)

New commits:
commit 8d9b6f3e8ccea4e6edc26a233ebbe99161f58973
Author:     Jan Holesovsky <kendy at collabora.com>
AuthorDate: Tue Sep 8 14:28:02 2020 +0200
Commit:     Jan Holesovsky <kendy at collabora.com>
CommitDate: Tue Sep 8 15:09:58 2020 +0200

    calc canvas: Move the canvas during the pinch-to-zoom.
    
    The actual zooming is still missing.
    
    Change-Id: I68f01fee025589952ee4044e7f64caa1c29ee68f

diff --git a/loleaflet/src/layer/tile/CanvasTileLayer.js b/loleaflet/src/layer/tile/CanvasTileLayer.js
index e44593a9d..4a35b4939 100644
--- a/loleaflet/src/layer/tile/CanvasTileLayer.js
+++ b/loleaflet/src/layer/tile/CanvasTileLayer.js
@@ -180,6 +180,13 @@ L.CanvasTilePainter = L.Class.extend({
 			this._canvasCtx.scale(1, 1);
 			this._canvasCtx.translate(-topLeft.x, -topLeft.y);
 
+			// when using the pinch to zoom, set additional translation based
+			// on the pinch movement
+			if (this._map._animatingZoom) {
+				var centerOffset = this._map._getCenterOffset(this._map._animateToCenter);
+				this._canvasCtx.translate(-Math.round(centerOffset.x), -Math.round(centerOffset.y));
+			}
+
 			// create a clip for the pane/view.
 			this._canvasCtx.beginPath();
 			var paneSize = paneBounds.getSize();
@@ -475,8 +482,10 @@ L.CanvasTileLayer = L.TileLayer.extend({
 	_animateZoom: function (e) {
 		var oldAnimatingZoom = this._map._animatingZoom;
 		var oldAnimateToZoom = this._map._animateToZoom;
+		var oldAnimateToCenter = this._map._animateToCenter;
 		this._map._animatingZoom = true;
 		this._map._animateToZoom = e.zoom;
+		this._map._animateToCenter = e.center;
 
 		this._update(e.center, e.zoom);
 		this._resetPreFetching(true);
@@ -485,6 +494,7 @@ L.CanvasTileLayer = L.TileLayer.extend({
 
 		this._map._animatingZoom = oldAnimatingZoom;
 		this._map._animateToZoom = oldAnimateToZoom;
+		this._map._animateToCenter = oldAnimateToCenter;
 	},
 
 	_setZoomTransforms: function () {
commit 7d69c3d55ea49fb10cf0abf20f6997e71cb17974
Author:     Jan Holesovsky <kendy at collabora.com>
AuthorDate: Tue Sep 8 12:21:04 2020 +0200
Commit:     Jan Holesovsky <kendy at collabora.com>
CommitDate: Tue Sep 8 15:09:58 2020 +0200

    calc canvas: Paint to canvas during the pinch-to-zoom.
    
    Infrastructure work, so that the updates are triggered during that.
    
    Change-Id: I88e75cdc32047a487dd23c9e7be792b14dc097f0

diff --git a/loleaflet/src/layer/tile/CanvasTileLayer.js b/loleaflet/src/layer/tile/CanvasTileLayer.js
index 6d6aacecd..e44593a9d 100644
--- a/loleaflet/src/layer/tile/CanvasTileLayer.js
+++ b/loleaflet/src/layer/tile/CanvasTileLayer.js
@@ -8,6 +8,7 @@ L.TileCoordData = L.Class.extend({
 	initialize: function (left, top, zoom, part) {
 		this.x = left;
 		this.y = top;
+		// FIXME console.assert(Number.isInteger(zoom));
 		this.z = zoom;
 		this.part = part;
 	},
@@ -215,7 +216,6 @@ L.CanvasTilePainter = L.Class.extend({
 	},
 
 	update: function () {
-
 		var newDpiScale = L.getDpiScaleFactor(true /* useExactDPR */);
 		var scaleChanged = this._dpiScale != newDpiScale;
 
@@ -225,7 +225,7 @@ L.CanvasTilePainter = L.Class.extend({
 		}
 
 		var splitPanesContext = this._layer.getSplitPanesContext();
-		var zoom = Math.round(this._map.getZoom());
+		var zoom = this._map.getZoom();
 		var pixelBounds = this._map.getPixelBounds();
 		var newMapSize = pixelBounds.getSize();
 		var newTopLeft = pixelBounds.getTopLeft();
@@ -272,7 +272,8 @@ L.CanvasTilePainter = L.Class.extend({
 		if (splitPosChanged)
 			this._splitPos = newSplitPos;
 
-		this._lastZoom = zoom;
+		if (!this._map._animatingZoom)
+			this._lastZoom = Math.round(zoom);
 		this._lastPart = part;
 
 		this._topLeft = newTopLeft;
@@ -412,12 +413,12 @@ L.CanvasTileLayer = L.TileLayer.extend({
 			movestart: this._moveStart,
 			moveend: this._move,
 			// update tiles on move, but not more often than once per given interval
-			move: L.Util.throttle(this._move, this.options.updateInterval, this),
+			move: L.Util.throttle(this._move, this.options.updateInterval, this), // TODO we might want to make the updates more often (?)
 			splitposchanged: this._move,
 		};
 
 		if (this._zoomAnimated) {
-			events.zoomanim = this._animateZoom;
+			events.zoomanim = L.Util.throttle(this._animateZoom, this.options.updateInterval, this); // TODO we might want to make the updates more often (?)
 		}
 
 		return events;
@@ -471,7 +472,19 @@ L.CanvasTileLayer = L.TileLayer.extend({
 		}
 	},
 
-	_animateZoom: function () {
+	_animateZoom: function (e) {
+		var oldAnimatingZoom = this._map._animatingZoom;
+		var oldAnimateToZoom = this._map._animateToZoom;
+		this._map._animatingZoom = true;
+		this._map._animateToZoom = e.zoom;
+
+		this._update(e.center, e.zoom);
+		this._resetPreFetching(true);
+		this._onCurrentPageUpdate();
+		this._painter.update(this._painter);
+
+		this._map._animatingZoom = oldAnimatingZoom;
+		this._map._animateToZoom = oldAnimateToZoom;
 	},
 
 	_setZoomTransforms: function () {
diff --git a/loleaflet/src/map/anim/Map.ZoomAnimation.js b/loleaflet/src/map/anim/Map.ZoomAnimation.js
index 5d6ceaec5..5b0b9ec1a 100644
--- a/loleaflet/src/map/anim/Map.ZoomAnimation.js
+++ b/loleaflet/src/map/anim/Map.ZoomAnimation.js
@@ -8,7 +8,7 @@ L.Map.mergeOptions({
 	zoomAnimationThreshold: 4
 });
 
-var zoomAnimated = false;//L.DomUtil.TRANSITION && L.Browser.any3d && !L.Browser.mobileOpera && !(this._docLayer instanceof L.CanvasTileLayer);
+var zoomAnimated = L.DomUtil.TRANSITION && L.Browser.any3d && !L.Browser.mobileOpera && !(this._docLayer instanceof L.CanvasTileLayer);
 
 if (zoomAnimated) {
 
diff --git a/loleaflet/src/map/handler/Map.TouchGesture.js b/loleaflet/src/map/handler/Map.TouchGesture.js
index fd81d9b37..bcbc471f1 100644
--- a/loleaflet/src/map/handler/Map.TouchGesture.js
+++ b/loleaflet/src/map/handler/Map.TouchGesture.js
@@ -549,10 +549,8 @@ L.Map.TouchGesture = L.Handler.extend({
 
 		L.Util.cancelAnimFrame(this._animRequest);
 		this._animRequest = L.Util.requestAnimFrame(function () {
-			if (typeof this._map._animateZoom === 'function')
-				this._map._animateZoom(this._center, this._zoom, false, true);
-			else
-				this._map._resetView(this._center, this._zoom, false, true);
+			console.assert(typeof this._map._animateZoom === 'function');
+			this._map._animateZoom(this._center, this._zoom, false, true);
 		}, this, true, this._map._container);
 	},
 
@@ -576,10 +574,8 @@ L.Map.TouchGesture = L.Handler.extend({
 
 		if (this._center) {
 			L.Util.cancelAnimFrame(this._animRequest);
-			if (typeof this._map._animateZoom === 'function')
-				this._map._animateZoom(this._center, finalZoom, true, true);
-			else
-				this._map._resetView(this._center, finalZoom, false, true);
+			console.assert(typeof this._map._animateZoom === 'function');
+			this._map._animateZoom(this._center, finalZoom, true, true);
 		}
 
 		if (this._map._docLayer && this._map._docLayer._annotations) {


More information about the Libreoffice-commits mailing list