[Libreoffice-commits] online.git: loleaflet/src

Dennis Francis (via logerrit) logerrit at kemper.freedesktop.org
Fri Jul 10 14:53:17 UTC 2020


 loleaflet/src/layer/marker/Marker.js             |   12 +++++----
 loleaflet/src/layer/tile/CalcTileLayer.js        |   12 ++++++++-
 loleaflet/src/layer/tile/CanvasTileLayer.js      |   28 +++++++++++++----------
 loleaflet/src/layer/vector/Renderer.js           |    4 +--
 loleaflet/src/layer/vector/SplitPanesRenderer.js |    4 ---
 loleaflet/src/layer/vector/SplitPanesSVG.js      |    2 -
 loleaflet/src/layer/vector/SplitterLine.js       |   15 ++++++------
 loleaflet/src/map/Map.js                         |   21 +++++++----------
 8 files changed, 54 insertions(+), 44 deletions(-)

New commits:
commit fa043504b92b8cb47403336f56f58f720502aec4
Author:     Dennis Francis <dennis.francis at collabora.com>
AuthorDate: Thu Jul 9 22:36:24 2020 +0530
Commit:     Dennis Francis <dennis.francis at collabora.com>
CommitDate: Fri Jul 10 16:52:58 2020 +0200

    defer splitPanesContext creation till we get the part number...
    
    and this context object should be cached as a member only by the document layer.
    All others must invoke getSplitPanesContext() on the map or the document layer
    everytime it is needed. Otherwise it is a lot of effort to keep the
    caches up-to-date on a sheet-switch etc.
    
    Change-Id: I262b0f6a10060426d89460defc0d3f0a510b880e
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/98496
    Tested-by: Jenkins
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
    Reviewed-by: Dennis Francis <dennis.francis at collabora.com>

diff --git a/loleaflet/src/layer/marker/Marker.js b/loleaflet/src/layer/marker/Marker.js
index d9e1db258..2fe48b10b 100644
--- a/loleaflet/src/layer/marker/Marker.js
+++ b/loleaflet/src/layer/marker/Marker.js
@@ -40,7 +40,6 @@ L.Marker = L.Layer.extend({
 	},
 
 	onAdd: function (map) {
-		this._splitPanesContext = map.getSplitPanesContext();
 		this._zoomAnimated = this._zoomAnimated && map.options.markerZoomAnimation;
 
 		this._initIcon();
@@ -65,12 +64,13 @@ L.Marker = L.Layer.extend({
 	getEvents: function () {
 		var events = {viewreset: this.update};
 
-		if (this._splitPanesContext) {
+		var splitPanesPossible = this._map._docLayer.hasSplitPanesSupport();
+		if (splitPanesPossible) {
 			events.moveend = this.update;
 			events.splitposchanged = this.update;
 		}
 
-		if (this._zoomAnimated && !this._splitPanesContext) {
+		if (this._zoomAnimated && !splitPanesPossible) {
 			events.zoomanim = this._animateZoom;
 		}
 
@@ -115,12 +115,14 @@ L.Marker = L.Layer.extend({
 			return;
 		}
 
-		if (!this._splitPanesContext) {
+		var splitPanesContext = this._map.getSplitPanesContext();
+
+		if (!splitPanesContext) {
 			this._setPos(this._map.latLngToLayerPoint(this._latlng).round());
 			return;
 		}
 
-		var splitPos = this._splitPanesContext.getSplitPos();
+		var splitPos = splitPanesContext.getSplitPos();
 		var docPos = this._map.project(this._latlng);
 		var pixelOrigin = this._map.getPixelOrigin();
 		var mapPanePos = this._map._getMapPanePos();
diff --git a/loleaflet/src/layer/tile/CalcTileLayer.js b/loleaflet/src/layer/tile/CalcTileLayer.js
index 2f1a6ac8a..dfe2fd9e2 100644
--- a/loleaflet/src/layer/tile/CalcTileLayer.js
+++ b/loleaflet/src/layer/tile/CalcTileLayer.js
@@ -69,7 +69,6 @@ L.CalcTileLayer = (L.Browser.mobile ? L.TileLayer : L.CanvasTileLayer).extend({
 	},
 
 	onAdd: function (map) {
-		this._switchSplitPanesContext();
 		map.addControl(L.control.tabs());
 		map.addControl(L.control.columnHeader());
 		map.addControl(L.control.rowHeader());
@@ -539,6 +538,7 @@ L.CalcTileLayer = (L.Browser.mobile ? L.TileLayer : L.CanvasTileLayer).extend({
 	_onStatusMsg: function (textMsg) {
 		var command = this._map._socket.parseServerCmd(textMsg);
 		if (command.width && command.height && this._documentInfo !== textMsg) {
+			var firstSelectedPart = (typeof this._selectedPart !== 'number');
 			this._docWidthTwips = command.width;
 			this._docHeightTwips = command.height;
 			this._docType = command.type;
@@ -575,6 +575,9 @@ L.CalcTileLayer = (L.Browser.mobile ? L.TileLayer : L.CanvasTileLayer).extend({
 			});
 			this._resetPreFetching(true);
 			this._update();
+			if (firstSelectedPart) {
+				this._switchSplitPanesContext();
+			}
 		}
 	},
 
@@ -773,13 +776,18 @@ L.CalcTileLayer = (L.Browser.mobile ? L.TileLayer : L.CanvasTileLayer).extend({
 			this._splitPaneCache = {};
 		}
 
+		console.assert(typeof this._selectedPart === 'number', 'invalid selectedPart');
+
 		var spContext = this._splitPaneCache[this._selectedPart];
 		if (!spContext) {
 			spContext = new L.SplitPanesContext(this);
+			this._splitPaneCache[this._selectedPart] = spContext;
 		}
 
 		this._splitPanesContext = spContext;
-		this._map._splitPanesContext = spContext;
+		if (this.sheetGeometry) {
+			this._updateSplitPos();
+		}
 	},
 
 	_onCommandValuesMsg: function (textMsg) {
diff --git a/loleaflet/src/layer/tile/CanvasTileLayer.js b/loleaflet/src/layer/tile/CanvasTileLayer.js
index e086a08ad..4c7bd0394 100644
--- a/loleaflet/src/layer/tile/CanvasTileLayer.js
+++ b/loleaflet/src/layer/tile/CanvasTileLayer.js
@@ -43,7 +43,6 @@ L.CanvasTilePainter = L.Class.extend({
 	initialize: function (layer, dpiScale, enableImageSmoothing) {
 		this._layer = layer;
 		this._canvas = this._layer._canvas;
-		this._splitPanesContext = this._layer.getSplitPanesContext();
 
 		if (dpiScale === 1 || dpiScale === 2) {
 			enableImageSmoothing = (enableImageSmoothing === true);
@@ -60,8 +59,9 @@ L.CanvasTilePainter = L.Class.extend({
 		this._topLeft = undefined;
 		this._lastZoom = undefined;
 		this._lastPart = undefined;
-		this._splitPos = this._splitPanesContext ?
-			this._splitPanesContext.getSplitPos() : new L.Point(0, 0);
+		var splitPanesContext = this._layer.getSplitPanesContext();
+		this._splitPos = splitPanesContext ?
+			splitPanesContext.getSplitPos() : new L.Point(0, 0);
 
 		this._tileSizeCSSPx = undefined;
 		this._updatesRunning = false;
@@ -139,9 +139,10 @@ L.CanvasTilePainter = L.Class.extend({
 		var tileBounds = new L.Bounds(tileTopLeft, tileTopLeft.add(tileSize));
 
 		viewBounds = viewBounds || this._map.getPixelBounds();
+		var splitPanesContext = this._layer.getSplitPanesContext();
 		paneBoundsList = paneBoundsList || (
-			this._splitPanesContext ?
-			this._splitPanesContext.getPxBoundList(viewBounds) :
+			splitPanesContext ?
+			splitPanesContext.getPxBoundList(viewBounds) :
 			[viewBounds]
 		);
 
@@ -182,10 +183,11 @@ L.CanvasTilePainter = L.Class.extend({
 	},
 
 	_drawSplits: function () {
-		if (!this._splitPanesContext) {
+		var splitPanesContext = this._layer.getSplitPanesContext();
+		if (!splitPanesContext) {
 			return;
 		}
-		var splitPos = this._splitPanesContext.getSplitPos();
+		var splitPos = splitPanesContext.getSplitPos();
 		this._canvasCtx.save();
 		this._canvasCtx.scale(this._dpiScale, this._dpiScale);
 		this._canvasCtx.strokeStyle = 'red';
@@ -201,13 +203,14 @@ L.CanvasTilePainter = L.Class.extend({
 
 	update: function () {
 
+		var splitPanesContext = this._layer.getSplitPanesContext();
 		var zoom = Math.round(this._map.getZoom());
 		var pixelBounds = this._map.getPixelBounds();
 		var newSize = pixelBounds.getSize();
 		var newTopLeft = pixelBounds.getTopLeft();
 		var part = this._layer._selectedPart;
-		var newSplitPos = this._splitPanesContext ?
-			this._splitPanesContext.getSplitPos(): this._splitPos;
+		var newSplitPos = splitPanesContext ?
+			splitPanesContext.getSplitPos(): this._splitPos;
 
 		var zoomChanged = (zoom !== this._lastZoom);
 		var partChanged = (part !== this._lastPart);
@@ -259,7 +262,7 @@ L.CanvasTilePainter = L.Class.extend({
 
 	_shiftAndPaint: function (newTopLeft) {
 
-		console.assert(!this._splitPanesContext, '_shiftAndPaint is broken for split-panes.');
+		console.assert(!this._layer.getSplitPanesContext(), '_shiftAndPaint is broken for split-panes.');
 		var offset = new L.Point(this._width - 1, this._height - 1);
 
 		var dx = newTopLeft.x - this._topLeft.x;
@@ -359,9 +362,10 @@ L.CanvasTilePainter = L.Class.extend({
 		var viewSize = new L.Point(this._width, this._height);
 		var viewBounds = new L.Bounds(this._topLeft, this._topLeft.add(viewSize));
 
+		var splitPanesContext = this._layer.getSplitPanesContext();
 		// Calculate all this here intead of doing it per tile.
-		var paneBoundsList = this._splitPanesContext ?
-			this._splitPanesContext.getPxBoundList(viewBounds) : [viewBounds];
+		var paneBoundsList = splitPanesContext ?
+			splitPanesContext.getPxBoundList(viewBounds) : [viewBounds];
 		var tileRanges = paneBoundsList.map(this._layer._pxBoundsToTileRange, this._layer);
 
 		var tileSize = this._tileSizeCSSPx || this._layer._getTileSize();
diff --git a/loleaflet/src/layer/vector/Renderer.js b/loleaflet/src/layer/vector/Renderer.js
index b2507db6d..85ab7bccb 100644
--- a/loleaflet/src/layer/vector/Renderer.js
+++ b/loleaflet/src/layer/vector/Renderer.js
@@ -108,7 +108,7 @@ L.Map.include({
 		var renderer = layer.options.renderer || this._getPaneRenderer(layer.options.pane) || this.options.renderer || this._renderer;
 
 		if (!renderer) {
-			if (this._splitPanesContext) {
+			if (this.getSplitPanesContext()) {
 				renderer = this._renderer = (L.SVG && L.SplitPanesSVG && L.splitPanesSVG()) ||
 					(L.Canvas && L.SplitPanesCanvas && L.splitPanesCanvas());
 			}
@@ -132,7 +132,7 @@ L.Map.include({
 
 		var renderer = this._paneRenderers[name];
 		if (renderer === undefined) {
-			if (this._splitPanesContext) {
+			if (this.getSplitPanesContext()) {
 				renderer = (L.SVG && L.SplitPanesSVG && L.splitPanesSVG({pane: name})) ||
 					(L.Canvas && L.SplitPanesCanvas && L.splitPanesCanvas({pane: name}));
 			}
diff --git a/loleaflet/src/layer/vector/SplitPanesRenderer.js b/loleaflet/src/layer/vector/SplitPanesRenderer.js
index 4f7f06073..4ef1f72c1 100644
--- a/loleaflet/src/layer/vector/SplitPanesRenderer.js
+++ b/loleaflet/src/layer/vector/SplitPanesRenderer.js
@@ -18,9 +18,7 @@ L.SplitPanesRenderer = L.Layer.extend({
 	},
 
 	onAdd: function () {
-
-		this._splitPanesContext = this._map.getSplitPanesContext();
-		console.assert(this._splitPanesContext, 'no split-panes context object!');
+		console.assert(this._map.getSplitPanesContext(), 'no split-panes context object!');
 
 		if (!this._container) {
 			this._initContainer(); // defined by renderer implementations
diff --git a/loleaflet/src/layer/vector/SplitPanesSVG.js b/loleaflet/src/layer/vector/SplitPanesSVG.js
index c0f8974ce..4ad5de6fd 100644
--- a/loleaflet/src/layer/vector/SplitPanesSVG.js
+++ b/loleaflet/src/layer/vector/SplitPanesSVG.js
@@ -78,7 +78,7 @@ L.SplitPanesSVG = L.SplitPanesRenderer.extend({
 		var renderer = this._childRenderers[rendererId];
 		console.assert(renderer && L.stamp(renderer) === L.stamp(childRenderer), 'Child renderer does not belong to parent!');
 
-		var splitPos = this._splitPanesContext.getSplitPos();
+		var splitPos = this._map.getSplitPanesContext().getSplitPos();
 		var size = this._map.getSize();
 		var pixelOrigin = this._map.getPixelOrigin();
 		// Container coordinates.
diff --git a/loleaflet/src/layer/vector/SplitterLine.js b/loleaflet/src/layer/vector/SplitterLine.js
index a769a58e0..344b91625 100644
--- a/loleaflet/src/layer/vector/SplitterLine.js
+++ b/loleaflet/src/layer/vector/SplitterLine.js
@@ -29,12 +29,12 @@ L.SplitterLine = L.Rectangle.extend({
 
 	_calculateLatLngBounds: function (map) {
 		map = map || this._map;
-		this._splitPanesContext = this._splitPanesContext || map.getSplitPanesContext();
-		console.assert(this._splitPanesContext, 'no _splitPanesContext!');
+		var splitPanesContext = map.getSplitPanesContext();
+		console.assert(splitPanesContext, 'no splitPanesContext!');
 
 		var size = map._docLayer.getMaxDocSize();
 		var isHoriz = this.options.isHoriz;
-		var splitPos = this._splitPanesContext.getSplitPos();
+		var splitPos = splitPanesContext.getSplitPos();
 
 		this._lastPos = isHoriz ? splitPos.x : splitPos.y;
 
@@ -134,17 +134,18 @@ L.SplitterLine = L.Rectangle.extend({
 		this._dragStarted = false;
 
 		if (this._curPos !== undefined) {
+			var splitPanesContext = this._map.getSplitPanesContext();
 			if (this.options.isHoriz) {
-				this._splitPanesContext.setHorizSplitPos(this._curPos);
+				splitPanesContext.setHorizSplitPos(this._curPos);
 			}
 			else {
-				this._splitPanesContext.setVertSplitPos(this._curPos);
+				splitPanesContext.setVertSplitPos(this._curPos);
 			}
 
-			var newPoint = this._splitPanesContext.getSplitPos();
+			var newPoint = splitPanesContext.getSplitPos();
 			var newPos = this.options.isHoriz ? newPoint.x : newPoint.y;
 			if (newPos == this._lastPos) {
-				this._splitPanesContext.updateSplitters();
+				splitPanesContext.updateSplitters();
 			}
 		}
 
diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js
index 97163f1d7..2d4dd2b0e 100644
--- a/loleaflet/src/map/Map.js
+++ b/loleaflet/src/map/Map.js
@@ -914,10 +914,11 @@ L.Map = L.Evented.extend({
 	},
 
 	containerPointToLayerPoint: function (point) { // (Point)
-		if (!this._splitPanesContext) {
+		var splitPanesContext = this.getSplitPanesContext();
+		if (!splitPanesContext) {
 			return this.containerPointToLayerPointIgnoreSplits(point);
 		}
-		var splitPos = this._splitPanesContext.getSplitPos();
+		var splitPos = splitPanesContext.getSplitPos();
 		var pixelOrigin = this.getPixelOrigin();
 		var mapPanePos = this._getMapPanePos();
 		var result = L.point(point);
@@ -943,12 +944,12 @@ L.Map = L.Evented.extend({
 	},
 
 	layerPointToContainerPoint: function (point) { // (Point)
-
-		if (!this._splitPanesContext) {
+		var splitPanesContext = this.getSplitPanesContext();
+		if (!splitPanesContext) {
 			return this.layerPointToContainerPointIgnoreSplits(point);
 		}
 
-		var splitPos = this._splitPanesContext.getSplitPos();
+		var splitPos = splitPanesContext.getSplitPos();
 		var pixelOrigin = this.getPixelOrigin();
 		var mapPanePos = this._getMapPanePos();
 		var result = L.point(point)._add(pixelOrigin);
@@ -1824,16 +1825,12 @@ L.Map = L.Evented.extend({
 	},
 
 	getSplitPanesContext: function () {
-		if (this._splitPanesContext) {
-			return this._splitPanesContext;
-		}
-
 		var docLayer = this._docLayer;
-		if (docLayer && typeof docLayer.getSplitPanesContext === 'function') {
-			this._splitPanesContext = docLayer.getSplitPanesContext();
+		if (docLayer) {
+			return docLayer.getSplitPanesContext();
 		}
 
-		return this._splitPanesContext;
+		return undefined;
 	}
 });
 


More information about the Libreoffice-commits mailing list