# HG changeset patch # User Alexandre Segura # Date 1487689460 -3600 # Node ID a0caf91c8374335d21c8782482596c075cc2e8c5 # Parent 625ac8b8bb87d2b460e07899748f309614eb00ff Improve zoom, simplify code. diff -r 625ac8b8bb87 -r a0caf91c8374 src_js/iconolab-bundle/src/components/editor/Canvas.vue --- a/src_js/iconolab-bundle/src/components/editor/Canvas.vue Tue Feb 21 15:34:27 2017 +0100 +++ b/src_js/iconolab-bundle/src/components/editor/Canvas.vue Tue Feb 21 16:04:20 2017 +0100 @@ -98,6 +98,39 @@ this.reset(); if (!this.annotation) { return; } this.loadAnnotation(); + }, + scale: function(scale) { + var factor = 0; + if (scale > 1) { + factor = scale - 1; + } + + var center = this.getCenter(); + + var viewBoxW = this.imgMinSize - (this.imgMinSize * factor); + var viewBoxH = viewBoxW; + + const viewBoxPrev = this.viewBox.slice(); + const viewBoxNew = [ + center.x - viewBoxW / 2, + center.y - viewBoxH / 2, + viewBoxW, + viewBoxH + ]; + + this.$refs.rect.hideTooltip(); + Snap.animate( + viewBoxPrev, viewBoxNew, + (viewBox) => this.paper.attr({ "viewBox": viewBox }), + 350, mina.easeinout, + () => { + this.viewBox = viewBoxNew; + this.$refs.rect.showTooltip(); + if (scale === 1) { + this.resetZoom(); + } + } + ); } }, mounted() { @@ -202,66 +235,12 @@ }, zoomIn: function() { - - if ( this.scale === 9) { this.scale--; return; } - - var center = this.getCenter(); - var scaleFactor = this.zoomFactor * this.scale; - - var viewBoxW = this.imgMinSize - (this.imgMinSize * scaleFactor); - var viewBoxH = viewBoxW; - - const viewBoxPrev = this.viewBox.slice(0); - - this.viewBox[0] = center.x - viewBoxW / 2; - this.viewBox[1] = center.y - viewBoxH / 2; - this.viewBox[2] = viewBoxW; - this.viewBox[3] = viewBoxH; - - this.scale++; - - // this.paper.attr({ "viewBox": this.viewBox }); - - this.$refs.rect.hideTooltip(); - Snap.animate( - viewBoxPrev, this.viewBox, - (viewBox) => this.paper.attr({ "viewBox": viewBox }), - 300, mina.easeinout, - () => this.$refs.rect.showTooltip() - ); + this.scale = this.scale + (1 * this.zoomFactor); }, zoomOut: function() { - - if (this.scale === 1) { this.resetZoom(); return; } - - var center = this.getCenter(); - var scaleFactor = this.zoomFactor * (this.scale - 1); - - var viewBoxW = this.imgMinSize - (this.imgMinSize * scaleFactor); - var viewBoxH = viewBoxW; - - var topX = center.x - viewBoxW / 2; - var topY = center.y - viewBoxH / 2; - - const viewBoxPrev = this.viewBox.slice(0); - - this.viewBox[0] = topX; //deal with X and Y - this.viewBox[1] = topY; - this.viewBox[2] = viewBoxW; - this.viewBox[3] = viewBoxH; - - this.scale--; - - // this.paper.attr({ "viewBox": this.viewBox }); - - this.$refs.rect.hideTooltip(); - Snap.animate( - viewBoxPrev, this.viewBox, - (viewBox) => this.paper.attr({ "viewBox": viewBox }), - 300, mina.easeinout, - () => this.$refs.rect.showTooltip() - ); + if (this.scale === 1) { return; } + this.scale = this.scale - (1 * this.zoomFactor); }, zoomOffset: function() { diff -r 625ac8b8bb87 -r a0caf91c8374 src_js/iconolab-bundle/src/components/editor/ShapeRect.vue --- a/src_js/iconolab-bundle/src/components/editor/ShapeRect.vue Tue Feb 21 15:34:27 2017 +0100 +++ b/src_js/iconolab-bundle/src/components/editor/ShapeRect.vue Tue Feb 21 16:04:20 2017 +0100 @@ -155,6 +155,11 @@ bottomRightHandler.drag(handlerEvents.onMove, handlerEvents.onStart, handlerEvents.onEnd); }, + getCenter: function() { + var shape = new Snap(this.$refs.shape); + console.log(shape.getBBox()); + }, + fromSVGPath: function(pathString, tooltip) { var bBox = Snap.path.getBBox(pathString);