From 873135b492c441b6c8d33d7ca5e20e1aedb148b1 Mon Sep 17 00:00:00 2001 From: Dominik Picheta Date: Wed, 13 Aug 2014 10:53:52 +0100 Subject: [PATCH] Adds rotate event. Fixes #454. --- src/navigator.js | 23 +++++++++++++++++++++++ src/viewer.js | 3 ++- src/viewport.js | 33 ++++++++++++++------------------- 3 files changed, 39 insertions(+), 20 deletions(-) diff --git a/src/navigator.js b/src/navigator.js index 8cfa3e13..6910ae0c 100644 --- a/src/navigator.js +++ b/src/navigator.js @@ -215,6 +215,16 @@ $.Navigator = function( options ){ unneededElement.parentNode.removeChild(unneededElement); } + if (options.navigatorRotate) + { + var _this = this; + options.viewer.addHandler("rotate", function (args) { + _setTransformRotate(_this.viewer.navigator.displayRegionContainer, args.degrees); + _setTransformRotate(_this.viewer.navigator.displayRegion, -args.degrees); + _this.viewport.setRotation(args.degrees); + }); + + } }; $.extend( $.Navigator.prototype, $.EventSource.prototype, $.Viewer.prototype, /** @lends OpenSeadragon.Navigator.prototype */{ @@ -396,5 +406,18 @@ function onCanvasScroll( event ) { return false; } +/** + * @function + * @private + * @param {Object} element + * @param {Number} degrees + */ +function _setTransformRotate (element, degrees) { + element.style.webkitTransform = "rotate(" + degrees + "deg)"; + element.style.mozTransform = "rotate(" + degrees + "deg)"; + element.style.msTransform = "rotate(" + degrees + "deg)"; + element.style.oTransform = "rotate(" + degrees + "deg)"; + element.style.transform = "rotate(" + degrees + "deg)"; +} }( OpenSeadragon )); diff --git a/src/viewer.js b/src/viewer.js index b710ac59..5435b3a0 100644 --- a/src/viewer.js +++ b/src/viewer.js @@ -2025,7 +2025,8 @@ function openTileSource( viewer, source ) { tileSources: source, tileHost: _this.tileHost, prefixUrl: _this.prefixUrl, - viewer: _this + viewer: _this, + navigatorRotate: _this.navigatorRotate }); } } diff --git a/src/viewport.js b/src/viewport.js index 2672983d..ccc50a8a 100644 --- a/src/viewport.js +++ b/src/viewport.js @@ -712,20 +712,6 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{ return this; }, - /** - * @function - * @private - * @param {Object} element - * @param {Number} degrees - */ - _setTransformRotate: function (element, degrees) { - element.style.webkitTransform = "rotate(" + degrees + "deg)"; - element.style.mozTransform = "rotate(" + degrees + "deg)"; - element.style.msTransform = "rotate(" + degrees + "deg)"; - element.style.oTransform = "rotate(" + degrees + "deg)"; - element.style.transform = "rotate(" + degrees + "deg)"; - }, - /** * Currently only 90 degree rotation is supported and it only works * with the canvas. Additionally, the navigator does not rotate yet, @@ -743,14 +729,23 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{ if( degrees % 90 !== 0 ) { throw new Error('Currently only 0, 90, 180, and 270 degrees are supported.'); } - if (this.viewer.navigator !== null && this.navigatorRotate) { - this._setTransformRotate(this.viewer.navigator.displayRegionContainer, degrees); - this._setTransformRotate(this.viewer.navigator.displayRegion, -degrees); - this.viewer.navigator.viewport.setRotation(degrees); - } this.degrees = degrees; this.viewer.forceRedraw(); + /** + * Raised when rotation has been changed. + * + * @event update-viewport + * @memberof OpenSeadragon.Viewer + * @type {object} + * @property {OpenSeadragon.Viewer} eventSource - A reference to the Viewer which raised the event. + * @property {Number} degrees - The number of degrees the rotation was set to. + * @property {?Object} userData - Arbitrary subscriber-defined object. + */ + if (this.viewer.navigator !== null) + { + this.viewer.raiseEvent('rotate', {"degrees": degrees}); + } return this; },