[Libreoffice-commits] online.git: loleaflet/src
Dennis Francis (via logerrit)
logerrit at kemper.freedesktop.org
Mon Jul 6 16:56:52 UTC 2020
loleaflet/src/layer/tile/CalcTileLayer.js | 51 ++++++++++++++++++++++++++++++
loleaflet/src/layer/tile/TileLayer.js | 20 +++++++++++
2 files changed, 70 insertions(+), 1 deletion(-)
New commits:
commit e1d3941ad9298436cbdf1d0794c15cd69170f9a9
Author: Dennis Francis <dennis.francis at collabora.com>
AuthorDate: Fri Jun 5 16:58:26 2020 +0530
Commit: Dennis Francis <dennis.francis at collabora.com>
CommitDate: Mon Jul 6 18:56:33 2020 +0200
Handle print-twips 'invalidatecursor' msg correctly
Change-Id: I2b35be9228338d35b4aee9209f9b556a6adf5752
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/98148
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 0606a0831..ce5707c32 100644
--- a/loleaflet/src/layer/tile/CalcTileLayer.js
+++ b/loleaflet/src/layer/tile/CalcTileLayer.js
@@ -776,6 +776,26 @@ L.CalcTileLayer = L.TileLayer.extend({
_onCellCursorMsg: function (textMsg) {
L.TileLayer.prototype._onCellCursorMsg.call(this, textMsg);
this._onUpdateCurrentHeader();
+ },
+
+ _getCursorRectangle: function (msgObj) {
+
+ if (!this.options.printTwipsMsgsEnabled) {
+ return L.TileLayer.prototype._getCursorRectangle.call(this, msgObj);
+ }
+
+ if (typeof msgObj !== 'object' || !msgObj.hasOwnProperty('relrect') ||
+ !msgObj.hasOwnProperty('refpoint')) {
+ // This can happen because the kit sends such messages (sometimes)
+ // after doing its own parsing (probably needed for writer/impress?).
+ // These aren't needed for Calc.
+ return undefined;
+ }
+
+ var relrect = this._parseRectangle(msgObj.relrect);
+ var refpoint = this._parsePoint(msgObj.refpoint);
+ refpoint = this.sheetGeometry.getTileTwipsPointFromPrint(refpoint);
+ return relrect.add(refpoint);
}
});
@@ -1006,6 +1026,18 @@ L.SheetGeometry = L.Class.extend({
return this._rows.getGroupsDataInView();
},
+ // accepts a point in print twips coordinates and returns the equivalent point
+ // in tile-twips.
+ getTileTwipsPointFromPrint: function (point) { // (L.Point) -> L.Point
+ if (!(point instanceof L.Point)) {
+ console.error('Bad argument type, expected L.Point');
+ return point;
+ }
+
+ return new L.Point(this._columns.getTileTwipsPosFromPrint(point.x),
+ this._rows.getTileTwipsPosFromPrint(point.y));
+ },
+
// accepts a rectangle in print twips coordinates and returns the equivalent rectangle
// in tile-twips aligned to the cells.
getTileTwipsSheetAreaFromPrint: function (rectangle) { // (L.Bounds) -> L.Bounds
@@ -1389,6 +1421,25 @@ L.SheetDimension = L.Class.extend({
return this._maxIndex;
},
+ // Accepts a position in print twips and returns the corresponding position in tile twips.
+ getTileTwipsPosFromPrint: function (posPT) {
+
+ if (typeof posPT !== 'number') {
+ console.error('Wrong argument type');
+ return;
+ }
+
+ var element = this._getSpanAndIndexFromPrintTwipsPos(posPT);
+ var elementDataTT = this._getElementDataAnyFromSpanByIndex(element.index, element.span, 'tiletwips');
+ var elementDataPT = this._getElementDataAnyFromSpanByIndex(element.index, element.span, 'printtwips');
+
+ var offset = posPT - elementDataPT.startpos;
+ console.assert(offset >= 0, 'offset should not be negative');
+
+ // Preserve any offset from the matching column/row start position.
+ return elementDataTT.startpos + offset;
+ },
+
// Accepts a start and end positions in print twips, and returns the
// corresponding positions in tile twips, by first computing the element range.
getTileTwipsRangeFromPrint: function (posStartPT, posEndPT) {
diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js
index 64c3d9457..6a0d27ba2 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -1247,9 +1247,12 @@ L.TileLayer = L.GridLayer.extend({
_onInvalidateCursorMsg: function (textMsg) {
textMsg = textMsg.substring('invalidatecursor:'.length + 1);
var obj = JSON.parse(textMsg);
+ var rectangle = this._getCursorRectangle(obj);
+ if (rectangle === undefined) {
+ return;
+ }
var modifierViewId = parseInt(obj.viewId);
this._cursorAtMispelledWord = obj.mispelledWord ? Boolean(parseInt(obj.mispelledWord)).valueOf() : false;
- var rectangle = this._getCursorRectangle(obj);
this._visibleCursor = new L.LatLngBounds(
this._twipsToLatLng(rectangle.getTopLeft(), this._map.getZoom()),
this._twipsToLatLng(rectangle.getBottomRight(), this._map.getZoom()));
@@ -3409,6 +3412,21 @@ L.TileLayer = L.GridLayer.extend({
return this._parseRectangle(msgObj.rectangle);
},
+ _parsePoint: function (pointString) {
+ if (typeof pointString !== 'string') {
+ console.error('invalid point string');
+ return undefined;
+ }
+
+ var pointParts = pointString.match(/\d+/g);
+ if (pointParts.length < 2) {
+ console.error('incomplete point');
+ return undefined;
+ }
+
+ return new L.Point(parseInt(pointParts[0]), parseInt(pointParts[1]));
+ },
+
_parseRectangle: function (rectString) {
if (typeof rectString !== 'string') {
More information about the Libreoffice-commits
mailing list