[Libreoffice-commits] online.git: loleaflet/src
Henry Castro
hcastro at collabora.com
Thu Jun 11 16:52:11 PDT 2015
loleaflet/src/layer/tile/GridLayer.js | 8 ++--
loleaflet/src/layer/tile/TileLayer.js | 59 ++++++++++++++++++++++------------
2 files changed, 43 insertions(+), 24 deletions(-)
New commits:
commit 21035bf438d71797cdb8840cf04e46ff466cca0b
Author: Henry Castro <hcastro at collabora.com>
Date: Thu Jun 11 19:48:08 2015 -0400
loleaflet: Mimic gtktiledviewer editing
gtktiledviewer is the reference code to enable
editing for calc, writer and impress.
diff --git a/loleaflet/src/layer/tile/GridLayer.js b/loleaflet/src/layer/tile/GridLayer.js
index acbf219..c2d8b25 100644
--- a/loleaflet/src/layer/tile/GridLayer.js
+++ b/loleaflet/src/layer/tile/GridLayer.js
@@ -715,15 +715,15 @@ L.GridLayer = L.Layer.extend({
coords.y * this._tileHeightTwips);
},
- _twipsToLatLng: function (twips) {
+ _twipsToLatLng: function (twips, zoom) {
var pixels = new L.Point(
twips.x / this._tileWidthTwips * this._tileSize,
twips.y / this._tileHeightTwips * this._tileSize);
- return this._map.unproject(pixels);
+ return this._map.unproject(pixels, zoom);
},
- _latLngToTwips: function (latLng) {
- var pixels = this._map.project(latLng);
+ _latLngToTwips: function (latLng, zoom) {
+ var pixels = this._map.project(latLng, zoom);
return new L.Point(
Math.round(pixels.x / this._tileSize * this._tileWidthTwips),
Math.round(pixels.y / this._tileSize * this._tileHeightTwips));
diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js
index 70750ec..253e9b0 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -52,8 +52,15 @@ L.TileLayer = L.GridLayer.extend({
this.on('tileunload', this._onTileRemove);
}
this._documentInfo = '';
- this._cursorVisible = false;
- this._cursorBounds = null;
+ // View or edit mode.
+ this._bEdit = false;
+ // Position and size of the visible cursor.
+ this._aVisibleCursor = new L.LatLngBounds( new L.LatLng(0, 0), new L.LatLng(0, 0) );
+ // Cursor overlay is visible or hidden (for blinking).
+ this._bCursorOverlayVisible = false;
+ // Cursor is visible or hidden (e.g. for graphic selection).
+ this._bCursorVisible = true;
+ // Marker cursor
this._cursorMarker = null;
},
@@ -81,8 +88,8 @@ L.TileLayer = L.GridLayer.extend({
var events = {
viewreset: this._viewReset,
moveend: this._move,
- keypress: this._onKeyPress,
- keyup: this._onKeyUp
+ keypress: this._signalKey,
+ keyup: this._signalKey
};
if (!this.options.updateWhenIdle) {
@@ -142,7 +149,7 @@ L.TileLayer = L.GridLayer.extend({
if (textMsg.startsWith('cursorvisible:')) {
var command = textMsg.match('cursorvisible: true');
- this._cursorVisible = command == undefined ? false : true;
+ this._bCursorVisible = command == undefined ? false : true;
this._onUpdateCursor();
}
else if (textMsg.startsWith('invalidatecursor:')) {
@@ -150,9 +157,10 @@ L.TileLayer = L.GridLayer.extend({
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._cursorBounds = new L.LatLngBounds(
- this._twipsToLatLng(topLeftTwips),
- this._twipsToLatLng(bottomRightTwips));
+ this._aVisibleCursor = new L.LatLngBounds(
+ this._twipsToLatLng(topLeftTwips, this._map.getZoom()),
+ this._twipsToLatLng(bottomRightTwips, this._map.getZoom()));
+ this._bCursorOverlayVisible = true;
this._onUpdateCursor();
}
else if (textMsg.startsWith('invalidatetiles:')) {
@@ -513,6 +521,8 @@ L.TileLayer = L.GridLayer.extend({
this._postMouseEvent('buttondown',this._mouseDownPos.x,
this._mouseDownPos.y, 1);
}, this), 500);
+
+ this._bEdit = true;
}
else if (e.type === 'mouseup') {
this._selecting = false;
@@ -525,6 +535,8 @@ L.TileLayer = L.GridLayer.extend({
}
var mousePos = this._latLngToTwips(e.latlng);
this._postMouseEvent('buttonup', mousePos.x, mousePos.y, 1);
+
+ this._bEdit = true;
}
else if (e.type === 'mousemove' && this._selecting) {
if (this._holdStart) {
@@ -708,34 +720,41 @@ L.TileLayer = L.GridLayer.extend({
return unoKeyCode;
},
- _onKeyPress: function (e) {
- if (this._cursorMarker) {
+ // Receives a key press or release event.
+ _signalKey: function (e) {
+ if ( !this._bEdit )
+ return;
+
+ if ( e.type === 'keyup' )
+ this._postKeyboardEvent('up', e.originalEvent.charCode, this._toUNOKeyCode(e.originalEvent.keyCode));
+ else
this._postKeyboardEvent('input', e.originalEvent.charCode, this._toUNOKeyCode(e.originalEvent.keyCode));
- }
},
- _onKeyUp: function (e) {
- if (this._cursorMarker) {
- this._postKeyboardEvent('up', e.originalEvent.charCode, this._toUNOKeyCode(e.originalEvent.keyCode));
- }
+ // Is rRectangle empty?
+ _isEmptyRectangle: function (aBounds) {
+ return aBounds.getSouthWest().equals( new L.LatLng(0,0) ) && aBounds.getNorthEast().equals( new L.LatLng(0,0) )
},
+ // Update cursor layer (blinking cursor).
_onUpdateCursor: function () {
- if (this._cursorVisible && this._cursorBounds ) {
+ if (this._bEdit && this._bCursorVisible && this._bCursorOverlayVisible && !this._isEmptyRectangle(this._aVisibleCursor)) {
if (this._cursorMarker)
this._map.removeLayer(this._cursorMarker);
- var pixBounds = L.bounds(this._map.latLngToLayerPoint(this._cursorBounds.getSouthWest()),
- this._map.latLngToLayerPoint(this._cursorBounds.getNorthEast()));
- var latBounds = L.rectangle(this._cursorBounds).getLatLngs();
+ var pixBounds = L.bounds(this._map.latLngToLayerPoint(this._aVisibleCursor.getSouthWest()),
+ this._map.latLngToLayerPoint(this._aVisibleCursor.getNorthEast()));
+ var latBounds = L.rectangle(this._aVisibleCursor).getLatLngs();
this._cursorMarker = L.cursor(latBounds[2], {color: 'red'});
this._map.addLayer(this._cursorMarker);
this._cursorMarker.setSize(pixBounds.getSize());
}
else {
- if (this._cursorMarker)
+ if (this._cursorMarker) {
this._map.removeLayer(this._cursorMarker);
+ this._bCursorOverlayVisible = false;
+ }
}
}
});
More information about the Libreoffice-commits
mailing list