[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