loleaflet/src/layer/tile/ImpressTileLayer.js |   40 ++++++++++++++++++++++++++-
 loleaflet/src/layer/tile/TileLayer.js        |    2 -
 2 files changed, 40 insertions(+), 2 deletions(-)

New commits:
commit 25bb03c3a640cf95a4914ba6fbd6a676bcc76034
Author: Henry Castro <hcas...@collabora.com>
Date:   Tue Apr 25 20:33:07 2017 -0400

    loleaflet: fix zooms and scroll annotations of the layer Impress
    
    Change-Id: I4785551ebac4e8f0c1f877a00b651e7ac1203e67
    Reviewed-on: https://gerrit.libreoffice.org/36967
    Reviewed-by: Jan Holesovsky <ke...@collabora.com>
    Tested-by: Jan Holesovsky <ke...@collabora.com>

diff --git a/loleaflet/src/layer/tile/ImpressTileLayer.js 
b/loleaflet/src/layer/tile/ImpressTileLayer.js
index 5a1b73aa..ee7f2ae5 100644
--- a/loleaflet/src/layer/tile/ImpressTileLayer.js
+++ b/loleaflet/src/layer/tile/ImpressTileLayer.js
@@ -4,6 +4,7 @@
  */
 
 L.ImpressTileLayer = L.TileLayer.extend({
+       extraSize: L.point(290, 0),
 
        newAnnotation: function (comment) {
                var annotation = L.annotation(this._map.getCenter(), comment, 
{noMenu: true}).addTo(this._map);
@@ -12,6 +13,7 @@ L.ImpressTileLayer = L.TileLayer.extend({
        },
 
        beforeAdd: function (map) {
+               map.on('zoomend', this._onAnnotationZoom, this);
                map.on('updateparts', this.onUpdateParts, this);
                map.on('AnnotationCancel', this.onAnnotationCancel, this);
                map.on('AnnotationReply', this.onReplyClick, this);
@@ -37,6 +39,18 @@ L.ImpressTileLayer = L.TileLayer.extend({
                }
        },
 
+       hasAnnotations: function (part) {
+               var annotations = this._annotations[this._partHashes[part]];
+               return annotations && annotations.length > 0;
+       },
+
+       updateDocBounds: function (count, extraSize) {
+               var annotations = 
this._annotations[this._partHashes[this._selectedPart]];
+               if (annotations && annotations.length === count) {
+                       this._map._docLayer._updateMaxBounds(true, extraSize);
+               }
+       },
+
        onAdd: function (map) {
                L.TileLayer.prototype.onAdd.call(this, map);
                this._annotations = {};
@@ -98,6 +112,10 @@ L.ImpressTileLayer = L.TileLayer.extend({
                this._map.focus();
        },
 
+       _onAnnotationZoom: function (e) {
+               this.layoutAnnotations();
+       },
+
        onReplyClick: function (e) {
                var comment = {
                        Id: {
@@ -127,6 +145,9 @@ L.ImpressTileLayer = L.TileLayer.extend({
        onUpdateParts: function (e) {
                if (typeof this._prevSelectedPart === 'number') {
                        this.hideAnnotations(this._prevSelectedPart);
+                       if (this.hasAnnotations(this._selectedPart)) {
+                               this._map._docLayer._updateMaxBounds(true);
+                       }
                        this.layoutAnnotations();
                }
        },
@@ -144,7 +165,10 @@ L.ImpressTileLayer = L.TileLayer.extend({
 
        layoutAnnotations: function () {
                var annotations = 
this._annotations[this._partHashes[this._selectedPart]];
-               var topRight = 
this._map.latLngToLayerPoint(this._map.options.maxBounds.getNorthEast()).add(L.point(this.options.marginX,
 this.options.marginY));
+               var scale = this._map.getZoomScale(this._map.getZoom(), 10);
+               var topRight = 
this._map.latLngToLayerPoint(this._map.options.maxBounds.getNorthEast())
+                       .subtract(this.extraSize.multiplyBy(scale))
+                       .add(L.point(this.options.marginX, 
this.options.marginY));
                var bounds, annotation;
                for (var index in annotations) {
                        annotation = annotations[index];
@@ -190,6 +214,9 @@ L.ImpressTileLayer = L.TileLayer.extend({
                                
this._annotations[comment.parthash].push(L.annotation(this._map.options.maxBounds.getSouthEast(),
 comment).addTo(this._map));
                        }
                        this._topAnnotation = 0;
+                       if (this.hasAnnotations(this._selectedPart)) {
+                               this._map._docLayer._updateMaxBounds(true);
+                       }
                        this.layoutAnnotations();
                } else {
                        L.TileLayer.prototype._onCommandValuesMsg.call(this, 
textMsg);
@@ -205,10 +232,12 @@ L.ImpressTileLayer = L.TileLayer.extend({
                                }
                                
this._annotations[obj.comment.parthash].push(L.annotation(this._map.options.maxBounds.getSouthEast(),
 obj.comment).addTo(this._map));
                                this._topAnnotation = 
Math.min(this._topAnnotation, 
this._annotations[this._partHashes[this._selectedPart]].length - 1);
+                               this.updateDocBounds(1, this.extraSize);
                                this.layoutAnnotations();
                        } else if (obj.comment.action === 'Remove') {
                                this.removeAnnotation(obj.comment.id);
                                this._topAnnotation = 
Math.min(this._topAnnotation, 
this._annotations[this._partHashes[this._selectedPart]].length - 1);
+                               this.updateDocBounds(0);
                                this.layoutAnnotations();
                        } else if (obj.comment.action === 'Modify') {
                                var modified = 
this.getAnnotation(obj.comment.id);
@@ -379,5 +408,14 @@ L.ImpressTileLayer = L.TileLayer.extend({
                                partNames: this._partHashes
                        });
                }
+       },
+
+       _updateMaxBounds: function (sizeChanged, extraSize) {
+               if (!extraSize) {
+                       var annotations = this._annotations && this._partHashes 
&& this._selectedPart !== undefined ?
+                               
this._annotations[this._partHashes[this._selectedPart]] : [];
+                       extraSize = annotations && annotations.length > 0 ? 
this.extraSize : null;
+               }
+               L.GridLayer.prototype._updateMaxBounds.call(this, sizeChanged, 
extraSize, {panInside: false});
        }
 });
diff --git a/loleaflet/src/layer/tile/TileLayer.js 
b/loleaflet/src/layer/tile/TileLayer.js
index dd2331d6..6f7159e1 100644
--- a/loleaflet/src/layer/tile/TileLayer.js
+++ b/loleaflet/src/layer/tile/TileLayer.js
@@ -49,7 +49,7 @@ L.TileLayer = L.GridLayer.extend({
                detectRetina: true,
                crossOrigin: false,
                previewInvalidationTimeout: 1000,
-               marginX: 50,
+               marginX: 10,
                marginY: 10
        },
 
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to