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

Reply via email to