loleaflet/src/layer/tile/CalcTileLayer.js   |   10 ++--------
 loleaflet/src/layer/tile/CanvasTileLayer.js |    7 +++++++
 loleaflet/src/layer/tile/GridLayer.js       |   22 ++++++++++++++++++++++
 3 files changed, 31 insertions(+), 8 deletions(-)

New commits:
commit 63c4e730e44a0cfc4635da074a4edb454b3b7281
Author:     Dennis Francis <dennis.fran...@collabora.com>
AuthorDate: Tue Jul 14 17:55:12 2020 +0530
Commit:     Dennis Francis <dennis.fran...@collabora.com>
CommitDate: Wed Jul 15 14:15:12 2020 +0200

    factor out "tile-area for zoom" calculation code...
    
    to coordsToPixBounds() and coordsToTwipsBoundsAtZoom() in GridLayer and
    specialize coordsToPixBounds() for CanvasTileLayer because it stores
    tile position in css pixels instead of grid indices.
    
    Change-Id: I9875a29fe0244717a6f324348ff144c434809ed2
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/98781
    Tested-by: Jenkins
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Dennis Francis <dennis.fran...@collabora.com>

diff --git a/loleaflet/src/layer/tile/CalcTileLayer.js 
b/loleaflet/src/layer/tile/CalcTileLayer.js
index b9ba2674c..589c94369 100644
--- a/loleaflet/src/layer/tile/CalcTileLayer.js
+++ b/loleaflet/src/layer/tile/CalcTileLayer.js
@@ -426,14 +426,8 @@ L.CalcTileLayer = (L.Browser.mobile ? L.TileLayer : 
L.CanvasTileLayer).extend({
                        if (coords.part !== command.part) {
                                continue;
                        }
-                       var scale = this._map.getZoomScale(coords.z);
-                       topLeftTwips = new L.Point(
-                                       this.options.tileWidthTwips / scale * 
coords.x,
-                                       this.options.tileHeightTwips / scale * 
coords.y);
-                       bottomRightTwips = topLeftTwips.add(new L.Point(
-                                       this.options.tileWidthTwips / scale,
-                                       this.options.tileHeightTwips / scale));
-                       bounds = new L.Bounds(topLeftTwips, bottomRightTwips);
+
+                       bounds = this._coordsToTwipsBoundsAtZoom(coords, 
this._map.getZoom());
                        if (invalidBounds.intersects(bounds)) {
                                delete this._tileCache[key];
                        }
diff --git a/loleaflet/src/layer/tile/CanvasTileLayer.js 
b/loleaflet/src/layer/tile/CanvasTileLayer.js
index 75750ace2..214dc5b54 100644
--- a/loleaflet/src/layer/tile/CanvasTileLayer.js
+++ b/loleaflet/src/layer/tile/CanvasTileLayer.js
@@ -1333,6 +1333,13 @@ L.CanvasTileLayer = L.TileLayer.extend({
                this._map._socket.sendMessage('tileprocessed tile=' + tileID);
        },
 
+       _coordsToPixBounds: function (coords) {
+               // coords.x and coords.y are the pixel coordinates of the 
top-left corner of the tile.
+               var topLeft = new L.Point(coords.x, coords.y);
+               var bottomRight = topLeft.add(new L.Point(this._tileSize, 
this._tileSize));
+               return new L.Bounds(topLeft, bottomRight);
+       },
+
        updateHorizPaneSplitter: function () {
 
                var map = this._map;
diff --git a/loleaflet/src/layer/tile/GridLayer.js 
b/loleaflet/src/layer/tile/GridLayer.js
index 6c52eac86..cd4f5eda2 100644
--- a/loleaflet/src/layer/tile/GridLayer.js
+++ b/loleaflet/src/layer/tile/GridLayer.js
@@ -1305,6 +1305,28 @@ L.GridLayer = L.Layer.extend({
                }, this), idleTime);
        },
 
+       _coordsToPixBounds: function (coords) {
+               // coords.x and coords.y are the grid indices of the tile.
+               var topLeft = new L.Point(coords.x, 
coords.y)._multiplyBy(this._tileSize);
+               var bottomRight = topLeft.add(new L.Point(this._tileSize, 
this._tileSize));
+               return new L.Bounds(topLeft, bottomRight);
+       },
+
+       _coordsToTwipsBoundsAtZoom: function (coords, zoom) {
+               console.assert(typeof zoom === 'number', 'invalid zoom');
+               // FIXME: this is highly inaccurate for tiles near the 
bottom/right when zoom != coords.z.
+               // Use sheet geometry data instead (but will need to 
pre-compute tiletwips positions in
+               // L.SheetDimension for at least the recently used zoom levels 
to avoid a linear scan of its spans.)
+               var scale = this._map.getZoomScale(coords.z, zoom);
+               var pxBounds = this._coordsToPixBounds(coords);
+               pxBounds.min._divideBy(scale);
+               pxBounds.max._divideBy(scale);
+
+               var topLeftTwips = this._pixelsToTwips(pxBounds.min);
+               var bottomRightTwips = this._pixelsToTwips(pxBounds.max);
+               return new L.Bounds(topLeftTwips, bottomRightTwips);
+       },
+
        getMaxDocSize: function () {
                return undefined;
        },
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to