[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