From 412067ad9052d9c4a7001431b87ca6ed0ac2aaf3 Mon Sep 17 00:00:00 2001 From: smiegrin Date: Sun, 17 Jan 2016 16:30:21 -0700 Subject: [PATCH] Introduces zooming towards/away from mouse --- src/js/controller/DrawingController.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/js/controller/DrawingController.js b/src/js/controller/DrawingController.js index 56bc916..a90f7f8 100644 --- a/src/js/controller/DrawingController.js +++ b/src/js/controller/DrawingController.js @@ -247,13 +247,37 @@ }; ns.DrawingController.prototype.increaseZoom_ = function (zoomMultiplier) { + var coords = this.getSpriteCoordinates(this._clientX,this._clientY); + var off = this.getOffset(); + var oldWidth = this.getContainerWidth_() / this.renderer.getZoom(); + var oldHeight = this.getContainerHeight_() / this.renderer.getZoom(); + var xRatio = (coords.x - off.x) / oldWidth; + var yRatio = (coords.y - off.y) / oldHeight; var step = (zoomMultiplier || 1) * this.getZoomStep_(); this.setZoom_(this.renderer.getZoom() + step); + var newWidth = this.getContainerWidth_() / this.renderer.getZoom(); + var newHeight = this.getContainerHeight_() / this.renderer.getZoom(); + this.setOffset( + off.x + ((oldWidth - newWidth) * xRatio), + off.y + ((oldHeight - newHeight) * yRatio) + ); }; ns.DrawingController.prototype.decreaseZoom_ = function (zoomMultiplier) { + var coords = this.getSpriteCoordinates(this._clientX,this._clientY); + var off = this.getOffset(); + var oldWidth = this.getContainerWidth_() / this.renderer.getZoom(); + var oldHeight = this.getContainerHeight_() / this.renderer.getZoom(); + var xRatio = (coords.x - off.x) / oldWidth; + var yRatio = (coords.y - off.y) / oldHeight; var step = (zoomMultiplier || 1) * this.getZoomStep_(); this.setZoom_(this.renderer.getZoom() - step); + var newWidth = this.getContainerWidth_() / this.renderer.getZoom(); + var newHeight = this.getContainerHeight_() / this.renderer.getZoom(); + this.setOffset( + off.x - ((newWidth - oldWidth) * xRatio), + off.y - ((newHeight - oldHeight) * yRatio) + ); }; /**