[Libreoffice-commits] online.git: loleaflet/src

Marco Cecchetti marco.cecchetti at collabora.com
Thu Oct 6 16:49:44 UTC 2016


 loleaflet/src/layer/tile/TileLayer.js |   66 +++++++++++++++++++++++++++-------
 1 file changed, 53 insertions(+), 13 deletions(-)

New commits:
commit fd3aba3be75f028d839ee79662bd9bbf07d098a4
Author: Marco Cecchetti <marco.cecchetti at collabora.com>
Date:   Thu Oct 6 17:52:40 2016 +0200

    loleaflet: page-up/down - visible area is not scrolled as on desktop
    
    Change-Id: Id6a61e93cd195cf731237961c0694685b2d497b4

diff --git a/loleaflet/src/layer/tile/TileLayer.js b/loleaflet/src/layer/tile/TileLayer.js
index e95684b..a5aad09 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -93,6 +93,9 @@ L.TileLayer = L.GridLayer.extend({
 		// Rectangle for cell cursor
 		this._cellCursor =  L.LatLngBounds.createDefault();
 		this._prevCellCursor = L.LatLngBounds.createDefault();
+		this._cellCursorOnPgUp = null;
+		this._cellCursorOnPgDn = null;
+
 		// Position and size of the selection start (as if there would be a cursor caret there).
 
 		// View cursors with viewId to 'cursor info' mapping
@@ -559,11 +562,16 @@ L.TileLayer = L.GridLayer.extend({
 			verticalDirection = sign(this._cellCursor.getNorth() - this._prevCellCursor.getNorth());
 		}
 
+		var onPgUpDn = false;
 		if (!this._isEmptyRectangle(this._cellCursor) && !this._prevCellCursor.equals(this._cellCursor)) {
+			if ((this._cellCursorOnPgUp && this._cellCursorOnPgUp.equals(this._prevCellCursor)) ||
+				(this._cellCursorOnPgDn && this._cellCursorOnPgDn.equals(this._prevCellCursor))) {
+				onPgUpDn = true;
+			}
 			this._prevCellCursor = new L.LatLngBounds(this._cellCursor.getSouthWest(), this._cellCursor.getNorthEast());
 		}
 
-		this._onUpdateCellCursor(horizontalDirection, verticalDirection);
+		this._onUpdateCellCursor(horizontalDirection, verticalDirection, onPgUpDn);
 	},
 
 	_onDocumentRepair: function (textMsg) {
@@ -1115,6 +1123,21 @@ L.TileLayer = L.GridLayer.extend({
 	},
 
 	_postKeyboardEvent: function(type, charcode, keycode) {
+		if (this._prevCellCursor && type === 'input')
+		{
+			if (keycode === 1030) { // PgUp
+				if (this._cellCursorOnPgUp) {
+					return;
+				}
+				this._cellCursorOnPgUp = new L.LatLngBounds(this._prevCellCursor.getSouthWest(), this._prevCellCursor.getNorthEast());
+			}
+			else if (keycode === 1031) { // PgDn
+				if (this._cellCursorOnPgDn) {
+					return;
+				}
+				this._cellCursorOnPgDn = new L.LatLngBounds(this._prevCellCursor.getSouthWest(), this._prevCellCursor.getNorthEast());
+			}
+		}
 		if (this._clientZoom) {
 			// the zoom level has changed
 			this._map._socket.sendMessage('clientzoom ' + this._clientZoom);
@@ -1395,24 +1418,36 @@ L.TileLayer = L.GridLayer.extend({
 		}
 	},
 
-	_onUpdateCellCursor: function (horizontalDirection, verticalDirection) {
+	_onUpdateCellCursor: function (horizontalDirection, verticalDirection, onPgUpDn) {
 		if (this._cellCursor && !this._isEmptyRectangle(this._cellCursor)) {
 			var mapBounds = this._map.getBounds();
 			if (!mapBounds.contains(this._cellCursor)) {
-				var spacingX = Math.abs((this._cellCursor.getEast() - this._cellCursor.getWest())) / 4.0;
-				var spacingY = Math.abs((this._cellCursor.getSouth() - this._cellCursor.getNorth())) / 4.0;
 				var scrollX = 0, scrollY = 0;
-				if (horizontalDirection === -1 && this._cellCursor.getWest() < mapBounds.getWest()) {
-					scrollX = this._cellCursor.getWest() - mapBounds.getWest() - spacingX;
-				} else if (horizontalDirection === 1 && this._cellCursor.getEast() > mapBounds.getEast()) {
-					scrollX = this._cellCursor.getEast() - mapBounds.getEast() + spacingX;
+				if (onPgUpDn) {
+					var mapHalfHeight = (mapBounds.getNorth() - mapBounds.getSouth()) / 2;
+					var cellCursorOnPgUpDn = (this._cellCursorOnPgUp) ? this._cellCursorOnPgUp : this._cellCursorOnPgDn;
+
+					scrollY = this._cellCursor.getNorth() - cellCursorOnPgUpDn.getNorth();
+					if (this._cellCursor.getNorth() > mapBounds.getNorth() + scrollY) {
+						scrollY = (this._cellCursor.getNorth() - mapBounds.getNorth()) + mapHalfHeight;
+					} else if (this._cellCursor.getSouth() < mapBounds.getSouth() + scrollY) {
+						scrollY = (this._cellCursor.getNorth() - mapBounds.getNorth()) + mapHalfHeight;
+					}
 				}
-				if (verticalDirection === 1 && this._cellCursor.getNorth() > mapBounds.getNorth()) {
-					scrollY = this._cellCursor.getNorth() - mapBounds.getNorth() + spacingY;
-				} else if (verticalDirection === -1 && this._cellCursor.getSouth() < mapBounds.getSouth()) {
-					scrollY = this._cellCursor.getSouth() - mapBounds.getSouth() - spacingY;
+				else {
+					var spacingX = Math.abs((this._cellCursor.getEast() - this._cellCursor.getWest())) / 4.0;
+					var spacingY = Math.abs((this._cellCursor.getSouth() - this._cellCursor.getNorth())) / 4.0;
+					if (horizontalDirection === -1 && this._cellCursor.getWest() < mapBounds.getWest()) {
+						scrollX = this._cellCursor.getWest() - mapBounds.getWest() - spacingX;
+					} else if (horizontalDirection === 1 && this._cellCursor.getEast() > mapBounds.getEast()) {
+						scrollX = this._cellCursor.getEast() - mapBounds.getEast() + spacingX;
+					}
+					if (verticalDirection === 1 && this._cellCursor.getNorth() > mapBounds.getNorth()) {
+						scrollY = this._cellCursor.getNorth() - mapBounds.getNorth() + spacingY;
+					} else if (verticalDirection === -1 && this._cellCursor.getSouth() < mapBounds.getSouth()) {
+						scrollY = this._cellCursor.getSouth() - mapBounds.getSouth() - spacingY;
+					}
 				}
-
 				if (scrollX !== 0 || scrollY !== 0) {
 					var newCenter = mapBounds.getCenter();
 					newCenter.lng += scrollX;
@@ -1425,6 +1460,11 @@ L.TileLayer = L.GridLayer.extend({
 				}
 			}
 
+			if (onPgUpDn) {
+				this._cellCursorOnPgUp = null;
+				this._cellCursorOnPgDn = null;
+			}
+
 			if (this._cellCursorMarker) {
 				this._map.removeLayer(this._cellCursorMarker);
 			}


More information about the Libreoffice-commits mailing list