From 224526c9678be37b4ac4258b1f01c7df473c50bc Mon Sep 17 00:00:00 2001 From: Michael Meeks Date: Sat, 19 Sep 2020 21:47:34 +0100 Subject: [PATCH] calc grid: render during canvas 'clear' if we can. Also re-render as soon as we have grid positions. Change-Id: I57095683e662991badcb3a58832c81ebb3bc460d Reviewed-on: https://gerrit.libreoffice.org/c/online/+/103043 Tested-by: Jenkins CollaboraOffice Reviewed-by: Michael Meeks --- loleaflet/src/layer/tile/CanvasTileLayer.js | 37 +++++++++++++-------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/loleaflet/src/layer/tile/CanvasTileLayer.js b/loleaflet/src/layer/tile/CanvasTileLayer.js index 15d8139391..285fa11c39 100644 --- a/loleaflet/src/layer/tile/CanvasTileLayer.js +++ b/loleaflet/src/layer/tile/CanvasTileLayer.js @@ -130,12 +130,22 @@ L.CanvasTilePainter = L.Class.extend({ } }, - clear: function () { - if (this._layer._debug) - this._canvasCtx.fillStyle = 'rgba(255, 0, 0, 0.5)'; + clear: function (ctx) { + // First render the background / sheet grid if we can + if (this.renderBackground) + { + if (!ctx) + ctx = this._paintContext(); + this.renderBackground(this._canvasCtx, ctx); + } else - this._canvasCtx.fillStyle = 'white'; - this._canvasCtx.fillRect(0, 0, this._pixWidth, this._pixHeight); + { + if (this._layer._debug) + this._canvasCtx.fillStyle = 'rgba(255, 0, 0, 0.5)'; + else + this._canvasCtx.fillStyle = 'white'; + this._canvasCtx.fillRect(0, 0, this._pixWidth, this._pixHeight); + } }, // Details of tile areas to render @@ -265,11 +275,13 @@ L.CanvasTilePainter = L.Class.extend({ if (skipUpdate) return; + var ctx; if (resizeCanvas || scaleChanged) { this._setCanvasSize(newSize.x, newSize.y); } else if (mapSizeChanged && topLeftChanged) { - this.clear(); + ctx = this._paintContext(); + this.clear(ctx); } if (mapSizeChanged) @@ -282,24 +294,22 @@ L.CanvasTilePainter = L.Class.extend({ this._lastPart = part; this._topLeft = newTopLeft; - this._paintWholeCanvas(); + this._paintWholeCanvas(ctx); if (this._layer._debug) this._drawSplits(); }, - _paintWholeCanvas: function () { + _paintWholeCanvas: function(ctx) { var zoom = this._lastZoom || Math.round(this._map.getZoom()); var part = this._lastPart || this._layer._selectedPart; // Calculate all this here intead of doing it per tile. - var ctx = this._paintContext(); - - // First render the background / sheet grid if we can - if (this.renderBackground) - this.renderBackground(this._canvasCtx, ctx); + if (!ctx) + ctx = this._paintContext(); + this.clear(ctx); var tileRanges = ctx.paneBoundsList.map(this._layer._pxBoundsToTileRange, this._layer); for (var rangeIdx = 0; rangeIdx < tileRanges.length; ++rangeIdx) { @@ -451,6 +461,7 @@ L.CanvasTileLayer = L.TileLayer.extend({ } canvas.closePath(); }; + this._painter.clear(); }, hasSplitPanesSupport: function () {