[Libreoffice-commits] online.git: loleaflet/src
Dennis Francis (via logerrit)
logerrit at kemper.freedesktop.org
Wed Jul 8 14:49:07 UTC 2020
loleaflet/src/layer/tile/CalcTileLayer.js | 118 +++++++++++++++++++++++++++++-
loleaflet/src/layer/tile/GridLayer.js | 28 ++++++-
loleaflet/src/layer/tile/TileLayer.js | 7 +
loleaflet/src/map/Map.js | 13 +++
4 files changed, 164 insertions(+), 2 deletions(-)
New commits:
commit 2bdd07a232e76652e4e4ae1afd4f1a9fd1c2c197
Author: Dennis Francis <dennis.francis at collabora.com>
AuthorDate: Tue Jul 7 12:08:13 2020 +0530
Commit: Dennis Francis <dennis.francis at collabora.com>
CommitDate: Wed Jul 8 16:48:44 2020 +0200
add new methods to Map/GridLayer/TileLayer/CalcTileLayer...
needed to implement split-panes feature in Calc.
Change-Id: I8e221299e951e3c38ed74794573e44a5d3b9e8b2
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/98329
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Tested-by: Jenkins
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 5c80d35f3..4ff7b51ba 100644
--- a/loleaflet/src/layer/tile/CalcTileLayer.js
+++ b/loleaflet/src/layer/tile/CalcTileLayer.js
@@ -835,7 +835,49 @@ L.CalcTileLayer = L.TileLayer.extend({
});
return rectArray;
- }
+ },
+
+ getSnapDocPosX: function (docPosX, unit) {
+ if (!this.options.sheetGeometryDataEnabled) {
+ return docPosX;
+ }
+
+ unit = unit || 'csspixels';
+
+ return this.sheetGeometry.getSnapDocPosX(docPosX, unit);
+ },
+
+ getSnapDocPosY: function (docPosY, unit) {
+ if (!this.options.sheetGeometryDataEnabled) {
+ return docPosY;
+ }
+
+ unit = unit || 'csspixels';
+
+ return this.sheetGeometry.getSnapDocPosY(docPosY, unit);
+ },
+
+ getSplitPanesContext: function () {
+ if (!this.hasSplitPanesSupport()) {
+ return undefined;
+ }
+
+ return this._splitPanesContext;
+ },
+
+ getMaxDocSize: function () {
+
+ if (this.sheetGeometry) {
+ return this.sheetGeometry.getSize('csspixels');
+ }
+
+ return this._twipsToPixels(new L.Point(this._docWidthTwips, this._docHeightTwips));
+ },
+
+ getCursorPos: function () {
+ return this._twipsToPixels(this._cellCursorTwips.getTopLeft());
+ },
+
});
L.MessageStore = L.Class.extend({
@@ -1127,6 +1169,26 @@ L.SheetGeometry = L.Class.extend({
return new L.Bounds(topLeft, topLeft.add(size));
},
+ getCellFromPos: function (pos, unit) {
+ console.assert(pos instanceof L.Point);
+ return new L.Point(
+ this._columns.getIndexFromPos(pos.x, unit),
+ this._rows.getIndexFromPos(pos.y, unit)
+ );
+ },
+
+ // Returns the start position of the column containing posX in the specified unit.
+ // unit must be one of 'csspixels', 'devpixels', 'tiletwips', 'printtwips'
+ getSnapDocPosX: function (posX, unit) {
+ return this._columns.getSnapPos(posX, unit);
+ },
+
+ // Returns the start position of the row containing posY in the specified unit.
+ // unit must be one of 'csspixels', 'devpixels', 'tiletwips', 'printtwips'
+ getSnapDocPosY: function (posY, unit) {
+ return this._rows.getSnapPos(posY, unit);
+ },
+
_testValidity: function (sheetGeomJSON, checkCompleteness) {
if (!sheetGeomJSON.hasOwnProperty('commandName')) {
@@ -1592,6 +1654,60 @@ L.SheetDimension = L.Class.extend({
return posSize.startpos + posSize.size;
},
+
+ isUnitSupported: function (unitName) {
+ return (
+ unitName === 'csspixels' ||
+ unitName === 'devpixels' ||
+ unitName === 'tiletwips' ||
+ unitName === 'printtwips'
+ );
+ },
+
+ getSnapPos: function (pos, unit) {
+ console.assert(typeof pos === 'number', 'pos is not a number');
+ console.assert(this.isUnitSupported(unit), 'unit: ' + unit + ' is not supported');
+
+ var origUnit = unit;
+
+ if (unit === 'devpixels') {
+ pos = (pos * this._twipsPerCSSPixel) / this._devPixelsPerCssPixel;
+ unit = 'tiletwips';
+ }
+ else if (unit === 'csspixels') {
+ pos = pos * this._twipsPerCSSPixel;
+ unit = 'tiletwips';
+ }
+
+ console.assert(unit === 'tiletwips' || unit === 'printtwips', 'wrong unit assumption');
+ var result = (unit === 'tiletwips') ?
+ this._getSpanAndIndexFromTileTwipsPos(pos) :
+ this._getSpanAndIndexFromPrintTwipsPos(pos);
+
+ return this._getElementDataAnyFromSpanByIndex(result.index, result.span, origUnit).startpos;
+ },
+
+ getIndexFromPos: function (pos, unit) {
+ console.assert(typeof pos === 'number', 'pos is not a number');
+ console.assert(this.isUnitSupported(unit), 'unit: ' + unit + ' is not supported');
+
+ if (unit === 'devpixels') {
+ pos = (pos * this._twipsPerCSSPixel) / this._devPixelsPerCssPixel;
+ unit = 'tiletwips';
+ }
+ else if (unit === 'csspixels') {
+ pos = pos * this._twipsPerCSSPixel;
+ unit = 'tiletwips';
+ }
+
+ console.assert(unit === 'tiletwips' || unit === 'printtwips', 'wrong unit assumption');
+ var result = (unit === 'tiletwips') ?
+ this._getSpanAndIndexFromTileTwipsPos(pos) :
+ this._getSpanAndIndexFromPrintTwipsPos(pos);
+
+ return result.index;
+ },
+
});
L.SpanList = L.Class.extend({
diff --git a/loleaflet/src/layer/tile/GridLayer.js b/loleaflet/src/layer/tile/GridLayer.js
index 91dd404e8..08c3fc2ab 100644
--- a/loleaflet/src/layer/tile/GridLayer.js
+++ b/loleaflet/src/layer/tile/GridLayer.js
@@ -1303,7 +1303,33 @@ L.GridLayer = L.Layer.extend({
this._tilesPreFetcher = setInterval(L.bind(this._preFetchTiles, this), interval);
this._prefetchIdle = undefined;
}, this), idleTime);
- }
+ },
+
+ getMaxDocSize: function () {
+ return undefined;
+ },
+
+ getSnapDocPosX: function (docPosPixX) {
+ return docPosPixX;
+ },
+
+ getSnapDocPosY: function (docPosPixY) {
+ return docPosPixY;
+ },
+
+ hasSplitPanesSupport: function () {
+ return false;
+ },
+
+ getSplitPanesContext: function () {
+ return undefined;
+ },
+
+ updateHorizPaneSplitter: function () {
+ },
+
+ updateVertPaneSplitter: function () {
+ },
});
L.gridLayer = function (options) {
diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js
index a53074498..73d2da8a5 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -3442,6 +3442,13 @@ L.TileLayer = L.GridLayer.extend({
return L.Bounds.parseArray(textMsg);
},
+ // Needed for the split-panes feature to determine the active split-pane.
+ // Needs to be implemented by the app specific TileLayer.
+ getCursorPos: function () {
+ console.error('No implementations available for getCursorPos!');
+ return new L.Point(0, 0);
+ },
+
_debugGetTimeArray: function() {
return {count: 0, ms: 0, best: Number.MAX_SAFE_INTEGER, worst: 0, date: 0};
},
diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js
index c3ba4e260..b6027ffc4 100644
--- a/loleaflet/src/map/Map.js
+++ b/loleaflet/src/map/Map.js
@@ -1764,6 +1764,19 @@ L.Map = L.Evented.extend({
this.removeLayer(this.focusLayer);
this.focusLayer = null;
}
+ },
+
+ getSplitPanesContext: function () {
+ if (this._splitPanesContext) {
+ return this._splitPanesContext;
+ }
+
+ var docLayer = this._docLayer;
+ if (docLayer && typeof docLayer.getSplitPanesContext === 'function') {
+ this._splitPanesContext = docLayer.getSplitPanesContext();
+ }
+
+ return this._splitPanesContext;
}
});
More information about the Libreoffice-commits
mailing list