loleaflet/js/toolbar.js | 4 +++- loleaflet/js/w2ui-1.5.rc1.js | 3 +++ loleaflet/src/map/Map.js | 12 +++++++++++- 3 files changed, 17 insertions(+), 2 deletions(-)
New commits: commit 96d1bc34fa30fce6d85c2a39e9896ca8bd3656b9 Author: Tor Lillqvist <t...@collabora.com> AuthorDate: Wed Nov 7 16:10:59 2018 +0200 Commit: Tor Lillqvist <t...@collabora.com> CommitDate: Wed Nov 14 00:17:49 2018 +0100 If we have a visible cursor (caret), try to keep that stationary This fixes at least one visible and annoying behaviour: when you zoom in using the plus button, or the View>Zoom In menu entry, the caret (text insertion cursor) location typically eventually will move outside of the window. Then the window suddenly jumps to another position so that the caret is again visible. After this change, the zooming is much smoother and the caret location stays visible all the time. I could possibly have used the setZoomAround() but found it easier to write the code incrementally actually understanding what I was doing... This does not fix the problem when the text insertion cursor is already out of view when you start zooming in or out. In that case the window still bluntly and unexpectedly jumps to make the location of the text insertion cursor visible. In my opinion, it should not. I was not able to figure out what causes that. Change-Id: I594c4815f8fea9ebb43c0cb491d5167e603d724a Reviewed-on: https://gerrit.libreoffice.org/63027 Reviewed-by: Tor Lillqvist <t...@collabora.com> Tested-by: Tor Lillqvist <t...@collabora.com> diff --git a/loleaflet/js/toolbar.js b/loleaflet/js/toolbar.js index 51b84902c..cbe94ab0b 100644 --- a/loleaflet/js/toolbar.js +++ b/loleaflet/js/toolbar.js @@ -82,7 +82,9 @@ function onClick(e, id, item, subItem) { throw new Error('unknown id: ' + id); } var docLayer = map._docLayer; - map.focus(); + if (id !== 'zoomin' && id !== 'zoomout') { + map.focus(); + } if (item.disabled) { return; } diff --git a/loleaflet/js/w2ui-1.5.rc1.js b/loleaflet/js/w2ui-1.5.rc1.js index 4178a315c..d272cca02 100644 --- a/loleaflet/js/w2ui-1.5.rc1.js +++ b/loleaflet/js/w2ui-1.5.rc1.js @@ -13526,6 +13526,9 @@ var w2prompt = function (label, title, callBack) { // event before var edata = this.trigger({ phase: 'before', type: 'click', target: (id != null ? id : this.name), item: it, object: it, originalEvent: event }); + if (tmp[0] === 'zoomin' || tmp[0] === 'zoomout') { + return; + } if (edata.isCancelled === true) return; var btn = '#tb_'+ this.name +'_item_'+ w2utils.escapeId(it.id) +' table.w2ui-button'; diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js index 63d8fa194..7ed70c2c7 100644 --- a/loleaflet/src/map/Map.js +++ b/loleaflet/src/map/Map.js @@ -270,7 +270,17 @@ L.Map = L.Evented.extend({ // we want it to be glued to the row/column headers instead of being centered this._docLayer._checkSpreadSheetBounds(zoom); } - return this.setView(this.getCenter(), zoom, {zoom: options}); + var curCenter = this.getCenter(); + if (this._docLayer && this._docLayer._visibleCursor && this.getBounds().contains(this._docLayer._visibleCursor.getCenter())) { + // Calculate new center after zoom. The intent is that the caret + // position stays the same. + var zoomScale = 1.0 / this.getZoomScale(zoom, this._zoom); + var caretPos = this._docLayer._visibleCursor.getCenter(); + var newCenter = new L.LatLng(curCenter.lat + (caretPos.lat - curCenter.lat) * (1.0 - zoomScale), + curCenter.lng + (caretPos.lng - curCenter.lng) * (1.0 - zoomScale)); + return this.setView(newCenter, zoom, {zoom: options}); + } + return this.setView(curCenter, zoom, {zoom: options}); }, zoomIn: function (delta, options) { _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits