loleaflet/src/layer/tile/GridLayer.js |   54 +++++++++++++++++++++++++++-------
 loleaflet/src/layer/tile/TileLayer.js |   10 +++++-
 2 files changed, 53 insertions(+), 11 deletions(-)

New commits:
commit f0f88381ca6fcd4ab413931a1f21f52cb574698f
Author: Mihai Varga <mihai.va...@collabora.com>
Date:   Fri Jul 17 12:42:54 2015 +0300

    loleaflet: prefetching from other parts causes too much invalidation

diff --git a/loleaflet/src/layer/tile/TileLayer.js 
b/loleaflet/src/layer/tile/TileLayer.js
index 371c5ef..ba76534 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -24,7 +24,8 @@ L.TileLayer = L.GridLayer.extend({
                tms: false,
                zoomReverse: false,
                detectRetina: false,
-               crossOrigin: false
+               crossOrigin: false,
+               preFetchOtherParts: false
        },
 
        initialize: function (url, options) {
commit 5aff27e3ce1cd3137178eb9a44681022bf489b3a
Author: Mihai Varga <mihai.va...@collabora.com>
Date:   Fri Jul 17 12:42:14 2015 +0300

    loleaflet: code to prefetch tiles from other parts

diff --git a/loleaflet/src/layer/tile/GridLayer.js 
b/loleaflet/src/layer/tile/GridLayer.js
index b8f6f5c..96b510c 100644
--- a/loleaflet/src/layer/tile/GridLayer.js
+++ b/loleaflet/src/layer/tile/GridLayer.js
@@ -245,8 +245,8 @@ L.GridLayer = L.Layer.extend({
                        tile = this._tiles[key];
                        if (tile.current && !tile.active) {
                                var coords = tile.coords;
-                               if (!this._retainParent(coords.x, coords.y, 
coords.z, coords.z - 5)) {
-                                       this._retainChildren(coords.x, 
coords.y, coords.z, coords.z + 2);
+                               if (!this._retainParent(coords.x, coords.y, 
coords.z, coords.part, coords.z - 5)) {
+                                       this._retainChildren(coords.x, 
coords.y, coords.z, coords.part, coords.z + 2);
                                }
                        }
                }
@@ -264,12 +264,12 @@ L.GridLayer = L.Layer.extend({
                }
        },
 
-       _retainParent: function (x, y, z, minZoom) {
+       _retainParent: function (x, y, z, part, minZoom) {
                var x2 = Math.floor(x / 1.2),
                        y2 = Math.floor(y / 1.2),
                        z2 = z - 1;
 
-               var key = x2 + ':' + y2 + ':' + z2 + ':' + this._currentPart,
+               var key = x2 + ':' + y2 + ':' + z2 + ':' + part,
                        tile = this._tiles[key];
 
                if (tile && tile.active) {
@@ -281,19 +281,19 @@ L.GridLayer = L.Layer.extend({
                }
 
                if (z2 > minZoom) {
-                       return this._retainParent(x2, y2, z2, minZoom);
+                       return this._retainParent(x2, y2, z2, part, minZoom);
                }
 
                return false;
        },
 
-       _retainChildren: function (x, y, z, maxZoom) {
+       _retainChildren: function (x, y, z, part, maxZoom) {
 
                for (var i = 1.2 * x; i < 1.2 * x + 2; i++) {
                        for (var j = 1.2 * y; j < 1.2 * y + 2; j++) {
 
                                var key = Math.floor(i) + ':' + Math.floor(j) + 
':' +
-                                       (z + 1) + ':' + this._currentPart,
+                                       (z + 1) + ':' + part,
                                        tile = this._tiles[key];
 
                                if (tile && tile.active) {
@@ -305,7 +305,7 @@ L.GridLayer = L.Layer.extend({
                                }
 
                                if (z + 1 < maxZoom) {
-                                       this._retainChildren(i, j, z + 1, 
maxZoom);
+                                       this._retainChildren(i, j, z + 1, part, 
maxZoom);
                                }
                        }
                }
@@ -664,7 +664,7 @@ L.GridLayer = L.Layer.extend({
                                var twips = this._coordsToTwips(coords);
                                this._pendingTilesCount += 1;
                                this.sendMessage('tile ' +
-                                                               'part=' + 
this._currentPart + ' ' +
+                                                               'part=' + 
coords.part + ' ' +
                                                                'width=' + 
this._tileSize + ' ' +
                                                                'height=' + 
this._tileSize + ' ' +
                                                                'tileposx=' + 
twips.x + ' '     +
@@ -846,7 +846,7 @@ L.GridLayer = L.Layer.extend({
                        for (i = 0; i < queue.length && tilesToFetch > 0; i++) {
                                coords = queue[i];
                                coords.z = zoom;
-                               coords.part = this._currentPart;
+                               coords.part = this._preFetchPart;
                                var key = this._tileCoordsToKey(coords);
 
                                if (!this._isValidTile(coords) ||
@@ -878,6 +878,40 @@ L.GridLayer = L.Layer.extend({
                                tileBorder.max.y += 1;
                        }
                        borderWidth += 1;
+                       if (!(tileBorder.min.x >= 0 || tileBorder.min.y >= 0 ||
+                                       tileBorder.max.x * this._tileWidthTwips 
< this._docWidthTwips ||
+                                        tileBorder.max.y * 
this._tileHeightTwips < this._docHeightTwips) &&
+                                       this.options.preFetchOtherParts) {
+                               var diff = this._preFetchPart - 
this._currentPart;
+                               if (diff === 0 && this._currentPart < 
this._parts - 1) {
+                                       this._preFetchPart += 1;
+                                       this._preFetchBorder = null;
+                               }
+                               else if (diff > 0) {
+                                       if (this._currentPart - diff >= 0) {
+                                               // lower part number
+                                               this._preFetchPart = 
this._currentPart - diff;
+                                               this._preFetchBorder = null;
+                                       }
+                                       else if (this._currentPart + diff + 1 < 
this._parts) {
+                                               // higher part number
+                                               this._preFetchPart = 
this._currentPart + diff + 1;
+                                               this._preFetchBorder = null;
+                                       }
+                               }
+                               else if (diff < 0) {
+                                       if (this._currentPart - diff + 1 < 
this._parts) {
+                                               // higher part number
+                                               this._preFetchPart = 
this._currentPart - diff + 1;
+                                               this._preFetchBorder = null;
+                                       }
+                                       else if (this._currentPart + diff - 1 
>= 0) {
+                                               // lower part number
+                                               this._preFetchPart = 
this._currentPart + diff - 1;
+                                               this._preFetchBorder = null;
+                                       }
+                               }
+                       }
                }
 
                if (finalQueue.length > 0) {
commit 369993b6ca3957a6cef709dc8e63860883c2e6cf
Author: Mihai Varga <mihai.va...@collabora.com>
Date:   Fri Jul 17 12:36:00 2015 +0300

    loleaflet: don't invalidate tiles from other parts

diff --git a/loleaflet/src/layer/tile/TileLayer.js 
b/loleaflet/src/layer/tile/TileLayer.js
index 7efd7ce..371c5ef 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -280,6 +280,9 @@ L.TileLayer = L.GridLayer.extend({
                                // compute the rectangle that each tile covers 
in the document based
                                // on the zoom level
                                coords = this._keyToTileCoords(key);
+                               if (coords.part !== this._currentPart) {
+                                       continue;
+                               }
                                var scale = this._map.getZoomScale(coords.z);
                                topLeftTwips = new L.Point(
                                                this.options.tileWidthTwips / 
scale * coords.x,
@@ -320,6 +323,10 @@ L.TileLayer = L.GridLayer.extend({
                                        partNames: partNames
                                });
                                this._update();
+                               if (this._preFetchPart !== this._currentPart) {
+                                       this._preFetchPart = this._currentPart;
+                                       this._preFetchBorder = null;
+                               }
                                if (!this._tilesPreFetcher) {
                                        this._tilesPreFetcher = 
setInterval(L.bind(this._preFetchTiles, this), 2000);
                                }
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to