loleaflet/src/layer/tile/GridLayer.js |   56 +++++++++++++++++++++-------------
 loleaflet/src/layer/tile/TileLayer.js |    3 -
 2 files changed, 35 insertions(+), 24 deletions(-)

New commits:
commit 139bae53c112118f6b96b3f41ec8a8af6dd54a52
Author: Mihai Varga <mihai.va...@collabora.com>
Date:   Fri May 22 14:27:42 2015 +0300

    Fixed the incorrect tile rendering after zooming problem
    
    Leaflet originally discarded tiles from different zoom levels
    and I initially thought setting the opacity to 0 will be enough
    and this way tiles will remain in cache.
    But this does not work so tiles are now removed from the dom tree
    and added in a cache to be later reused

diff --git a/loleaflet/src/layer/tile/GridLayer.js 
b/loleaflet/src/layer/tile/GridLayer.js
index 52636d3..5b85b58 100644
--- a/loleaflet/src/layer/tile/GridLayer.js
+++ b/loleaflet/src/layer/tile/GridLayer.js
@@ -34,6 +34,7 @@ L.GridLayer = L.Layer.extend({
 
                this._levels = {};
                this._tiles = {};
+               this._tileCache = {};
 
                this._viewReset();
                this._update();
@@ -262,11 +263,11 @@ L.GridLayer = L.Layer.extend({
        },
 
        _retainParent: function (x, y, z, minZoom) {
-               var x2 = Math.floor(x / 2),
-                       y2 = Math.floor(y / 2),
+               var x2 = Math.floor(x / 1.2),
+                       y2 = Math.floor(y / 1.2),
                        z2 = z - 1;
 
-               var key = x2 + ':' + y2 + ':' + z2,
+               var key = x2 + ':' + y2 + ':' + z2 + ':' + this._currentPart,
                        tile = this._tiles[key];
 
                if (tile && tile.active) {
@@ -286,10 +287,11 @@ L.GridLayer = L.Layer.extend({
 
        _retainChildren: function (x, y, z, maxZoom) {
 
-               for (var i = 2 * x; i < 2 * x + 2; i++) {
-                       for (var j = 2 * y; j < 2 * y + 2; j++) {
+               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 = i + ':' + j + ':' + (z + 1),
+                               var key = Math.floor(i) + ':' + Math.floor(j) + 
':' +
+                                       (z + 1) + ':' + this._currentPart,
                                        tile = this._tiles[key];
 
                                if (tile && tile.active) {
@@ -437,7 +439,6 @@ L.GridLayer = L.Layer.extend({
 
        _move: function () {
                this._update();
-               this._pruneTiles();
        },
 
        _update: function (center, zoom) {
@@ -558,7 +559,15 @@ L.GridLayer = L.Layer.extend({
        _removeTile: function (key) {
                var tile = this._tiles[key];
                if (!tile) { return; }
-               tile.current = false;
+
+               this._tileCache[key] = tile.el.src;
+               L.DomUtil.remove(tile.el);
+               delete this._tiles[key];
+
+               this.fire('tileunload', {
+                       tile: tile.el,
+                       coords: this._keyToTileCoords(key)
+               });
        },
 
        _initTile: function (tile) {
@@ -583,18 +592,6 @@ L.GridLayer = L.Layer.extend({
        },
 
        _addTile: function (coords, fragment) {
-               if (this.options.useSocket && this._map.socket) {
-                       var twips = this._coordsToTwips(coords);
-                       this._map.socket.send('tile ' +
-                                                                       'part=' 
+ this._currentPart + ' ' +
-                                                                       
'width=' + this._tileSize + ' ' +
-                                                                       
'height=' + this._tileSize + ' ' +
-                                                                       
'tileposx=' + twips.x + ' '     +
-                                                                       
'tileposy=' + twips.y + ' ' +
-                                                                       
'tilewidth=' + this._tileWidthTwips + ' ' +
-                                                                       
'tileheight=' + this._tileHeightTwips);
-               }
-
                var tilePos = this._getTilePos(coords),
                        key = this._tileCoordsToKey(coords);
                var tile = this.createTile(this._wrapCoords(coords), 
L.bind(this._tileReady, this, coords));
@@ -624,6 +621,23 @@ L.GridLayer = L.Layer.extend({
                        tile: tile,
                        coords: coords
                });
+
+               if (!this._tileCache[key]) {
+                       if (this.options.useSocket && this._map.socket) {
+                               var twips = this._coordsToTwips(coords);
+                               this._map.socket.send('tile ' +
+                                                                               
'part=' + this._currentPart + ' ' +
+                                                                               
'width=' + this._tileSize + ' ' +
+                                                                               
'height=' + this._tileSize + ' ' +
+                                                                               
'tileposx=' + twips.x + ' '     +
+                                                                               
'tileposy=' + twips.y + ' ' +
+                                                                               
'tilewidth=' + this._tileWidthTwips + ' ' +
+                                                                               
'tileheight=' + this._tileHeightTwips);
+                       }
+               }
+               else {
+                       tile.src = this._tileCache[key];
+               }
        },
 
        _tileReady: function (coords, err, tile) {
@@ -640,7 +654,7 @@ L.GridLayer = L.Layer.extend({
                var key = this._tileCoordsToKey(coords);
 
                tile = this._tiles[key];
-               if (!tile || tile.loaded !== undefined) { return; }
+               if (!tile) { return; }
 
                tile.loaded = +new Date();
                if (this._map._fadeAnimated) {
diff --git a/loleaflet/src/layer/tile/TileLayer.js 
b/loleaflet/src/layer/tile/TileLayer.js
index bf532e3..8875565 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -95,9 +95,6 @@ L.TileLayer = L.GridLayer.extend({
                 http://www.w3.org/TR/WCAG20-TECHS/H67
                */
                tile.alt = '';
-
-               tile.src = '';
-
                return tile;
        },
 
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to