From 8b900c78220c792c35b9b304409308cfcc31689d Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Mon, 30 Jul 2012 00:09:47 +0200 Subject: [PATCH] Add ol.control.ShiftDragRotate --- src/ol/control/shiftdragrotate.js | 57 +++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/ol/control/shiftdragrotate.js diff --git a/src/ol/control/shiftdragrotate.js b/src/ol/control/shiftdragrotate.js new file mode 100644 index 0000000000..ec013a6b96 --- /dev/null +++ b/src/ol/control/shiftdragrotate.js @@ -0,0 +1,57 @@ +goog.provide('ol.control.ShiftDragRotate'); + +goog.require('ol.MapBrowserEvent'); +goog.require('ol.control.Drag'); + + + +/** + * @constructor + * @extends {ol.control.Drag} + */ +ol.control.ShiftDragRotate = function() { + goog.base(this); +}; +goog.inherits(ol.control.ShiftDragRotate, ol.control.Drag); + + +/** + * @private + * @type {number} + */ +ol.control.ShiftDragRotate.prototype.startRotation_; + + +/** + * @inheritDoc + */ +ol.control.ShiftDragRotate.prototype.handleDrag = function(mapBrowserEvent) { + var browserEvent = mapBrowserEvent.browserEvent; + var map = mapBrowserEvent.map; + var size = map.getSize(); + var theta = Math.atan2( + size.height / 2 - browserEvent.offsetY, + browserEvent.offsetX - size.width / 2); + map.setRotation(this.startRotation_ - theta); +}; + + +/** + * @inheritDoc + */ +ol.control.ShiftDragRotate.prototype.handleDragStart = + function(mapBrowserEvent) { + var browserEvent = mapBrowserEvent.browserEvent; + var map = mapBrowserEvent.map; + if (map.canRotate() && browserEvent.shiftKey) { + var size = map.getSize(); + var theta = Math.atan2( + size.height / 2 - browserEvent.offsetY, + browserEvent.offsetX - size.width / 2); + this.startRotation_ = (map.getRotation() || 0) + theta; + browserEvent.preventDefault(); + return true; + } else { + return false; + } +};