loleaflet/dist/images/handle_end.png |binary loleaflet/dist/images/handle_start.png |binary loleaflet/src/layer/tile/TileLayer.js | 91 ++++++++++++++++++++++++++++++++- 3 files changed, 90 insertions(+), 1 deletion(-)
New commits: commit bf17fde478bd805fdf0c6d31a40f7401b5a3ce81 Author: Henry Castro <[email protected]> Date: Thu Jun 18 21:10:38 2015 -0400 loleaflet: grow / shrink the text selection. diff --git a/loleaflet/dist/images/handle_end.png b/loleaflet/dist/images/handle_end.png new file mode 100644 index 0000000..32b77df Binary files /dev/null and b/loleaflet/dist/images/handle_end.png differ diff --git a/loleaflet/dist/images/handle_start.png b/loleaflet/dist/images/handle_start.png new file mode 100644 index 0000000..cf12a0d Binary files /dev/null and b/loleaflet/dist/images/handle_start.png differ diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js index a84ee45..c2dedba 100644 --- a/loleaflet/src/layer/tile/TileLayer.js +++ b/loleaflet/src/layer/tile/TileLayer.js @@ -62,10 +62,33 @@ L.TileLayer = L.GridLayer.extend({ this._bCursorVisible = true; // Rectangle graphic selection this._aGraphicSelection = new L.LatLngBounds( new L.LatLng(0, 0), new L.LatLng(0, 0) ); + // Position and size of the selection start (as if there would be a cursor caret there). + this._aTextSelectionStart = new L.LatLngBounds( new L.LatLng(0, 0), new L.LatLng(0, 0) ); + // Position and size of the selection end. + this._aTextSelectionEnd = new L.LatLngBounds( new L.LatLng(0, 0), new L.LatLng(0, 0) ); + // Cursor marker this._cursorMarker = null; // Graphic marker this._graphicMarker = null; + // Handle start marker + this._startMarker = L.marker( new L.LatLng(0,0), { + icon: L.icon({ + iconUrl: L.Icon.Default.imagePath + '/handle_start.png', + iconSize: [30, 44], + iconAnchor: [28, 2] + }), + draggable: true + }); + // Handle end marker + this._endMarker = L.marker( new L.LatLng(0,0), { + icon: L.icon({ + iconUrl: L.Icon.Default.imagePath + '/handle_end.png', + iconSize: [30, 44], + iconAnchor: [2, 2] + }), + draggable: true + }); }, _initDocument: function () { @@ -86,6 +109,8 @@ L.TileLayer = L.GridLayer.extend({ this._onMouseEvent, this); this._map.on('viewmode editmode', this._updateEditViewMode, this); this._map.on('drag', this._updateScrollOffset, this); + this._startMarker.on('dragend', this._onDragEndHandler, this); + this._endMarker.on('dragend', this._onDragEndHandler, this); }, getEvents: function () { @@ -168,6 +193,32 @@ L.TileLayer = L.GridLayer.extend({ this._bCursorOverlayVisible = true; this._onUpdateCursor(); } + else if (textMsg.startsWith('textselectionstart:')) { + strTwips = textMsg.match(/\d+/g); + if (strTwips != null) { + 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); + this._aTextSelectionStart = new L.LatLngBounds( + this._twipsToLatLng(topLeftTwips, this._map.getZoom()), + this._twipsToLatLng(bottomRightTwips, this._map.getZoom())); + } + else + this._aTextSelectionStart = new L.LatLngBounds( new L.LatLng(0, 0), new L.LatLng(0, 0) ); + } + else if (textMsg.startsWith('textselectionend:')) { + strTwips = textMsg.match(/\d+/g); + if (strTwips != null) { + 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); + this._aTextSelectionEnd = new L.LatLngBounds( + this._twipsToLatLng(topLeftTwips, this._map.getZoom()), + this._twipsToLatLng(bottomRightTwips, this._map.getZoom())); + } + else + this._aTextSelectionEnd = new L.LatLngBounds( new L.LatLng(0, 0), new L.LatLng(0, 0) ); + } else if (textMsg.startsWith('graphicselection:')) { if (textMsg.match('EMPTY')) { this._aGraphicSelection = new L.LatLngBounds( new L.LatLng(0, 0), new L.LatLng(0, 0) ); @@ -301,6 +352,7 @@ L.TileLayer = L.GridLayer.extend({ this._selections.addLayer(selection); } } + this._onUpdateTextSelection(); } else if (textMsg.startsWith('setpart:')) { var part = parseInt(textMsg.match(/\d+/g)[0]); @@ -536,6 +588,11 @@ L.TileLayer = L.GridLayer.extend({ ' x=' + x + ' y=' + y); }, + _postSelectTextEvent: function(type, x, y) { + this._map.socket.send('selecttext type=' + type + + ' x=' + x + ' y=' + y); + }, + _onMouseEvent: function (e) { if (e.type === 'mousedown') { this._selecting = true; @@ -789,7 +846,7 @@ L.TileLayer = L.GridLayer.extend({ } }, - // Update graphics resize. + // Update dragged graphics selection resize. _onGraphicEdit: function (e) { if ( !e.handle ) return; @@ -802,6 +859,17 @@ L.TileLayer = L.GridLayer.extend({ } }, + // Update dragged text selection. + _onDragEndHandler: function (e) { + var aPos = this._latLngToTwips(e.target.getLatLng()); + + if ( this._startMarker == e.target ) + this._postSelectTextEvent('start', aPos.x, aPos.y); + + if ( this._endMarker == e.target ) + this._postSelectTextEvent('end', aPos.x, aPos.y); + }, + // Update group layer selection handler. _onUpdateGraphicSelection: function () { if (!this._isEmptyRectangle(this._aGraphicSelection)) { @@ -820,6 +888,27 @@ L.TileLayer = L.GridLayer.extend({ this._map.removeLayer(this._graphicMarker); } } + }, + + // Update text selection handlers. + _onUpdateTextSelection: function () { + if (this._selections.getLayers().length !== 0) { + if (!this._isEmptyRectangle(this._aTextSelectionStart)) { + this._startMarker.setLatLng(this._aTextSelectionStart.getSouthWest()); + this._map.addLayer(this._startMarker); + } + + if (!this._isEmptyRectangle(this._aTextSelectionEnd)) { + this._endMarker.setLatLng(this._aTextSelectionEnd.getSouthEast()); + this._map.addLayer(this._endMarker); + } + } + else { + this._aTextSelectionStart = new L.LatLngBounds( new L.LatLng(0, 0), new L.LatLng(0, 0) ); + this._aTextSelectionEnd = new L.LatLngBounds( new L.LatLng(0, 0), new L.LatLng(0, 0) ); + this._map.removeLayer(this._startMarker); + this._map.removeLayer(this._endMarker); + } } }); _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
