[Libreoffice-commits] online.git: loleaflet/src
Dennis Francis (via logerrit)
logerrit at kemper.freedesktop.org
Mon Jul 6 16:53:57 UTC 2020
loleaflet/src/layer/tile/CalcTileLayer.js | 56 ++++++++++++++++++++++++++++++
1 file changed, 56 insertions(+)
New commits:
commit 4527f5587a8edc8fe2be87fb594f4b650dd42ad4
Author: Dennis Francis <dennis.francis at collabora.com>
AuthorDate: Thu May 28 07:02:09 2020 +0530
Commit: Dennis Francis <dennis.francis at collabora.com>
CommitDate: Mon Jul 6 18:53:39 2020 +0200
Use sheet-geometry data to prevent view area overflow...
when zooming close to bottom/right of a sheet. The bug is due to the
view centering logic on zoom without the knowledge of sheet area
hard-limits and is present in online master without the calc-coordinates
cleanup work.
Change-Id: Ic3b9f2873c4a22365a87a08a2ff89d8584a16581
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/98145
Tested-by: Jenkins
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Reviewed-by: Dennis Francis <dennis.francis at collabora.com>
diff --git a/loleaflet/src/layer/tile/CalcTileLayer.js b/loleaflet/src/layer/tile/CalcTileLayer.js
index f37caa6c5..0606a0831 100644
--- a/loleaflet/src/layer/tile/CalcTileLayer.js
+++ b/loleaflet/src/layer/tile/CalcTileLayer.js
@@ -441,11 +441,42 @@ L.CalcTileLayer = L.TileLayer.extend({
this.sheetGeometry.setTileGeometryData(this._tileWidthTwips, this._tileHeightTwips,
this._tileSize, this._tilePixelScale);
}
+ this._restrictDocumentSize();
this._replayPrintTwipsMsgs();
this.refreshViewData();
this._map._socket.sendMessage('commandvalues command=.uno:ViewAnnotationsPosition');
},
+ _restrictDocumentSize: function () {
+
+ if (!this.sheetGeometry) {
+ return;
+ }
+
+ var maxDocSize = this.sheetGeometry.getSize('tiletwips');
+ var newDocWidth = Math.min(maxDocSize.x, this._docWidthTwips);
+ var newDocHeight = Math.min(maxDocSize.y, this._docHeightTwips);
+
+ var shouldRestrict = (newDocWidth !== this._docWidthTwips ||
+ newDocHeight !== this._docHeightTwips);
+
+ if (!shouldRestrict) {
+ return;
+ }
+
+ var newWidthPx = newDocWidth / this._tileWidthTwips * this._tileSize;
+ var newHeightPx = newDocHeight / this._tileHeightTwips * this._tileSize;
+
+ var topLeft = this._map.unproject(new L.Point(0, 0));
+ var bottomRight = this._map.unproject(new L.Point(newWidthPx, newHeightPx));
+ this._map.setMaxBounds(new L.LatLngBounds(topLeft, bottomRight));
+
+ this._docPixelSize = {x: newWidthPx, y: newHeightPx};
+ this._docWidthTwips = newDocWidth;
+ this._docHeightTwips = newDocHeight;
+ this._map.fire('docsize', {x: newWidthPx, y: newHeightPx});
+ },
+
_onUpdateCurrentHeader: function() {
this._map.fire('updatecurrentheader', this._getCursorPosSize());
},
@@ -995,6 +1026,13 @@ L.SheetGeometry = L.Class.extend({
return new L.Bounds(topLeft, bottomRight);
},
+ // Returns full sheet size as L.Point in the given unit.
+ // unit must be one of 'csspixels', 'devpixels', 'tiletwips', 'printtwips'
+ getSize: function (unit) {
+ return new L.Point(this._columns.getSize(unit),
+ this._rows.getSize(unit));
+ },
+
_testValidity: function (sheetGeomJSON, checkCompleteness) {
if (!sheetGeomJSON.hasOwnProperty('commandName')) {
@@ -1195,6 +1233,15 @@ L.SheetDimension = L.Class.extend({
return this._getElementDataFromSpanByIndex(index, span, useDevicePixels);
},
+ getElementDataAny: function (index, unitName) {
+ var span = this._visibleSizes.getSpanDataByIndex(index);
+ if (span === undefined) {
+ return undefined;
+ }
+
+ return this._getElementDataAnyFromSpanByIndex(index, span, unitName);
+ },
+
// returns element pos/size in css pixels by default.
_getElementDataFromSpanByIndex: function (index, span, useDevicePixels) {
return this._getElementDataAnyFromSpanByIndex(index, span,
@@ -1371,6 +1418,15 @@ L.SheetDimension = L.Class.extend({
endpos: endPos
};
},
+
+ getSize: function (unit) {
+ var posSize = this.getElementDataAny(this._maxIndex, unit);
+ if (!posSize) {
+ return undefined;
+ }
+
+ return posSize.startpos + posSize.size;
+ },
});
L.SpanList = L.Class.extend({
More information about the Libreoffice-commits
mailing list