loleaflet/src/map/Map.js |   18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

New commits:
commit dfd77d44836661472908993cbedcef41996c3487
Author:     Jan Holesovsky <ke...@collabora.com>
AuthorDate: Tue Sep 1 01:39:07 2020 +0200
Commit:     Jan Holesovsky <ke...@collabora.com>
CommitDate: Tue Sep 1 01:49:04 2020 +0200

    calc canvas: Fix occasional off-by-one error that results in a blurry 
canvas.
    
    The core of the fix is in _getNewPixelOrigin() where the round() behaves
    non-predictably / inconsistently with the rest of the code, causing
    random off-by-one error that shows (or not) depending on the window
    size.
    
    The biggest problem of this is that this off-by-one is then multiplied
    somewhere by the zoom factor, causing the canvas being completely
    blurry; but eventually when the user clicked into the sheet, it
    'magically' fixed itself.
    
    The rest of the changes (in setZoom()) should actually do the same thing
    as the previous code, but using existing methods, instead of computing
    the shifts manually.
    
    Change-Id: If0ecb1301b7c1e65cfe8126385ef959c584c5d16

diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js
index 84a286eb6..718af8b05 100644
--- a/loleaflet/src/map/Map.js
+++ b/loleaflet/src/map/Map.js
@@ -474,6 +474,8 @@ L.Map = L.Evented.extend({
                        this._zoom = this._limitZoom(zoom);
                        return this;
                }
+
+               var curCenter = this.getCenter();
                if (this._docLayer && this._docLayer._docType === 
'spreadsheet') {
                        // for spreadsheets, when the document is smaller than 
the viewing area
                        // we want it to be glued to the row/column headers 
instead of being centered
@@ -483,14 +485,18 @@ L.Map = L.Evented.extend({
                                var sheetGeom = calcLayer.sheetGeometry;
                                var cellRange = sheetGeom.getViewCellRange();
                                var col = cellRange.columnrange.start, row = 
cellRange.rowrange.start;
-                               var zoomScaleAbs = Math.pow(1.2, (zoom - 
this.options.zoom));
+                               var zoomScaleAbs = this.zoomToFactor(zoom);
+
                                var newTopLeftPx = sheetGeom.getCellRect(col, 
row, zoomScaleAbs).getTopLeft();
-                               var newCenterPx = 
newTopLeftPx.add(this.getSize().divideBy(2)._floor());
-                               var newCenterLatLng = 
this.unproject(newCenterPx, zoom);
+                               var moveByPoint = 
this._getTopLeftPoint(curCenter, zoom).subtract(newTopLeftPx);
+
+                               // move the center (which is in LatLng) by the 
computed amount of pixels
+                               var newCenterLatLng = 
this.unproject(this.project(curCenter, zoom).subtract(moveByPoint), zoom);
+
                                return this.setView(newCenterLatLng, zoom, 
{zoom: options});
                        }
                }
-               var curCenter = this.getCenter();
+
                if (this._docLayer && this._docLayer._visibleCursor && 
this.getBounds().contains(this._docLayer._visibleCursor.getCenter())) {
                        // Calculate new center after zoom. The intent is that 
the caret
                        // position stays the same.
@@ -1671,13 +1677,13 @@ L.Map = L.Evented.extend({
                var pixelOrigin = center && zoom !== undefined ?
                        this._getNewPixelOrigin(center, zoom) :
                        this.getPixelOrigin();
+
                return pixelOrigin.subtract(this._getMapPanePos());
        },
 
        _getNewPixelOrigin: function (center, zoom) {
                var viewHalf = this.getSize()._divideBy(2);
-               // TODO round on display, not calculation to increase precision?
-               return this.project(center, 
zoom)._subtract(viewHalf)._add(this._getMapPanePos())._round();
+               return this.project(center, 
zoom)._subtract(viewHalf)._add(this._getMapPanePos())._floor();
        },
 
        _latLngToNewLayerPoint: function (latlng, zoom, center) {
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to