[Libreoffice-commits] online.git: loleaflet/src
Libreoffice Gerrit user
logerrit at kemper.freedesktop.org
Mon May 20 08:39:16 UTC 2019
loleaflet/src/layer/tile/TileLayer.js | 70 +++++++++++++++++++++++++++++++++-
1 file changed, 68 insertions(+), 2 deletions(-)
New commits:
commit 3c3770e37038ae6a94dba2f439e5992e3e026546
Author: Marco Cecchetti <marco.cecchetti at collabora.com>
AuthorDate: Wed Apr 10 22:49:45 2019 +0200
Commit: Marco Cecchetti <mrcekets at gmail.com>
CommitDate: Mon May 20 10:38:55 2019 +0200
loleaflet: correct resize of rotated images in Writer.
A new format for selection extra properties has been introduced:
"x, y, width, height, angle, { property=value, ... }"
Change-Id: Ic03dbaba0af1b5c84bcd0f02587e907e799f66d8
Reviewed-on: https://gerrit.libreoffice.org/70570
Reviewed-by: Marco Cecchetti <mrcekets at gmail.com>
Tested-by: Marco Cecchetti <mrcekets at gmail.com>
diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js
index 75a28a3d0..6878229a6 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -649,7 +649,8 @@ L.TileLayer = L.GridLayer.extend({
this._graphicSelection = new L.LatLngBounds(new L.LatLng(0, 0), new L.LatLng(0, 0));
}
else {
- var strTwips = textMsg.match(/\d+/g);
+ var data = textMsg.split('{');
+ var strTwips = data[0].match(/\d+/g);
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);
@@ -657,7 +658,24 @@ L.TileLayer = L.GridLayer.extend({
this._graphicSelection = new L.LatLngBounds(
this._twipsToLatLng(topLeftTwips, this._map.getZoom()),
this._twipsToLatLng(bottomRightTwips, this._map.getZoom()));
- this._graphicSelectionAngle = (strTwips.length === 5) ? parseInt(strTwips[4]) : 0;
+ this._graphicSelectionAngle = (strTwips.length > 4) ? parseInt(strTwips[4]) : 0;
+ this._isSelectionWriterGraphic = false;
+
+ if (data.length > 1) {
+ var properties = data[1].slice(0, -1).split(',');
+
+ var i;
+ for (i = 0; i < properties.length; ++i) {
+ var property = properties[i].split('=');
+ if (property.length !== 2)
+ continue;
+ var name = property[0].trim();
+ var value = property[1].trim() === 'true';
+ if (name === 'WriterGraphic') {
+ this._isSelectionWriterGraphic = value;
+ }
+ }
+ }
// Workaround for tdf#123874. For some reason the handling of the
// shapeselectioncontent messages that we get back causes the WebKit process
// to crash on iOS.
@@ -1930,6 +1948,39 @@ L.TileLayer = L.GridLayer.extend({
if (newPos.y < 0)
newPos.y = 0;
+ // For an image in Writer we need to send the size of the image not of the selection box.
+ // So if the image has been rotated we need to compute its size starting from the size of the selection
+ // rectangle and the rotation angle.
+ if (this._isSelectionWriterGraphic) {
+ if (this._isGraphicAngleDivisibleBy90()) {
+ var k = this._graphicSelectionAngle / 9000;
+ // if k is even we have nothing to do since the rotation is 0 or 180.
+ // when k is odd we need to swap width and height.
+ if (k % 2 !== 0) {
+ var temp = newSize.x;
+ newSize.x = newSize.y;
+ newSize.y = temp;
+ }
+ }
+ else {
+ // let's say that the selection rectangle width is subdivided by a corner of the rotated image
+ // in 2 segments of length s and t and the selection rectangle height is subdivided by a corner
+ // of the rotated image in 2 segments of length u and v, so we get the following system of equations:
+ // s + t = w, u + v = h,
+ // l = u/t, l = s/v, where l = tan(rotation angle)
+ var w = newSize.x;
+ var h = newSize.y;
+ var angle = Math.PI * this._graphicSelectionAngle / 18000;
+ var c = Math.abs(Math.cos(angle));
+ var s = Math.abs(Math.sin(angle));
+ var l = s / c;
+ var u = (l * w - l * l * h) / (1 - l * l);
+ var v = h - u;
+ newSize.x = Math.round(u / s);
+ newSize.y = Math.round(v / c);
+ }
+ }
+
// fill params for uno command
var param = {
TransformPosX: {
@@ -1951,6 +2002,21 @@ L.TileLayer = L.GridLayer.extend({
};
this._map.sendUnoCommand('.uno:TransformDialog ', param);
+
+ if (this._isSelectionWriterGraphic) {
+ param = {
+ TransformPosX: {
+ type: 'long',
+ value: newPos.x
+ },
+ TransformPosY: {
+ type: 'long',
+ value: newPos.y
+ }
+ };
+ this._map.sendUnoCommand('.uno:TransformDialog ', param);
+ }
+
this._graphicMarker.isDragged = false;
this._graphicMarker.dragHorizDir = undefined;
this._graphicMarker.dragVertDir = undefined;
More information about the Libreoffice-commits
mailing list