[Libreoffice-commits] online.git: Branch 'distro/collabora/collabora-online-2-1' - loleaflet/src

Henry Castro hcastro at collabora.com
Thu Apr 20 08:19:09 UTC 2017


 loleaflet/src/control/Control.Scroll.js     |    1 
 loleaflet/src/layer/AnnotationManager.js    |   34 +++++++++++++++++-----------
 loleaflet/src/layer/tile/GridLayer.js       |   14 ++++++-----
 loleaflet/src/layer/tile/WriterTileLayer.js |    6 ++++
 loleaflet/src/map/Map.js                    |    7 ++++-
 5 files changed, 42 insertions(+), 20 deletions(-)

New commits:
commit 2b49c794e0cf244be23505bada0dc1ebe4921444
Author: Henry Castro <hcastro at collabora.com>
Date:   Wed Apr 19 11:47:45 2017 -0400

    loleaflet: extend document size to scroll annotations
    
    Change-Id: I9581818628c365587a4a115b9d3f0b457b8a6905
    Reviewed-on: https://gerrit.libreoffice.org/36699
    Reviewed-by: Jan Holesovsky <kendy at collabora.com>
    Tested-by: Jan Holesovsky <kendy at collabora.com>

diff --git a/loleaflet/src/control/Control.Scroll.js b/loleaflet/src/control/Control.Scroll.js
index 3d076f34..d47d422e 100644
--- a/loleaflet/src/control/Control.Scroll.js
+++ b/loleaflet/src/control/Control.Scroll.js
@@ -29,6 +29,7 @@ L.Control.Scroll = L.Control.extend({
 			axis: 'yx',
 			theme: 'minimal-dark',
 			scrollInertia: 0,
+			advanced:{autoExpandHorizontalScroll: true}, /* weird bug, it should be false */
 			callbacks:{
 				onScroll: function() {
 					control._onScrollEnd(this);
diff --git a/loleaflet/src/layer/AnnotationManager.js b/loleaflet/src/layer/AnnotationManager.js
index fc7d077c..54f3496b 100644
--- a/loleaflet/src/layer/AnnotationManager.js
+++ b/loleaflet/src/layer/AnnotationManager.js
@@ -6,14 +6,16 @@ L.AnnotationManager = L.Class.extend({
 	options: {
 		marginX: 50,
 		marginY: 10,
-		offset: 5
+		offset: 5,
+		extraSize: L.point(250, 0)
 	},
 
-	initialize: function (map) {
+	initialize: function (map, options) {
 		this._map = map;
 		this._items = [];
 		this._selected = null;
 		this._animation = new L.PosAnimation();
+		L.setOptions(this, options);
 		this._arrow = L.polyline([], {color: 'darkblue', weight: 1});
 		this._map.on('zoomend', this._onAnnotationZoom, this);
 		this._map.on('AnnotationCancel', this._onAnnotationCancel, this);
@@ -99,7 +101,10 @@ L.AnnotationManager = L.Class.extend({
 			this.adjustComment(comment);
 			this._items.push(L.annotation(this._map.options.maxBounds.getSouthEast(), comment).addTo(this._map));
 		}
-		this.layout();
+		if (this._items.length > 0) {
+			this._map._docLayer._updateMaxBounds(true);
+			this.layout();
+		}
 	},
 
 	fillChanges: function(redlines) {
@@ -110,7 +115,10 @@ L.AnnotationManager = L.Class.extend({
 			this.adjustRedLine(changecomment);
 			this._items.push(L.annotation(this._map.options.maxBounds.getSouthEast(), changecomment).addTo(this._map));
 		}
-		this.layout();
+		if (this._items.length > 0) {
+			this._map._docLayer._upateMaxBounds(true);
+			this.layout();
+		}
 	},
 
 	getItem: function (id) {
@@ -190,12 +198,11 @@ L.AnnotationManager = L.Class.extend({
 
 	update: function () {
 		if (this._selected) {
-			var point0, point1, point2;
-			var topRight = this._map.project(this._map.options.maxBounds.getNorthEast());
-			point0 = this._map._docLayer._twipsToPixels(this._selected._data.anchorPos.max);
-			point1 = L.point(point0.x, point0.y + this.options.offset);
-			point2 = L.point(topRight.x, point1.y);
-			this._arrow.setLatLngs([this._map.unproject(point0), this._map.unproject(point1), this._map.unproject(point2)]);
+			var point;
+			var scale = this._map.getZoomScale(this._map.getZoom(), 10);
+			var docRight = this._map.project(this._map.options.maxBounds.getNorthEast()).subtract(this.options.extraSize.multiplyBy(scale));
+			point = this._map._docLayer._twipsToPixels(this._selected._data.anchorPos.min);
+			this._arrow.setLatLngs([this._map.unproject(point), map.unproject(L.point(docRight.x, point.y))]);
 			this._map.addLayer(this._arrow);
 		} else {
 			this._map.removeLayer(this._arrow);
@@ -270,7 +277,8 @@ L.AnnotationManager = L.Class.extend({
 	},
 
 	layout: function (zoom) {
-		var docRight = this._map.project(this._map.options.maxBounds.getNorthEast());
+		var scale = this._map.getZoomScale(this._map.getZoom(), 10);
+		var docRight = this._map.project(this._map.options.maxBounds.getNorthEast()).subtract(this.options.extraSize.multiplyBy(scale));
 		var topRight = docRight.add(L.point(this.options.marginX, this.options.marginY));
 		var latlng, layoutBounds, point, index;
 		if (this._selected) {
@@ -591,6 +599,6 @@ L.Map.include({
 });
 
 
-L.annotationManager = function (map) {
-	return new L.AnnotationManager(map);
+L.annotationManager = function (map, options) {
+	return new L.AnnotationManager(map, options);
 };
diff --git a/loleaflet/src/layer/tile/GridLayer.js b/loleaflet/src/layer/tile/GridLayer.js
index 8076abb0..f61d50c4 100644
--- a/loleaflet/src/layer/tile/GridLayer.js
+++ b/loleaflet/src/layer/tile/GridLayer.js
@@ -363,13 +363,14 @@ L.GridLayer = L.Layer.extend({
 		this._tileHeightTwips = Math.round(this.options.tileHeightTwips * factor);
 	},
 
-	_updateMaxBounds: function (sizeChanged) {
+	_updateMaxBounds: function (sizeChanged, extraSize, options) {
 		if (this._docWidthTwips === undefined || this._docHeightTwips === undefined) {
 			return;
 		}
 		var docPixelLimits = new L.Point(this._docWidthTwips / this.options.tileWidthTwips,
-										 this._docHeightTwips / this.options.tileHeightTwips);
-		docPixelLimits = docPixelLimits.multiplyBy(this._tileSize);
+			this._docHeightTwips / this.options.tileHeightTwips);
+		docPixelLimits = extraSize ? docPixelLimits.multiplyBy(this._tileSize).add(extraSize) :
+			docPixelLimits.multiplyBy(this._tileSize);
 
 		var scale = this._map.getZoomScale(this._map.getZoom(), 10);
 		var topLeft = new L.Point(0, 0);
@@ -379,12 +380,13 @@ L.GridLayer = L.Layer.extend({
 
 		if (this._documentInfo === '' || sizeChanged) {
 			// we just got the first status so we need to center the document
-			this._map.setMaxBounds(new L.LatLngBounds(topLeft, bottomRight));
+			this._map.setMaxBounds(new L.LatLngBounds(topLeft, bottomRight), options);
 		}
 
 		var scrollPixelLimits = new L.Point(this._docWidthTwips / this._tileWidthTwips,
-										 this._docHeightTwips / this._tileHeightTwips);
-		scrollPixelLimits = scrollPixelLimits.multiplyBy(this._tileSize);
+			this._docHeightTwips / this._tileHeightTwips);
+		scrollPixelLimits = extraSize ? scrollPixelLimits.multiplyBy(this._tileSize).add(extraSize.multiplyBy(scale)) :
+			scrollPixelLimits.multiplyBy(this._tileSize);
 		this._docPixelSize = {x: scrollPixelLimits.x, y: scrollPixelLimits.y};
 		this._map.fire('docsize', {x: scrollPixelLimits.x, y: scrollPixelLimits.y});
 	},
diff --git a/loleaflet/src/layer/tile/WriterTileLayer.js b/loleaflet/src/layer/tile/WriterTileLayer.js
index 8e5edcb3..b45f584d 100644
--- a/loleaflet/src/layer/tile/WriterTileLayer.js
+++ b/loleaflet/src/layer/tile/WriterTileLayer.js
@@ -227,5 +227,11 @@ L.WriterTileLayer = L.TileLayer.extend({
 		});
 		this._resetPreFetching(true);
 		this._update();
+	},
+
+	_updateMaxBounds: function (sizeChanged) {
+		var extraSize = this._annotations && this._annotations._items.length > 0 ?
+			this._annotations.options.extraSize : null;
+		L.GridLayer.prototype._updateMaxBounds.call(this, sizeChanged, extraSize, {panInside: false});
 	}
 });
diff --git a/loleaflet/src/map/Map.js b/loleaflet/src/map/Map.js
index af9f7233..3a2ce54d 100644
--- a/loleaflet/src/map/Map.js
+++ b/loleaflet/src/map/Map.js
@@ -278,10 +278,11 @@ L.Map = L.Evented.extend({
 		return this.fire('moveend');
 	},
 
-	setMaxBounds: function (bounds) {
+	setMaxBounds: function (bounds, options) {
 		bounds = L.latLngBounds(bounds);
 
 		this.options.maxBounds = bounds;
+		options = options || {};
 
 		if (!bounds) {
 			return this.off('moveend', this._panInsideMaxBounds);
@@ -291,6 +292,10 @@ L.Map = L.Evented.extend({
 			this._panInsideMaxBounds();
 		}
 
+		if (options.panInside === false) {
+			return this.off('moveend', this._panInsideMaxBounds);
+		}
+
 		return this.on('moveend', this._panInsideMaxBounds);
 	},
 


More information about the Libreoffice-commits mailing list