loleaflet/css/loleaflet.css                        |   11 +++
 loleaflet/images/table-move-marker.svg             |   56 ++++++++++++++++
 loleaflet/src/dom/Draggable.js                     |    3 
 loleaflet/src/layer/marker/Marker.Drag.js          |    8 +-
 loleaflet/src/layer/tile/TileLayer.TableOverlay.js |   71 ++++++++++++++++++++-
 5 files changed, 141 insertions(+), 8 deletions(-)

New commits:
commit cd5b538c1cf17d69bec5bf29ccf351bec5fefd4c
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Sun Sep 29 23:41:28 2019 +0200
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Wed Oct 2 23:26:38 2019 +0200

    tdf#125565 Added table move marker
    
    Change-Id: Iffa1b969986c9f9b405d5713b56a192a1069645f
    Reviewed-on: https://gerrit.libreoffice.org/79821
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>
    Tested-by: Tomaž Vajngerl <qui...@gmail.com>
    (cherry picked from commit d1eaa895aa6a4b5978ed4038cd6b03aebbaa6107)
    Reviewed-on: https://gerrit.libreoffice.org/79823
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>

diff --git a/loleaflet/css/loleaflet.css b/loleaflet/css/loleaflet.css
index a270af77a..8589c811c 100644
--- a/loleaflet/css/loleaflet.css
+++ b/loleaflet/css/loleaflet.css
@@ -89,6 +89,17 @@
        cursor: row-resize;
 }
 
+.table-move-marker {
+       margin-left: 0px;
+       margin-top: 0px;
+       width: 24px;
+       height: 24px;
+       background-image: url('images/table-move-marker.svg');
+       background-size: 100% 100%;
+       background-repeat: no-repeat;
+       cursor: col-resize;
+}
+
 body {
        margin: 0;
        overflow: hidden;
diff --git a/loleaflet/images/table-move-marker.svg 
b/loleaflet/images/table-move-marker.svg
new file mode 100644
index 000000000..6ab8ef55a
--- /dev/null
+++ b/loleaflet/images/table-move-marker.svg
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   viewBox="0 0 24 24"
+   version="1.1"
+   id="svg4"
+   sodipodi:docname="marker-move.svg"
+   width="24"
+   height="24"
+   inkscape:version="0.92.4 (unknown)">
+  <metadata
+     id="metadata10">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs8" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="3840"
+     inkscape:window-height="2032"
+     id="namedview6"
+     showgrid="false"
+     inkscape:zoom="23.8396"
+     inkscape:cx="38.712406"
+     inkscape:cy="0.44730152"
+     inkscape:window-x="0"
+     inkscape:window-y="54"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg4" />
+  <path
+     d="M 11.999999,0 7.3846151,5.5384611 H 11.076923 V 11.076924 H 5.5384614 
V 7.3846148 L 0,12 5.5384614,16.615385 v -3.692307 h 5.5384616 v 5.538461 H 
7.3846151 L 11.999999,24 16.615384,18.461539 h -3.692308 v -5.538461 h 5.538461 
v 3.692307 L 24,12 18.461537,7.3846148 V 11.076924 H 12.923076 V 5.5384611 h 
3.692308 z"
+     id="path2"
+     inkscape:connector-curvature="0"
+     style="fill:#4d82b8;stroke-width:1" />
+</svg>
diff --git a/loleaflet/src/dom/Draggable.js b/loleaflet/src/dom/Draggable.js
index d9f5485a8..b6cd70954 100644
--- a/loleaflet/src/dom/Draggable.js
+++ b/loleaflet/src/dom/Draggable.js
@@ -137,7 +137,7 @@ L.Draggable = L.Evented.extend({
                L.DomEvent.preventDefault(e);
 
                if (!this._moved) {
-                       this.fire('dragstart');
+                       this.fire('dragstart', {originalEvent: e});
 
                        this._moved = true;
                        this._startPos = 
L.DomUtil.getPosition(this._element).subtract(offset);
@@ -192,6 +192,7 @@ L.Draggable = L.Evented.extend({
                        L.Util.cancelAnimFrame(this._animRequest);
 
                        this.fire('dragend', {
+                               originalEvent: e,
                                distance: 
this._newPos.distanceTo(this._startPos)
                        });
                } else {
diff --git a/loleaflet/src/layer/marker/Marker.Drag.js 
b/loleaflet/src/layer/marker/Marker.Drag.js
index d9f789235..179408e9b 100644
--- a/loleaflet/src/layer/marker/Marker.Drag.js
+++ b/loleaflet/src/layer/marker/Marker.Drag.js
@@ -58,11 +58,11 @@ L.Handler.MarkerDrag = L.Handler.extend({
                this._marker.fire('down', e);
        },
 
-       _onDragStart: function () {
+       _onDragStart: function (e) {
                this._marker
                    .closePopup()
-                   .fire('movestart')
-                   .fire('dragstart');
+                   .fire('movestart', e)
+                   .fire('dragstart', e);
        },
 
        _onDrag: function (e) {
@@ -86,7 +86,7 @@ L.Handler.MarkerDrag = L.Handler.extend({
 
        _onDragEnd: function (e) {
                this._marker
-                   .fire('moveend')
+                   .fire('moveend', e)
                    .fire('dragend', e);
        },
 
diff --git a/loleaflet/src/layer/tile/TileLayer.TableOverlay.js 
b/loleaflet/src/layer/tile/TileLayer.TableOverlay.js
index 7af0d971b..6a7cba29b 100644
--- a/loleaflet/src/layer/tile/TileLayer.TableOverlay.js
+++ b/loleaflet/src/layer/tile/TileLayer.TableOverlay.js
@@ -8,6 +8,7 @@ L.TileLayer.include({
                this._tableColumnMarkers = [];
                this._tableRowMarkers = [];
                this._tableMarkersDragged = false;
+               this._initMoveMarkers();
                this._tableSelectionColumnMarkers = [];
                this._tableSelectionRowMarkers = [];
                this._selectionHeaderDistanceFromTable = 6;
@@ -17,6 +18,17 @@ L.TileLayer.include({
                var point = this._latLngToTwips(this._map.unproject(new 
L.Point(pixel, 0)));
                return point.x;
        },
+       _initMoveMarkers: function () {
+               this._tableMoveMarker = L.marker(new L.LatLng(0, 0), {
+                       icon: L.divIcon({
+                               className: 'table-move-marker',
+                               iconSize: null
+                       }),
+                       draggable: true
+               });
+
+               this._tableMoveMarker.on('dragstart drag dragend', 
this._onTableMoveMarkerDrag, this);
+       },
        _setMarkerPosition: function(marker) {
                var point = this._twipsToLatLng(marker._positionTwips, 
this._map.getZoom());
                point = this._map.project(point);
@@ -108,6 +120,8 @@ L.TileLayer.include({
                }
                this._tableSelectionRowMarkers = [];
 
+               this._map.removeLayer(this._tableMoveMarker);
+
                // Create markers
                if (this._currentTableData.rows && 
this._currentTableData.rows.entries.length > 0 && 
this._currentTableData.columns && this._currentTableData.columns.entries.length 
> 0) {
                        this._tablePositionColumnOffset = 
parseInt(this._currentTableData.columns.tableOffset);
@@ -146,7 +160,6 @@ L.TileLayer.include({
                        this._addSelectionMarkers('column', columnPositions, 
firstRowPosition, lastRowPosition);
 
                        
rowPositions.push(parseInt(this._currentTableData.rows.left));
-
                        for (i = 0; i < 
this._currentTableData.rows.entries.length; i++) {
                                entry = this._currentTableData.rows.entries[i];
                                rowPositions.push(parseInt(entry.position));
@@ -162,9 +175,28 @@ L.TileLayer.include({
                        this._tableRowMarkers.push(markerX);
 
                        this._addSelectionMarkers('row', rowPositions, 
firstColumnPosition, lastColumnPosition);
+
+                       if (this._map.getDocType() === 'presentation' && 
this._currentTableData.rectangle) {
+                               var topLeftTwips = new 
L.Point(parseInt(this._currentTableData.rectangle.x), 
parseInt(this._currentTableData.rectangle.y));
+                               var offset = new 
L.Point(parseInt(this._currentTableData.rectangle.width), 
parseInt(this._currentTableData.rectangle.height));
+                               var bottomRightTwips = topLeftTwips.add(offset);
+
+                               var tableRectangle = new L.LatLngBounds(
+                                               
this._twipsToLatLng(topLeftTwips, this._map.getZoom()),
+                                               
this._twipsToLatLng(bottomRightTwips, this._map.getZoom()));
+                               this._map.addLayer(this._tableMoveMarker);
+
+                               var markerRect;
+                               var movePosition = new 
L.LatLng(tableRectangle.getNorth(), tableRectangle.getWest());
+                               movePosition = this._map.project(movePosition);
+                               markerRect = 
this._tableMoveMarker._icon.getBoundingClientRect();
+                               movePosition = movePosition.subtract(new 
L.Point(markerRect.width + 4, markerRect.height + 4));
+                               movePosition = 
this._map.unproject(movePosition);
+                               this._tableMoveMarker.setLatLng(movePosition);
+                       }
                }
        },
-       _onZoom: function () {
+       _onZoomForTableMarkers: function () {
                this._updateTableMarkers();
        },
        _onTableSelectedMsg: function (textMsg) {
@@ -177,7 +209,7 @@ L.TileLayer.include({
                this._currentTableData = message;
                this._hasTableSelection = this._currentTableData.rows != null 
|| this._currentTableData.columns != null;
                this._updateTableMarkers();
-               this._map.on('zoomend', L.bind(this._onZoom, this));
+               this._map.on('zoomend', L.bind(this._onZoomForTableMarkers, 
this));
        },
        _addSelectionMarkers: function (type, positions, start, end) {
                if (positions.length < 2)
@@ -300,6 +332,39 @@ L.TileLayer.include({
 
                if (e.originalEvent)
                        e.originalEvent.preventDefault();
+       },
+       _createMouseEvent: function (type, inputEvent) {
+               var event = inputEvent;
+               if (inputEvent.type == 'touchstart' || inputEvent.type == 
'touchmove') {
+                       event = inputEvent.touches[0];
+               }
+               else if (inputEvent.type == 'touchend') {
+                       event = inputEvent.changedTouches[0];
+               }
+               
+               var newEvent = document.createEvent('MouseEvents');
+               newEvent.initMouseEvent(
+                       type, true, true, window, 1,
+                       event.screenX, event.screenY,
+                       event.clientX, event.clientY,
+                       false, false, false, false, 0, null
+               );
+               return newEvent;
+       },
+       _onTableMoveMarkerDrag: function (event) {
+               var mouseEvent; 
+               if (event.type == 'dragstart') {
+                       mouseEvent = this._createMouseEvent('mousedown', 
event.originalEvent);
+                       this._graphicMarker._onDragStart(mouseEvent);
+               }
+               else if (event.type == 'drag') {
+                       mouseEvent = this._createMouseEvent('mousemove', 
event.originalEvent);
+                       this._graphicMarker._onDrag(mouseEvent);
+               }
+               else if (event.type == 'dragend') {
+                       mouseEvent = this._createMouseEvent('mouseup', 
event.originalEvent);
+                       this._graphicMarker._onDragEnd(mouseEvent);
+               }
        }
 });
 
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to