[Libreoffice-commits] online.git: Branch 'distro/collabora/collabora-online-4' - loleaflet/build loleaflet/src
Libreoffice Gerrit user
logerrit at kemper.freedesktop.org
Tue May 14 14:41:32 UTC 2019
loleaflet/build/deps.js | 5 +
loleaflet/src/core/Socket.js | 3
loleaflet/src/layer/BackgroundColor.js | 101 +++++++++++++++++++++++++++++++++
3 files changed, 108 insertions(+), 1 deletion(-)
New commits:
commit 9381af462ee8e067ec5411049d9b62580ed1c7dd
Author: Iván Sánchez Ortega <ivan.sanchez at collabora.com>
AuthorDate: Wed May 8 16:48:05 2019 +0200
Commit: Michael Meeks <michael.meeks at collabora.com>
CommitDate: Tue May 14 16:41:13 2019 +0200
loleaflet: Background color for Calc
This adds a new L.Layer, L.CalcBackground, which reacts to 'statechange' websocket
messages, and sets the background style of the Leaflet container to match
the color of the current Calc sheet.
Change-Id: I33d39c86fb52708419756b85660d7be450c91eba
Reviewed-on: https://gerrit.libreoffice.org/72295
Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
Tested-by: Michael Meeks <michael.meeks at collabora.com>
diff --git a/loleaflet/build/deps.js b/loleaflet/build/deps.js
index c64a05bdf..dec7435ab 100644
--- a/loleaflet/build/deps.js
+++ b/loleaflet/build/deps.js
@@ -69,7 +69,10 @@ var deps = {
},
CalcTileLayer: {
- src: ['layer/tile/CalcTileLayer.js'],
+ src: [
+ 'layer/tile/CalcTileLayer.js',
+ 'layer/BackgroundColor.js',
+ ],
desc: 'Calc tile layer.',
deps: ['TileLayer']
},
diff --git a/loleaflet/src/core/Socket.js b/loleaflet/src/core/Socket.js
index 290016fcd..275ea8720 100644
--- a/loleaflet/src/core/Socket.js
+++ b/loleaflet/src/core/Socket.js
@@ -824,6 +824,9 @@ L.Socket = L.Class.extend({
tileHeightTwips: tileHeightTwips,
docType: command.type
});
+ if (!this._map.options.backgroundLayer) {
+ this._map.options.backgroundLayer = new L.CalcBackground().addTo(this._map);
+ }
}
else {
if (command.type === 'presentation' &&
diff --git a/loleaflet/src/layer/BackgroundColor.js b/loleaflet/src/layer/BackgroundColor.js
new file mode 100644
index 000000000..2e0198e28
--- /dev/null
+++ b/loleaflet/src/layer/BackgroundColor.js
@@ -0,0 +1,101 @@
+/*
+ * A Leaflet layer that just sets the background colour of the map.
+ *
+ * This just changes the map container's style, and does not
+ * implement pane positioning - adding two instances of this
+ * layer to a map at a time will conflict.
+ */
+
+L.BackgroundColor = L.Layer.extend({
+ options: {
+ /*
+ * The background color that the map shall take when this layer is
+ * added to it. Must be a string containing a CSS color value, as per
+ * https://developer.mozilla.org/en-US/docs/Web/CSS/color_value
+ *
+ * The default is Leaflet's default grey.
+ */
+ color: '#dfdfdf'
+ },
+
+ onAdd: function() {
+ return this.setColor(this.options.color);
+ },
+
+ remove: function() {
+ delete this._map.style.background;
+ },
+
+ /*
+ * Expects a CSS color value. Sets the map background to that color, and
+ * resets the 'color' option of this layer.
+ */
+ setColor: function(cssColor) {
+ this.options.color = cssColor;
+ if (this._map) {
+ this._map.getContainer().style.background = cssColor;
+ }
+ return this;
+ }
+});
+
+// Libreoffice-specific functionality follows.
+
+/*
+ * A L.BackgroundColor that automatically resets its color
+ * based on 'statechange' messages from lowsd.
+ */
+L.CalcBackground = L.BackgroundColor.extend({
+ onAdd: function(map) {
+ map.on('commandstatechanged', this._onStateChanged, this);
+ return this.setColor(this.options.color);
+ },
+
+ remove: function() {
+ delete this._map.style.background;
+ this._map.off('commandstatechanged', this._onStateChanged, this);
+ },
+
+ // State flag for the heuristic algorithm used in _onStateChanged
+ _bgCanBeSet: true,
+
+ _onStateChanged: function(ev) {
+ // There are lots of statechange events - but there is no indication of what the
+ // background color of a Calc sheet is. In order to discern the background color
+ // there is a heuristic method which uses three statechange events: BackgroundColor,
+ // RowColSelCount and StatusPosDoc.
+ // A BackgroundColor statechange will be regarded as a change of background
+ // color only if:
+ // - There has been no previous RowColSelCount statechange (first load),
+ // - There has been a StatusPosDoc (sheet change) before the last RowColSelCount,
+ // - The last RowColSelCount affected all the sheet (re-applying color).
+
+ if (ev.commandName === '.uno:StatusDocPos') {
+ this._bgCanBeSet = true;
+ return;
+ }
+ if (ev.commandName === '.uno:RowColSelCount') {
+ this._bgCanBeSet = ev.state === '1048576 rows, 1024 columns selected';
+ return;
+ }
+ if (ev.commandName !== '.uno:BackgroundColor') {
+ return;
+ }
+
+ // Given an integer coming from a websocket message from UNO,
+ // calculate a '#RRGGBB' string for the corresponding CSS color
+ // Special value: -1 means 'no fill' which translates to white background in Calc
+ var color;
+ if (ev.state === '-1') {
+ color = 'white';
+ } else {
+ color =
+ '#' +
+ parseInt(ev.state)
+ .toString(16)
+ .padStart(6, '0');
+ }
+
+ this.setColor(color);
+ }
+});
More information about the Libreoffice-commits
mailing list