loleaflet/css/leaflet.css                  |   13 ++++++++
 loleaflet/src/control/Control.LokDialog.js |   42 +++++++++++++++++++++++++++++
 loleaflet/src/layer/tile/GridLayer.js      |   10 ++++--
 loleaflet/src/layer/tile/TileLayer.js      |    7 ++++
 4 files changed, 68 insertions(+), 4 deletions(-)

New commits:
commit ec2ec241d2ef48e6846f87318e6f176348b2d238
Author:     Marco Cecchetti <marco.cecche...@collabora.com>
AuthorDate: Tue Jan 14 16:02:09 2020 +0100
Commit:     Marco Cecchetti <marco.cecche...@collabora.com>
CommitDate: Thu Feb 6 14:48:00 2020 +0100

    loleaflet: calc: input bar text selection layer
    
    Change-Id: Id143c3c0b5f0bb6a99bd9e8ce7f953f95e3a65bd
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/86791
    Reviewed-by: Marco Cecchetti <marco.cecche...@collabora.com>
    Tested-by: Marco Cecchetti <marco.cecche...@collabora.com>

diff --git a/loleaflet/css/leaflet.css b/loleaflet/css/leaflet.css
index 24592c7b7..04ea07362 100644
--- a/loleaflet/css/leaflet.css
+++ b/loleaflet/css/leaflet.css
@@ -608,6 +608,7 @@ a.leaflet-control-buttons:hover:first-child {
 .leaflet-cursor-container {
        position: absolute;
        text-align: center;
+       pointer-events: none;
        }
 
 .leaflet-cursor {
@@ -682,6 +683,18 @@ div.leaflet-cursor-container:hover > 
.leaflet-cursor-header {
        }
 }
 
+.leaflet-text-selection-container {
+       position: absolute;
+       text-align: center;
+       pointer-events: none;
+}
+
+.leaflet-text-selection {
+       background: #43ACE8B5;
+       pointer-events: none;
+       display: block;
+}
+
 .clipboard-container {
        position: absolute;
        left: 0px;
diff --git a/loleaflet/src/control/Control.LokDialog.js 
b/loleaflet/src/control/Control.LokDialog.js
index 6afb2d064..a16395258 100644
--- a/loleaflet/src/control/Control.LokDialog.js
+++ b/loleaflet/src/control/Control.LokDialog.js
@@ -339,6 +339,24 @@ L.Control.LokDialog = L.Control.extend({
 
                                this._updateDialogCursor(e.id, x, y, height);
                        }
+               } else if (e.action === 'text_selection') {
+                       if (this._isOpen(e.id)) {
+                               var rectangles = [];
+                               if (e.rectangles) {
+                                       var dataList = 
e.rectangles.match(/\d+/g);
+                                       if (dataList != null) {
+                                               for (var i = 0; i < 
dataList.length; i += 4) {
+                                                       var rect = {};
+                                                       rect.x = 
parseInt(dataList[i]);
+                                                       rect.y = 
parseInt(dataList[i + 1]);
+                                                       rect.width = 
parseInt(dataList[i + 2]);
+                                                       rect.height = 
parseInt(dataList[i + 3]);
+                                                       rectangles.push(rect);
+                                               }
+                                       }
+                               }
+                               this._updateTextSelection(e.id, rectangles);
+                       }
                } else if (e.action === 'title_changed') {
                        if (e.title && this._dialogs[parseInt(e.id)]) {
                                this._dialogs[parseInt(e.id)].title = e.title;
@@ -390,6 +408,24 @@ L.Control.LokDialog = L.Control.extend({
                L.DomUtil.addClass(cursor, 'blinking-cursor');
        },
 
+       _updateTextSelection: function(dlgId, rectangles) {
+               var strId = this._toIntId(dlgId);
+               var selections = this._dialogs[strId].textSelection.rectangles;
+               L.DomUtil.empty(selections);
+               if (!rectangles)
+                       return;
+
+               for (var i = 0; i < rectangles.length; ++i) {
+                       var container = L.DomUtil.create('div', 
'leaflet-text-selection-container', selections);
+                       var selection = L.DomUtil.create('div', 
'leaflet-text-selection', container);
+                       var rect = rectangles[i];
+                       L.DomUtil.setStyle(selection, 'width', rect.width + 
'px');
+                       L.DomUtil.setStyle(selection, 'height', rect.height + 
'px');
+                       L.DomUtil.setStyle(container, 'left',  rect.x + 'px');
+                       L.DomUtil.setStyle(container, 'top', rect.y + 'px');
+               }
+       },
+
        focus: function(dlgId, acceptInput) {
                // In case of the sidebar we should be careful about
                // grabbing the focus from the main window.
@@ -568,12 +604,17 @@ L.Control.LokDialog = L.Control.extend({
                L.DomUtil.setStyle(container, 'width', '100%');
                L.DomUtil.setStyle(container, 'height', height + 'px');
 
+               //var eventLayer = L.DomUtil.create('div', '', container);
                // Create the canvas.
                var canvas = L.DomUtil.create('canvas', 'inputbar_canvas', 
container);
                L.DomUtil.setStyle(canvas, 'position', 'absolute');
                this._setCanvasWidthHeight(canvas, width, height);
                canvas.id = strId + '-canvas';
 
+               // create the text selections layer
+               var textSelectionLayer = L.DomUtil.create('div', 
'inputbar_selection_layer', container);
+               var selections =  L.DomUtil.create('div', 
'inputbar_selections', textSelectionLayer);
+
                // Don't show the inputbar until we get the contents.
                $(container).parent().hide();
 
@@ -588,6 +629,7 @@ L.Control.LokDialog = L.Control.extend({
                        width: width,
                        height: height,
                        cursor: null,
+                       textSelection: {rectangles: selections},
                        child: null, // never used for inputbar
                        title: null  // never used for inputbar
                };
diff --git a/loleaflet/src/layer/tile/GridLayer.js 
b/loleaflet/src/layer/tile/GridLayer.js
index 4ff2d4877..a69741462 100644
--- a/loleaflet/src/layer/tile/GridLayer.js
+++ b/loleaflet/src/layer/tile/GridLayer.js
@@ -716,10 +716,12 @@ L.GridLayer = L.Layer.extend({
                        this._map.fire('updatescrolloffset', {x: 0, y: 0, 
updateHeaders: false});
                        this._map.scrollTop(0);
                        this._map.scrollLeft(0);
-                       this._cellCursor = L.LatLngBounds.createDefault();
-                       this._prevCellCursor = new L.LatLngBounds(new 
L.LatLng(0, 0), new L.LatLng(1, 1));
-                       this._cellCursorXY = new L.Point(-1, -1);
-                       this._prevCellCursorXY = new L.Point(0, 0);
+
+                       // 2020-01-14 if no side effect occurs remove this code 
later
+                       // this._cellCursor = L.LatLngBounds.createDefault();
+                       // this._prevCellCursor = new L.LatLngBounds(new 
L.LatLng(0, 0), new L.LatLng(1, 1));
+                       // this._cellCursorXY = new L.Point(-1, -1);
+                       // this._prevCellCursorXY = new L.Point(0, 0);
                }
        },
 
diff --git a/loleaflet/src/layer/tile/TileLayer.js 
b/loleaflet/src/layer/tile/TileLayer.js
index 0b4926a43..d3c012bcd 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -1958,6 +1958,9 @@ L.TileLayer = L.GridLayer.extend({
                this._graphicSelection = new L.LatLngBounds(new L.LatLng(0, 0), 
new L.LatLng(0, 0));
                this._onUpdateGraphicSelection();
                this._cellCursor = null;
+               this._cellCursorXY = null;
+               this._prevCellCursor = null;
+               this._prevCellCursorXY = null;
                this._onUpdateCellCursor();
                if (this._map._clip)
                        this._map._clip.clearSelection();
@@ -2776,6 +2779,10 @@ L.TileLayer = L.GridLayer.extend({
        _onUpdateCellCursor: function (horizontalDirection, verticalDirection, 
onPgUpDn) {
                this._onUpdateCellResizeMarkers();
                if (this._cellCursor && 
!this._isEmptyRectangle(this._cellCursor)) {
+                       if (this._map.dialog._calcInputBar && 
!this._cellCursorXY.equals(this._prevCellCursorXY)) {
+                               var inputBarId = 
this._map.dialog._calcInputBar.id;
+                               
this._map.dialog._updateTextSelection(inputBarId);
+                       }
                        var mapBounds = this._map.getBounds();
                        if (!mapBounds.contains(this._cellCursor) && 
!this._cellCursorXY.equals(this._prevCellCursorXY)) {
                                var scrollX = 0, scrollY = 0;
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to