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

Michael Meeks (via logerrit) logerrit at kemper.freedesktop.org
Fri Aug 21 14:49:03 UTC 2020


Rebased ref, commits from common ancestor:
commit 3804c5387e3302837d0616e86e262d99d5c32b5c
Author:     Michael Meeks <michael.meeks at collabora.com>
AuthorDate: Fri Aug 21 15:47:58 2020 +0100
Commit:     Michael Meeks <michael.meeks at collabora.com>
CommitDate: Fri Aug 21 15:47:58 2020 +0100

    calc tiles: remove partial re-rendering for now.
    
    Drops _shiftAndPaint and _paintRects, blits are fast.
    
    Change-Id: I64779f1037784f4efbe74cdf564b5f09e13b3316

diff --git a/loleaflet/src/layer/tile/CanvasTileLayer.js b/loleaflet/src/layer/tile/CanvasTileLayer.js
index f6c29d57a..5881803c8 100644
--- a/loleaflet/src/layer/tile/CanvasTileLayer.js
+++ b/loleaflet/src/layer/tile/CanvasTileLayer.js
@@ -236,7 +236,6 @@ L.CanvasTilePainter = L.Class.extend({
 		var resizeCanvas = !newSize.equals(this._lastSize);
 
 		var topLeftChanged = this._topLeft === undefined || !newTopLeft.equals(this._topLeft);
-
 		var splitPosChanged = !newSplitPos.equals(this._splitPos);
 
 		var skipUpdate = (
@@ -247,9 +246,9 @@ L.CanvasTilePainter = L.Class.extend({
 			!splitPosChanged &&
 			!scaleChanged);
 
-		if (skipUpdate) {
+		if (skipUpdate)
 			return;
-		}
+
 		if (scaleChanged)
 			this._dpiScale = L.getDpiScaleFactor();
 
@@ -261,130 +260,20 @@ L.CanvasTilePainter = L.Class.extend({
 			this.clear();
 		}
 
-		if (mapSizeChanged) {
+		if (mapSizeChanged)
 			this._lastMapSize = newMapSize;
-		}
 
-		if (splitPosChanged) {
+		if (splitPosChanged)
 			this._splitPos = newSplitPos;
-		}
-
-		// TODO: fix _shiftAndPaint for high DPI.
-		var shiftPaintDisabled = true;
-		var fullRepaintNeeded = zoomChanged || partChanged || resizeCanvas ||
-		    shiftPaintDisabled || scaleChanged;
 
 		this._lastZoom = zoom;
 		this._lastPart = part;
 
-		if (fullRepaintNeeded) {
-
-			this._topLeft = newTopLeft;
-			this._paintWholeCanvas();
-
-			if (this.options.debug) {
-				this._drawSplits();
-			}
-
-			return;
-		}
-
-		this._shiftAndPaint(newTopLeft);
-	},
-
-	_shiftAndPaint: function (newTopLeft) {
-
-		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;
-		var dy = newTopLeft.y - this._topLeft.y;
-		if (!dx && !dy) {
-			return;
-		}
-
-		// Determine the area that needs to be painted as max. two disjoint rectangles.
-		var rectsToPaint = [];
-		this._inMove = true;
-		var oldTopLeft = this._topLeft;
-		var oldBottomRight = oldTopLeft.add(offset);
-		var newBottomRight = newTopLeft.add(offset);
-
-		if (Math.abs(dx) < this._width && Math.abs(dy) < this._height) {
-
-			this._canvasCtx.save();
-			this._canvasCtx.scale(this._dpiScale, this._dpiScale);
-			this._canvasCtx.globalCompositeOperation = 'copy';
-			this._canvasCtx.drawImage(this._canvas, -dx, -dy);
-			this._canvasCtx.globalCompositeOperation = 'source-over';
-			this._canvasCtx.restore();
-
-			var xstart = newTopLeft.x, xend = newBottomRight.x;
-			var ystart = newTopLeft.y, yend = newBottomRight.y;
-			if (dx) {
-				xstart = dx > 0 ? oldBottomRight.x + 1 : newTopLeft.x;
-				xend   = xstart + Math.abs(dx) - 1;
-			}
-
-			if (dy) {
-				ystart = dy > 0 ? oldBottomRight.y + 1 : newTopLeft.y;
-				yend   = ystart + Math.abs(dy) - 1;
-			}
-
-			// rectangle including the x-range that needs painting with full y-range.
-			// This will take care of simultaneous non-zero dx and dy.
-			if (dx) {
-				rectsToPaint.push(new L.Bounds(
-					new L.Point(xstart, newTopLeft.y),
-					new L.Point(xend,   newBottomRight.y)
-				));
-			}
-
-			// rectangle excluding the x-range that needs painting + needed y-range.
-			if (dy) {
-				rectsToPaint.push(new L.Bounds(
-					new L.Point(dx > 0 ? newTopLeft.x : (dx ? xend + 1 : newTopLeft.x), ystart),
-					new L.Point(dx > 0 ? xstart - 1   : newBottomRight.x,               yend)
-				));
-			}
-
-		}
-		else {
-			rectsToPaint.push(new L.Bounds(newTopLeft, newBottomRight));
-		}
-
 		this._topLeft = newTopLeft;
+		this._paintWholeCanvas();
 
-		this._paintRects(rectsToPaint, newTopLeft);
-	},
-
-	_paintRects: function (rects, topLeft) {
-		for (var i = 0; i < rects.length; ++i) {
-			this._paintRect(rects[i], topLeft);
-		}
-	},
-
-	_paintRect: function (rect) {
-		var zoom = this._lastZoom || Math.round(this._map.getZoom());
-		var part = this._lastPart || this._layer._selectedPart;
-		var tileRange = this._layer._pxBoundsToTileRange(rect);
-		var tileSize = this._tileSizeCSSPx || this._layer._getTileSize();
-		for (var j = tileRange.min.y; j <= tileRange.max.y; ++j) {
-			for (var i = tileRange.min.x; i <= tileRange.max.x; ++i) {
-				var coords = new L.TileCoordData(
-					i * tileSize,
-					j * tileSize,
-					zoom,
-					part);
-
-				var key = coords.key();
-				var tile = this._layer._tiles[key];
-				var invalid = tile && tile._invalidCount && tile._invalidCount > 0;
-				if (tile && tile.loaded && !invalid) {
-					this.paint(tile);
-				}
-			}
-		}
+		if (this.options.debug)
+			this._drawSplits();
 	},
 
 	_paintWholeCanvas: function () {


More information about the Libreoffice-commits mailing list