loleaflet/dist/leaflet.css                   |    7 +-
 loleaflet/src/core/LOUtil.js                 |   21 ++++++
 loleaflet/src/core/Socket.js                 |    3 
 loleaflet/src/layer/marker/Cursor.js         |   12 ++-
 loleaflet/src/layer/tile/CalcTileLayer.js    |    1 
 loleaflet/src/layer/tile/ImpressTileLayer.js |    1 
 loleaflet/src/layer/tile/TileLayer.js        |   86 ++++++++++++++++++++++++++-
 loleaflet/src/layer/tile/WriterTileLayer.js  |    1 
 8 files changed, 126 insertions(+), 6 deletions(-)

New commits:
commit 3fdd2cb15126e0f482e41b2505404a5b7950d38c
Author: Pranav Kant <pran...@collabora.co.uk>
Date:   Sun Aug 7 18:56:43 2016 +0530

    loleaflet: Handle 'viewcursorvisible' message

diff --git a/loleaflet/src/layer/tile/TileLayer.js 
b/loleaflet/src/layer/tile/TileLayer.js
index 0adf21c..f76128b 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -354,6 +354,9 @@ L.TileLayer = L.GridLayer.extend({
                else if (textMsg.startsWith('invalidateviewcursor:')) {
                        this._onInvalidateViewCursorMsg(textMsg);
                }
+               else if (textMsg.startsWith('viewcursorvisible:')) {
+                       this._onViewCursorVisibleMsg(textMsg);
+               }
        },
 
        _onCommandValuesMsg: function (textMsg) {
@@ -542,6 +545,23 @@ L.TileLayer = L.GridLayer.extend({
                this._onUpdateViewCursor(viewId);
        },
 
+       _onViewCursorVisibleMsg: function(textMsg) {
+               textMsg = textMsg.substring('viewcursorvisible:'.length + 1);
+               var obj = JSON.parse(textMsg);
+               var viewId = parseInt(obj.viewId);
+
+               // Ignore if viewid=0 or is same as ours
+               if (viewId === 0 || viewId === this._viewId) {
+                       return;
+               }
+
+               if (typeof this._viewCursors[viewId] !== 'undefined') {
+                       this._viewCursors[viewId].visible = (obj.visible === 
'true');
+               }
+
+               this._onUpdateViewCursor(viewId);
+       },
+
        _onPartPageRectanglesMsg: function (textMsg) {
                textMsg = textMsg.substring(19);
                var pages = textMsg.split(';');
commit d307315f758ff26f16545077cc6a9fd6c1434b6e
Author: Pranav Kant <pran...@collabora.co.uk>
Date:   Sun Aug 7 18:51:25 2016 +0530

    loleaflet: Ignore irrelevant view messages coming from server
    
    View callbacks with viewid = 0 seems strange; it always lurks
    around but is never attached to any view.
    
    Also, view callbacks with viewid = our own viewid should not be
    sent from the server, lets ignore them for now.

diff --git a/loleaflet/src/layer/tile/TileLayer.js 
b/loleaflet/src/layer/tile/TileLayer.js
index 3374f02..0adf21c 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -522,6 +522,11 @@ L.TileLayer = L.GridLayer.extend({
                var obj = JSON.parse(textMsg);
                var viewId = parseInt(obj.viewId);
 
+               // Ignore if viewid=0 or is same as ours
+               if (viewId === 0 || viewId === this._viewId) {
+                       return;
+               }
+
                var strTwips = obj.rectangle.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]));
commit 6ff4cd69f0740604a8fdd5a5fa5e5aea2edb1b69
Author: Pranav Kant <pran...@collabora.co.uk>
Date:   Sun Aug 7 18:49:47 2016 +0530

    loleaflet: Handle 'invalidateviewcursor' and show colored cursors
    
    ... for different views based on view ids received from the
    server.

diff --git a/loleaflet/src/layer/tile/TileLayer.js 
b/loleaflet/src/layer/tile/TileLayer.js
index 15d95b6..3374f02 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -95,6 +95,10 @@ L.TileLayer = L.GridLayer.extend({
                this._prevCellCursor = L.LatLngBounds.createDefault();
                // Position and size of the selection start (as if there would 
be a cursor caret there).
 
+               // View cursors with viewId to 'cursor info' mapping
+               // Eg: 1: {rectangle: 'x, y, w, h', visible: false}
+               this._viewCursors = {};
+
                this._lastValidPart = -1;
                // Cursor marker
                this._cursorMarker = null;
@@ -347,6 +351,9 @@ L.TileLayer = L.GridLayer.extend({
                else if (textMsg.startsWith('contextmenu:')) {
                        this._onContextMenuMsg(textMsg);
                }
+               else if (textMsg.startsWith('invalidateviewcursor:')) {
+                       this._onInvalidateViewCursorMsg(textMsg);
+               }
        },
 
        _onCommandValuesMsg: function (textMsg) {
@@ -510,6 +517,26 @@ L.TileLayer = L.GridLayer.extend({
                this._onUpdateCursor();
        },
 
+       _onInvalidateViewCursorMsg: function (textMsg) {
+               textMsg = textMsg.substring('invalidateviewcursor:'.length + 1);
+               var obj = JSON.parse(textMsg);
+               var viewId = parseInt(obj.viewId);
+
+               var strTwips = obj.rectangle.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);
+
+               this._viewCursors[viewId] = this._viewCursors[viewId] || {};
+               this._viewCursors[viewId].bounds = new L.LatLngBounds(
+                       this._twipsToLatLng(topLeftTwips, this._map.getZoom()),
+                       this._twipsToLatLng(bottomRightTwips, 
this._map.getZoom())),
+               this._viewCursors[viewId].part = obj.part;
+               this._viewCursors[viewId].visible = true;
+
+               this._onUpdateViewCursor(viewId);
+       },
+
        _onPartPageRectanglesMsg: function (textMsg) {
                textMsg = textMsg.substring(19);
                var pages = textMsg.split(';');
@@ -883,6 +910,38 @@ L.TileLayer = L.GridLayer.extend({
                }
        },
 
+       // Update colored non-blinking view cursor
+       _onUpdateViewCursor: function(viewId) {
+               if (typeof this._viewCursors[viewId] !== 'object' ||
+                   typeof this._viewCursors[viewId].bounds !== 'object') {
+                       return;
+               }
+
+               var pixBounds = 
L.bounds(this._map.latLngToLayerPoint(this._viewCursors[viewId].bounds.getSouthWest()),
+                                        
this._map.latLngToLayerPoint(this._viewCursors[viewId].bounds.getNorthEast()));
+               var viewCursorPos = 
this._viewCursors[viewId].bounds.getNorthWest();
+               var viewCursorMarker = this._viewCursors[viewId].marker;
+               var viewCursorVisible = this._viewCursors[viewId].visible;
+
+               if (viewCursorVisible && 
!this._isEmptyRectangle(this._viewCursors[viewId].bounds)) {
+                       if (viewCursorMarker) {
+                               this._map.removeLayer(viewCursorMarker);
+                       }
+                       var viewCursorOptions = {
+                               color: L.LOUtil.getViewIdHexColor(viewId),
+                               blink: false
+                       };
+                       viewCursorMarker = L.cursor(viewCursorPos, 
viewCursorOptions);
+                       this._map.addLayer(viewCursorMarker);
+                       
viewCursorMarker.setSize(pixBounds.getSize().multiplyBy(this._map.getZoomScale(this._map.getZoom())));
+
+               } else if (viewCursorMarker) {
+                       this._map.removeLayer(this._viewCursors[viewId].marker);
+               }
+
+               this._viewCursors[viewId].marker = viewCursorMarker;
+       },
+
        // Update dragged graphics selection resize.
        _onGraphicEdit: function (e) {
                if (!e.handle) { return; }
commit 0284235da150ddf6dac70c0add2f304deaa5f0fe
Author: Pranav Kant <pran...@collabora.co.uk>
Date:   Sun Aug 7 18:49:16 2016 +0530

    loleaflet: Support for non-blinking colored cursors

diff --git a/loleaflet/src/layer/marker/Cursor.js 
b/loleaflet/src/layer/marker/Cursor.js
index f5a7033..faa5177 100644
--- a/loleaflet/src/layer/marker/Cursor.js
+++ b/loleaflet/src/layer/marker/Cursor.js
@@ -49,8 +49,14 @@ L.Cursor = L.Layer.extend({
 
        _initLayout: function () {
                this._container = L.DomUtil.create('div', 
'leaflet-cursor-container');
-               // a black rectangle
-               this._cursor = L.DomUtil.create('div', 'leaflet-cursor 
blinking-cursor', this._container);
+               this._cursor = L.DomUtil.create('div', 'leaflet-cursor', 
this._container);
+               if (this.options.blink) {
+                       L.DomUtil.addClass(this._cursor, 'blinking-cursor');
+               }
+
+               if (this.options.color) {
+                       L.DomUtil.setStyle(this._cursor, 'background', 
this.options.color);
+               }
 
                L.DomEvent
                        .disableClickPropagation(this._cursor)
diff --git a/loleaflet/src/layer/tile/TileLayer.js 
b/loleaflet/src/layer/tile/TileLayer.js
index f2dfdef..15d95b6 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -872,7 +872,7 @@ L.TileLayer = L.GridLayer.extend({
                                this._map.removeLayer(this._cursorMarker);
                        }
 
-                       this._cursorMarker = L.cursor(cursorPos);
+                       this._cursorMarker = L.cursor(cursorPos, {blink: true});
                        this._map.addLayer(this._cursorMarker);
                        
this._cursorMarker.setSize(pixBounds.getSize().multiplyBy(
                                                
this._map.getZoomScale(this._map.getZoom())));
commit 726b213dcfcf0d2a6feff39774d6f9e87bd0e90a
Author: Pranav Kant <pran...@collabora.co.uk>
Date:   Sun Aug 7 18:43:15 2016 +0530

    loleaflet: Add viewId to color mapping; using colordata.hxx

diff --git a/loleaflet/src/core/LOUtil.js b/loleaflet/src/core/LOUtil.js
index cbdce2a..8b11379 100644
--- a/loleaflet/src/core/LOUtil.js
+++ b/loleaflet/src/core/LOUtil.js
@@ -3,6 +3,21 @@
  */
 
 L.LOUtil = {
+       // Based on core.git's colordata.hxx: 
COL_AUTHOR1_DARK...COL_AUTHOR9_DARK
+       // consisting of arrays of RGB values
+       // Maybe move the color logic to separate file when it becomes complex
+       darkColors: [
+               [198, 146, 0],
+               [6,  70, 162],
+               [87, 157,  28],
+               [105,  43, 157],
+               [197,   0,  11],
+               [0, 128, 128],
+               [140, 132,  0],
+               [53,  85, 107],
+               [209, 118,   0]
+       ],
+
        startSpinner: function (spinnerCanvas, spinnerSpeed) {
                var spinnerInterval;
                spinnerCanvas.width = 50;
@@ -26,5 +41,11 @@ L.LOUtil = {
                }, 1);
 
                return spinnerInterval;
+       },
+
+       getViewIdHexColor: function(viewId) {
+               var color = this.darkColors[(viewId + 1) % 
this.darkColors.length];
+               var hex = color[2] | (color[1] << 8) | (color[0] << 16);
+               return '#' + ('000000' + hex.toString(16)).slice(-6);
        }
 };
commit 8dd2987871906e1af3e4c5e463f8f075284a74bc
Author: Pranav Kant <pran...@collabora.co.uk>
Date:   Sun Aug 7 18:39:20 2016 +0530

    loleaflet: Store viewId of the view received in 'status:' command

diff --git a/loleaflet/src/core/Socket.js b/loleaflet/src/core/Socket.js
index 2f258d3..87f1ce6 100644
--- a/loleaflet/src/core/Socket.js
+++ b/loleaflet/src/core/Socket.js
@@ -381,6 +381,9 @@ L.Socket = L.Class.extend({
                        else if (tokens[i].substring(0, 5) === 'font=') {
                                command.font = 
window.decodeURIComponent(tokens[i].substring(5));
                        }
+                       else if (tokens[i].substring(0, 7) === 'viewid=') {
+                               command.viewid = tokens[i].substring(7);
+                       }
                }
                if (command.tileWidth && command.tileHeight && 
this._map._docLayer) {
                        var defaultZoom = this._map.options.zoom;
diff --git a/loleaflet/src/layer/tile/CalcTileLayer.js 
b/loleaflet/src/layer/tile/CalcTileLayer.js
index 9b067f3..2641a12 100644
--- a/loleaflet/src/layer/tile/CalcTileLayer.js
+++ b/loleaflet/src/layer/tile/CalcTileLayer.js
@@ -147,6 +147,7 @@ L.CalcTileLayer = L.TileLayer.extend({
                        this._docType = command.type;
                        this._parts = command.parts;
                        this._selectedPart = command.selectedPart;
+                       this._viewId = command.viewid;
                        var mapSize = this._map.getSize();
                        var width = this._docWidthTwips / this._tileWidthTwips 
* this._tileSize;
                        var height = this._docHeightTwips / 
this._tileHeightTwips * this._tileSize;
diff --git a/loleaflet/src/layer/tile/ImpressTileLayer.js 
b/loleaflet/src/layer/tile/ImpressTileLayer.js
index 2d8e8c0..8f2358a 100644
--- a/loleaflet/src/layer/tile/ImpressTileLayer.js
+++ b/loleaflet/src/layer/tile/ImpressTileLayer.js
@@ -119,6 +119,7 @@ L.ImpressTileLayer = L.TileLayer.extend({
                        this._updateMaxBounds(true);
                        this._documentInfo = textMsg;
                        this._parts = command.parts;
+                       this._viewId = command.viewid;
                        this._selectedPart = command.selectedPart;
                        this._resetPreFetching(true);
                        this._update();
diff --git a/loleaflet/src/layer/tile/WriterTileLayer.js 
b/loleaflet/src/layer/tile/WriterTileLayer.js
index a42b67d..ab604aa 100644
--- a/loleaflet/src/layer/tile/WriterTileLayer.js
+++ b/loleaflet/src/layer/tile/WriterTileLayer.js
@@ -122,6 +122,7 @@ L.WriterTileLayer = L.TileLayer.extend({
                        this._parts = 1;
                        this._currentPage = command.selectedPart;
                        this._pages = command.parts;
+                       this._viewId = parseInt(command.viewid);
                        this._map.fire('pagenumberchanged', {
                                currentPage: this._currentPage,
                                pages: this._pages,
commit d144d4ac4765252f84c6b1cf67ef67b34ad7b378
Author: Pranav Kant <pran...@collabora.co.uk>
Date:   Sun Aug 7 15:56:40 2016 +0530

    loleaflet: Separate blinking-cursor property from cursor
    
    ... so that it is possibe to make cursor non-blinking whenever we
    want. This will be used in subsequent commits for view cursors.

diff --git a/loleaflet/dist/leaflet.css b/loleaflet/dist/leaflet.css
index e3c12b3..eeeb24c 100644
--- a/loleaflet/dist/leaflet.css
+++ b/loleaflet/dist/leaflet.css
@@ -559,15 +559,18 @@ a.leaflet-control-buttons:hover:first-child {
        border: 1px solid #666;
        }
 
-.leaflet-cursor {
+.leaflet-cursor-container {
        position: absolute;
        text-align: center;
        }
 
-.blinking-cursor {
+.leaflet-cursor {
        background: black;
        width: 2px;
        pointer-events: none;
+       }
+
+.blinking-cursor {
        -webkit-animation: 1s blink step-end 0s infinite;
        -moz-animation: 1s blink step-end 0s infinite;
        -ms-animation: 1s blink step-end 0s infinite;
diff --git a/loleaflet/src/layer/marker/Cursor.js 
b/loleaflet/src/layer/marker/Cursor.js
index 4fb32c2..f5a7033 100644
--- a/loleaflet/src/layer/marker/Cursor.js
+++ b/loleaflet/src/layer/marker/Cursor.js
@@ -48,9 +48,9 @@ L.Cursor = L.Layer.extend({
        },
 
        _initLayout: function () {
-               this._container = L.DomUtil.create('div', 'leaflet-cursor');
+               this._container = L.DomUtil.create('div', 
'leaflet-cursor-container');
                // a black rectangle
-               this._cursor = L.DomUtil.create('div', 'blinking-cursor', 
this._container);
+               this._cursor = L.DomUtil.create('div', 'leaflet-cursor 
blinking-cursor', this._container);
 
                L.DomEvent
                        .disableClickPropagation(this._cursor)
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to