[Libreoffice-commits] online.git: 2 commits - loleaflet/src
Mihai Varga
mihai.varga at collabora.com
Thu Jul 30 05:15:15 PDT 2015
loleaflet/src/layer/tile/GridLayer.js | 79 +++++++++++++++++++---------------
loleaflet/src/layer/tile/TileLayer.js | 7 +++
2 files changed, 53 insertions(+), 33 deletions(-)
New commits:
commit 99089a9dd3d241e2b72bd8b1043ccaa5f78729f0
Author: Mihai Varga <mihai.varga at collabora.com>
Date: Thu Jul 30 15:11:00 2015 +0300
loleaflet: don't create img object for prefetched tiles from other parts
Instead, add an extra parameter to the 'tile' command (prefetch=true)
to know to cache it when it arrives on the client
diff --git a/loleaflet/src/layer/tile/GridLayer.js b/loleaflet/src/layer/tile/GridLayer.js
index 689bbe3..75db98f 100644
--- a/loleaflet/src/layer/tile/GridLayer.js
+++ b/loleaflet/src/layer/tile/GridLayer.js
@@ -612,46 +612,53 @@ L.GridLayer = L.Layer.extend({
_addTile: function (coords, fragment) {
var tilePos = this._getTilePos(coords),
key = this._tileCoordsToKey(coords);
- var tile = this.createTile(this._wrapCoords(coords), L.bind(this._tileReady, this, coords));
- this._initTile(tile);
+ if (coords.part === this._currentPart) {
+ var tile = this.createTile(this._wrapCoords(coords), L.bind(this._tileReady, this, coords));
- // if createTile is defined with a second argument ("done" callback),
- // we know that tile is async and will be ready later; otherwise
- if (this.createTile.length < 2) {
- // mark tile as ready, but delay one frame for opacity animation to happen
- setTimeout(L.bind(this._tileReady, this, coords, null, tile), 0);
- }
+ this._initTile(tile);
- // we prefer top/left over translate3d so that we don't create a HW-accelerated layer from each tile
- // which is slow, and it also fixes gaps between tiles in Safari
- L.DomUtil.setPosition(tile, tilePos, true);
+ // if createTile is defined with a second argument ("done" callback),
+ // we know that tile is async and will be ready later; otherwise
+ if (this.createTile.length < 2) {
+ // mark tile as ready, but delay one frame for opacity animation to happen
+ setTimeout(L.bind(this._tileReady, this, coords, null, tile), 0);
+ }
- // save tile in cache
- this._tiles[key] = {
- el: tile,
- coords: coords,
- current: true
- };
+ // we prefer top/left over translate3d so that we don't create a HW-accelerated layer from each tile
+ // which is slow, and it also fixes gaps between tiles in Safari
+ L.DomUtil.setPosition(tile, tilePos, true);
- fragment.appendChild(tile);
+ // save tile in cache
+ this._tiles[key] = {
+ el: tile,
+ coords: coords,
+ current: true
+ };
- this.fire('tileloadstart', {
- tile: tile,
- coords: coords
- });
+ fragment.appendChild(tile);
+
+ this.fire('tileloadstart', {
+ tile: tile,
+ coords: coords
+ });
+ }
if (!this._tileCache[key]) {
if (this.options.useSocket && this._map.socket) {
var twips = this._coordsToTwips(coords);
- this.sendMessage('tile ' +
- 'part=' + coords.part + ' ' +
- 'width=' + this._tileSize + ' ' +
- 'height=' + this._tileSize + ' ' +
- 'tileposx=' + twips.x + ' ' +
- 'tileposy=' + twips.y + ' ' +
- 'tilewidth=' + this._tileWidthTwips + ' ' +
- 'tileheight=' + this._tileHeightTwips, key);
+ var msg = 'tile ' +
+ 'part=' + coords.part + ' ' +
+ 'width=' + this._tileSize + ' ' +
+ 'height=' + this._tileSize + ' ' +
+ 'tileposx=' + twips.x + ' ' +
+ 'tileposy=' + twips.y + ' ' +
+ 'tilewidth=' + this._tileWidthTwips + ' ' +
+ 'tileheight=' + this._tileHeightTwips;
+ if (coords.part !== this._currentPart) {
+ msg += ' prefetch=true';
+ }
+ this.sendMessage(msg, key);
}
}
else {
diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js
index 83d489c..e537922 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -401,6 +401,10 @@ L.TileLayer = L.GridLayer.extend({
}
tile.el.src = img;
}
+ else if (command.preFetch === 'true') {
+ this._emptyTilesCount -= 1;
+ this._tileCache[key] = img;
+ }
L.Log.log(textMsg, L.INCOMING, key);
}
else if (textMsg.startsWith('textselection:')) {
@@ -530,6 +534,9 @@ L.TileLayer = L.GridLayer.extend({
// remove newline characters
command.type = tokens[i].substring(5).replace(/(\r\n|\n|\r)/gm, '');
}
+ else if (tokens[i].substring(0,9) === 'prefetch=') {
+ command.preFetch = tokens[i].substring(9);
+ }
}
if (command.tileWidth && command.tileHeight) {
var scale = command.tileWidth / this.options.tileWidthTwips;
commit 71750599bdc5c8b9c31512386a952829b4c1a4b0
Author: Mihai Varga <mihai.varga at collabora.com>
Date: Thu Jul 30 14:41:22 2015 +0300
loleaflet: prefetch all tiles from other parts
not only those outside of the visible area
diff --git a/loleaflet/src/layer/tile/GridLayer.js b/loleaflet/src/layer/tile/GridLayer.js
index 70f3c10..689bbe3 100644
--- a/loleaflet/src/layer/tile/GridLayer.js
+++ b/loleaflet/src/layer/tile/GridLayer.js
@@ -759,9 +759,15 @@ L.GridLayer = L.Layer.extend({
}
if (!this._preFetchBorder) {
- var pixelBounds = this._map.getPixelBounds(center, zoom),
- tileBorder = this._pxBoundsToTileRange(pixelBounds);
- this._preFetchBorder = tileBorder;
+ if (this._currentPart !== this._preFetchPart) {
+ // all tiles from the new part have to be pre-fetched
+ tileBorder = this._preFetchBorder = new L.Bounds(new L.Point(0, 0), new L.Point(0, 0));
+ }
+ else {
+ var pixelBounds = this._map.getPixelBounds(center, zoom),
+ tileBorder = this._pxBoundsToTileRange(pixelBounds);
+ this._preFetchBorder = tileBorder;
+ }
}
else {
tileBorder = this._preFetchBorder;
More information about the Libreoffice-commits
mailing list