[Libreoffice-commits] online.git: loleaflet/src
Dennis Francis (via logerrit)
logerrit at kemper.freedesktop.org
Mon Jul 6 17:02:26 UTC 2020
loleaflet/src/geometry/Bounds.js | 32 +++++++++++++++-
loleaflet/src/layer/tile/TileLayer.js | 68 +++++++++++++++++-----------------
2 files changed, 65 insertions(+), 35 deletions(-)
New commits:
commit 2a4f781e06170dd9f7ab519ee44aac9f25dd98c3
Author: Dennis Francis <dennis.francis at collabora.com>
AuthorDate: Sat Jun 6 17:30:27 2020 +0530
Commit: Dennis Francis <dennis.francis at collabora.com>
CommitDate: Mon Jul 6 19:02:07 2020 +0200
introduce L.Bounds.parseArray()...
and reuse this to parse all rectangles in text-selection (own/view) message.
Change-Id: Ic6946b2f10d9f642232d540b5974d53edbb774d7
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/98153
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/geometry/Bounds.js b/loleaflet/src/geometry/Bounds.js
index 1c10ea6d4..957e03fe1 100644
--- a/loleaflet/src/geometry/Bounds.js
+++ b/loleaflet/src/geometry/Bounds.js
@@ -16,7 +16,7 @@ L.Bounds = function (a, b) { //(Point, Point) or Point[]
L.Bounds.parse = function (rectString) { // (string) -> Bounds
if (typeof rectString !== 'string') {
- console.error('invalid rectangle string');
+ console.error('invalid input type, expected string');
return undefined;
}
@@ -33,6 +33,29 @@ L.Bounds.parse = function (rectString) { // (string) -> Bounds
return new L.Bounds(refPoint1, refPoint2);
};
+L.Bounds.parseArray = function (rectListString) { // (string) -> Bounds[]
+
+ if (typeof rectListString !== 'string') {
+ console.error('invalid input type, expected string');
+ return undefined;
+ }
+
+ var parts = rectListString.match(/\d+/g);
+ if (parts === null || parts.length < 4) {
+ return [];
+ }
+
+ var rectangles = [];
+ for (var i = 0; (i + 3) < parts.length; i += 4) {
+ var refPoint1 = new L.Point(parseInt(parts[i]), parseInt(parts[i + 1]));
+ var offset = new L.Point(parseInt(parts[i + 2]), parseInt(parts[i + 3]));
+ var refPoint2 = refPoint1.add(offset);
+ rectangles.push(new L.Bounds(refPoint1, refPoint2));
+ }
+
+ return rectangles;
+};
+
L.Bounds.prototype = {
// extend the bounds to contain the given point
extend: function (point) { // (Point)
@@ -127,6 +150,13 @@ L.Bounds.prototype = {
return this;
},
+ getPointArray: function () { // -> Point[]
+ return [
+ this.getBottomLeft(), this.getBottomRight(),
+ this.getTopLeft(), this.getTopRight()
+ ];
+ },
+
toString: function () {
return '[' +
this.min.toString() + ', ' +
diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js
index 0cba2697c..f374c40a6 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -1665,19 +1665,15 @@ L.TileLayer = L.GridLayer.extend({
},
_onTextSelectionMsg: function (textMsg) {
- var strTwips = textMsg.match(/\d+/g);
+
+ var rectArray = this._getTextSelectionRectangles(textMsg);
this._selections.clearLayers();
- if (strTwips != null) {
- var rectangles = [];
- for (var i = 0; i < strTwips.length; i += 4) {
- var topLeftTwips = new L.Point(parseInt(strTwips[i]), parseInt(strTwips[i + 1]));
- var offset = new L.Point(parseInt(strTwips[i + 2]), parseInt(strTwips[i + 3]));
- var bottomRightTwips = topLeftTwips.add(offset);
- var boundsTwips = this._convertToTileTwipsSheetArea(
- new L.Bounds(topLeftTwips, bottomRightTwips));
- rectangles.push([boundsTwips.getBottomLeft(), boundsTwips.getBottomRight(),
- boundsTwips.getTopLeft(), boundsTwips.getTopRight()]);
- }
+
+ if (rectArray.length) {
+
+ var rectangles = rectArray.map(function (rect) {
+ return rect.getPointArray();
+ });
var polygons = L.PolyUtil.rectanglesToPolygons(rectangles, this);
var selection = new L.Polygon(polygons, {
@@ -1706,19 +1702,14 @@ L.TileLayer = L.GridLayer.extend({
return;
}
- var strTwips = obj.selection.match(/\d+/g);
+ var rectArray = this._getTextSelectionRectangles(obj.selection);
this._viewSelections[viewId] = this._viewSelections[viewId] || {};
- if (strTwips != null) {
- var rectangles = [];
- for (var i = 0; i < strTwips.length; i += 4) {
- var topLeftTwips = new L.Point(parseInt(strTwips[i]), parseInt(strTwips[i + 1]));
- var offset = new L.Point(parseInt(strTwips[i + 2]), parseInt(strTwips[i + 3]));
- var bottomRightTwips = topLeftTwips.add(offset);
- var boundsTwips = this._convertToTileTwipsSheetArea(
- new L.Bounds(topLeftTwips, bottomRightTwips));
- rectangles.push([boundsTwips.getBottomLeft(), boundsTwips.getBottomRight(),
- boundsTwips.getTopLeft(), boundsTwips.getTopRight()]);
- }
+
+ if (rectArray.length) {
+
+ var rectangles = rectArray.map(function (rect) {
+ return rect.getPointArray();
+ });
this._viewSelections[viewId].part = viewPart;
this._viewSelections[viewId].polygons = L.PolyUtil.rectanglesToPolygons(rectangles, this);
@@ -1821,12 +1812,11 @@ L.TileLayer = L.GridLayer.extend({
},
_onTextSelectionEndMsg: function (textMsg) {
- var strTwips = textMsg.match(/\d+/g);
- if (strTwips != null && this._map._permission === 'edit') {
- var topLeftTwips = new L.Point(parseInt(strTwips[0]), parseInt(strTwips[1]));
- var offset = new L.Point(parseInt(strTwips[2]), parseInt(strTwips[3]));
- var bottomRightTwips = topLeftTwips.add(offset);
+ var rectangles = this._getTextSelectionRectangles(textMsg);
+ if (rectangles.length && this._map._permission === 'edit') {
+ var topLeftTwips = rectangles[0].getTopLeft();
+ var bottomRightTwips = rectangles[0].getBottomRight();
var oldSelection = this._textSelectionEnd;
this._textSelectionEnd = new L.LatLngBounds(
this._twipsToLatLng(topLeftTwips, this._map.getZoom()),
@@ -1840,11 +1830,11 @@ L.TileLayer = L.GridLayer.extend({
},
_onTextSelectionStartMsg: function (textMsg) {
- var strTwips = textMsg.match(/\d+/g);
- if (strTwips != null && this._map._permission === 'edit') {
- var topLeftTwips = new L.Point(parseInt(strTwips[0]), parseInt(strTwips[1]));
- var offset = new L.Point(parseInt(strTwips[2]), parseInt(strTwips[3]));
- var bottomRightTwips = topLeftTwips.add(offset);
+ var rectangles = this._getTextSelectionRectangles(textMsg);
+
+ if (rectangles.length && this._map._permission === 'edit') {
+ var topLeftTwips = rectangles[0].getTopLeft();
+ var bottomRightTwips = rectangles[0].getBottomRight();
var oldSelection = this._textSelectionStart;
//FIXME: The selection is really not two points, as they can be
//FIXME: on top of each other, but on separate lines. We should
@@ -3412,6 +3402,16 @@ L.TileLayer = L.GridLayer.extend({
return L.Bounds.parse(msgObj.rectangle);
},
+ _getTextSelectionRectangles: function (textMsg) {
+
+ if (typeof textMsg !== 'string') {
+ console.error('invalid text selection message');
+ return [];
+ }
+
+ return L.Bounds.parseArray(textMsg);
+ },
+
_debugGetTimeArray: function() {
return {count: 0, ms: 0, best: Number.MAX_SAFE_INTEGER, worst: 0, date: 0};
},
More information about the Libreoffice-commits
mailing list