loleaflet/src/control/Parts.js | 11 +++++----- loleaflet/src/layer/tile/CalcTileLayer.js | 32 +++++++++++++++++++++--------- 2 files changed, 29 insertions(+), 14 deletions(-)
New commits: commit e6814552df0f4a7a8910e898013b8ca3b112df35 Author: Dennis Francis <dennis.fran...@collabora.com> AuthorDate: Mon Jul 13 13:57:53 2020 +0530 Commit: Dennis Francis <dennis.fran...@collabora.com> CommitDate: Mon Jul 13 12:10:43 2020 +0200 request sheet-geometry data just after sending setclientpart to core... instead of doing it on getting a 'setpart' back from core. This is helpful in the following respects: 1. On new sheet insert, setpart is not sent by the core. 2. On sheet-switch, new sheet's messages (cursor) can arrive before we get sheet-geometry-data because it is requested only after setpart which is too late. 3. save almost all of the round-trip time for sheet-geometry data. Change-Id: Id6464be72c2ff6e8dce006d8e7ba3141b8d6cf1b Reviewed-on: https://gerrit.libreoffice.org/c/online/+/98621 Tested-by: Jenkins Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> Reviewed-by: Dennis Francis <dennis.fran...@collabora.com> diff --git a/loleaflet/src/control/Parts.js b/loleaflet/src/control/Parts.js index d112557f7..3fc5c0961 100644 --- a/loleaflet/src/control/Parts.js +++ b/loleaflet/src/control/Parts.js @@ -32,6 +32,12 @@ L.Map.include({ this._socket.sendMessage('resetselection'); } + // If this wasn't triggered from the server, + // then notify the server of the change. + if (!external) { + this._socket.sendMessage('setclientpart part=' + docLayer._selectedPart); + } + this.fire('updateparts', { selectedPart: docLayer._selectedPart, selectedParts: docLayer._selectedParts, @@ -39,11 +45,6 @@ L.Map.include({ docType: docLayer._docType }); - // If this wasn't triggered from the server, - // then notify the server of the change. - if (!external) { - this._socket.sendMessage('setclientpart part=' + docLayer._selectedPart); - } docLayer.eachView(docLayer._viewCursors, docLayer._onUpdateViewCursor, docLayer); docLayer.eachView(docLayer._cellViewCursors, docLayer._onUpdateCellViewCursor, docLayer); docLayer.eachView(docLayer._graphicViewMarkers, docLayer._onUpdateGraphicViewSelection, docLayer); diff --git a/loleaflet/src/layer/tile/CalcTileLayer.js b/loleaflet/src/layer/tile/CalcTileLayer.js index dfe2fd9e2..36d8d43af 100644 --- a/loleaflet/src/layer/tile/CalcTileLayer.js +++ b/loleaflet/src/layer/tile/CalcTileLayer.js @@ -234,6 +234,9 @@ L.CalcTileLayer = (L.Browser.mobile ? L.TileLayer : L.CanvasTileLayer).extend({ _onUpdateParts: function (e) { if (typeof this._prevSelectedPart === 'number' && !e.source) { + this._clearMsgReplayStore(); + this.refreshViewData(undefined, false /* compatDataSrcOnly */, true /* sheetGeometryChanged */); + this._switchSplitPanesContext(); this.hideAnnotations(this._prevSelectedPart); this.showAnnotations(); } @@ -445,9 +448,7 @@ L.CalcTileLayer = (L.Browser.mobile ? L.TileLayer : L.CanvasTileLayer).extend({ _onSetPartMsg: function (textMsg) { var part = parseInt(textMsg.match(/\d+/g)[0]); if (!this.isHiddenPart(part)) { - this._clearMsgReplayStore(); - this._switchSplitPanesContext(); - this.refreshViewData(undefined, false /* compatDataSrcOnly */, true /* sheetGeometryChanged */); + this.refreshViewData(undefined, true /* compatDataSrcOnly */, false /* sheetGeometryChanged */); } }, @@ -723,10 +724,10 @@ L.CalcTileLayer = (L.Browser.mobile ? L.TileLayer : L.CanvasTileLayer).extend({ this._sheetGeomFirstWait = false; this.sheetGeometry = new L.SheetGeometry(jsonMsgObj, this._tileWidthTwips, this._tileHeightTwips, - this._tileSize, this._tilePixelScale); + this._tileSize, this._tilePixelScale, this._selectedPart); } else { - this.sheetGeometry.update(jsonMsgObj); + this.sheetGeometry.update(jsonMsgObj, /* checkCompleteness */ false, this._selectedPart); } this._replayPrintTwipsMsgs(); @@ -1073,17 +1074,19 @@ L.SheetGeometry = L.Class.extend({ // all flags (ie 'columns', 'rows', 'sizes', 'hidden', 'filtered', // 'groups') enabled. initialize: function (sheetGeomJSON, tileWidthTwips, tileHeightTwips, - tileSizeCSSPixels, dpiScale) { + tileSizeCSSPixels, dpiScale, part) { if (typeof sheetGeomJSON !== 'object' || typeof tileWidthTwips !== 'number' || typeof tileHeightTwips !== 'number' || typeof tileSizeCSSPixels !== 'number' || - typeof dpiScale !== 'number') { + typeof dpiScale !== 'number' || + typeof part !== 'number') { console.error('Incorrect constructor argument types or missing required arguments'); return; } + this._part = -1; this._columns = new L.SheetDimension(); this._rows = new L.SheetDimension(); this._unoCommand = '.uno:SheetGeometryData'; @@ -1092,10 +1095,10 @@ L.SheetGeometry = L.Class.extend({ this.setTileGeometryData(tileWidthTwips, tileHeightTwips, tileSizeCSSPixels, dpiScale, false /* update position info ?*/); - this.update(sheetGeomJSON, /* checkCompleteness */ true); + this.update(sheetGeomJSON, /* checkCompleteness */ true, part); }, - update: function (sheetGeomJSON, checkCompleteness) { + update: function (sheetGeomJSON, checkCompleteness, part) { if (!this._testValidity(sheetGeomJSON, checkCompleteness)) { return false; @@ -1116,12 +1119,23 @@ L.SheetGeometry = L.Class.extend({ } } + if (updateOK) { + console.assert(typeof part === 'number', 'part must be a number'); + if (part !== this._part) { + this._part = part; + } + } + this._columns.setMaxIndex(+sheetGeomJSON.maxtiledcolumn); this._rows.setMaxIndex(+sheetGeomJSON.maxtiledrow); return updateOK; }, + getPart: function () { + return this._part; + }, + setTileGeometryData: function (tileWidthTwips, tileHeightTwips, tileSizeCSSPixels, dpiScale, updatePositions) { this._columns.setTileGeometryData(tileWidthTwips, tileSizeCSSPixels, dpiScale, updatePositions); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits