[Libreoffice-commits] online.git: loleaflet/src
Dennis Francis (via logerrit)
logerrit at kemper.freedesktop.org
Wed Aug 12 09:33:56 UTC 2020
loleaflet/src/layer/tile/CanvasTileLayer.js | 31 ++++++++++++++++++++--------
1 file changed, 23 insertions(+), 8 deletions(-)
New commits:
commit 797f8fc775bcaba8c8b1e6909dd4da0ae0b06d64
Author: Dennis Francis <dennis.francis at collabora.com>
AuthorDate: Tue Aug 11 13:58:42 2020 +0530
Commit: Dennis Francis <dennis.francis at collabora.com>
CommitDate: Wed Aug 12 11:33:37 2020 +0200
loleaflet: avoid flicker due to map-size changes...
by resizing the canvas only when the width/height of the map increases.
A canvas resize causes horrible flickering especially when the dpiScale
is not 1. This problem is more prevalent in mobile due to the on-screen
keyboard.
Change-Id: I10135d91f122eb751f16791476e09a45dbe09752
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/100490
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/tile/CanvasTileLayer.js b/loleaflet/src/layer/tile/CanvasTileLayer.js
index 93131252e..06911991c 100644
--- a/loleaflet/src/layer/tile/CanvasTileLayer.js
+++ b/loleaflet/src/layer/tile/CanvasTileLayer.js
@@ -107,6 +107,7 @@ L.CanvasTilePainter = L.Class.extend({
this.setImageSmoothing(enableImageSmoothing);
var mapSize = this._map.getPixelBounds().getSize();
this._lastSize = mapSize;
+ this._lastMapSize = mapSize;
this._setCanvasSize(mapSize.x, mapSize.y);
},
@@ -216,7 +217,7 @@ L.CanvasTilePainter = L.Class.extend({
var splitPanesContext = this._layer.getSplitPanesContext();
var zoom = Math.round(this._map.getZoom());
var pixelBounds = this._map.getPixelBounds();
- var newSize = pixelBounds.getSize();
+ var newMapSize = pixelBounds.getSize();
var newTopLeft = pixelBounds.getTopLeft();
var part = this._layer._selectedPart;
var newSplitPos = splitPanesContext ?
@@ -224,25 +225,39 @@ L.CanvasTilePainter = L.Class.extend({
var zoomChanged = (zoom !== this._lastZoom);
var partChanged = (part !== this._lastPart);
- var sizeChanged = !newSize.equals(this._lastSize);
+
+ var mapSizeChanged = !newMapSize.equals(this._lastMapSize);
+ // To avoid flicker, only resize the canvas element if width or height of the map increases.
+ var newSize = new L.Point(Math.max(newMapSize.x, this._lastSize.x),
+ Math.max(newMapSize.y, this._lastSize.y));
+ var resizeCanvas = !newSize.equals(this._lastSize);
+
+ var topLeftChanged = this._topLeft === undefined || !newTopLeft.equals(this._topLeft);
+
var splitPosChanged = !newSplitPos.equals(this._splitPos);
var skipUpdate = (
- this._topLeft !== undefined &&
+ !topLeftChanged &&
!zoomChanged &&
!partChanged &&
- !sizeChanged &&
- !splitPosChanged &&
- newTopLeft.equals(this._topLeft));
+ !resizeCanvas &&
+ !splitPosChanged);
if (skipUpdate) {
return;
}
- if (sizeChanged) {
+ if (resizeCanvas) {
this._setCanvasSize(newSize.x, newSize.y);
this._lastSize = newSize;
}
+ else if (mapSizeChanged && topLeftChanged) {
+ this.clear();
+ }
+
+ if (mapSizeChanged) {
+ this._lastMapSize = newMapSize;
+ }
if (splitPosChanged) {
this._splitPos = newSplitPos;
@@ -250,7 +265,7 @@ L.CanvasTilePainter = L.Class.extend({
// TODO: fix _shiftAndPaint for high DPI.
var shiftPaintDisabled = true;
- var fullRepaintNeeded = zoomChanged || partChanged || sizeChanged || shiftPaintDisabled;
+ var fullRepaintNeeded = zoomChanged || partChanged || resizeCanvas || shiftPaintDisabled;
this._lastZoom = zoom;
this._lastPart = part;
More information about the Libreoffice-commits
mailing list