Update ol.interaction.DragRotateAndZoom

This commit is contained in:
Tom Payne
2013-04-22 15:16:59 +02:00
parent 75ac8a4847
commit 76a9f80545
2 changed files with 47 additions and 7 deletions
+5
View File
@@ -175,6 +175,11 @@
* @property {ol.interaction.ConditionType|undefined} condition Condition. * @property {ol.interaction.ConditionType|undefined} condition Condition.
*/ */
/**
* @typedef {Object} ol.interaction.DragRotateAndZoomOptions
* @property {ol.interaction.ConditionType|undefined} condition Condition.
*/
/** /**
* Interactions for the map. Default is true for all options. * Interactions for the map. Default is true for all options.
* @typedef {Object} ol.interaction.DefaultsOptions * @typedef {Object} ol.interaction.DefaultsOptions
@@ -7,15 +7,24 @@ goog.require('goog.math.Vec2');
goog.require('ol.interaction.ConditionType'); goog.require('ol.interaction.ConditionType');
goog.require('ol.interaction.Drag'); goog.require('ol.interaction.Drag');
goog.require('ol.interaction.Interaction'); goog.require('ol.interaction.Interaction');
goog.require('ol.interaction.condition');
/**
* @define {number} Animation duration.
*/
ol.interaction.DRAGROTATEANDZOOM_ANIMATION_DURATION = 400;
/** /**
* @constructor * @constructor
* @extends {ol.interaction.Drag} * @extends {ol.interaction.Drag}
* @param {ol.interaction.ConditionType} condition Condition. * @param {ol.interaction.DragRotateAndZoomOptions=} opt_options Options.
*/ */
ol.interaction.DragRotateAndZoom = function(condition) { ol.interaction.DragRotateAndZoom = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
goog.base(this); goog.base(this);
@@ -23,7 +32,8 @@ ol.interaction.DragRotateAndZoom = function(condition) {
* @private * @private
* @type {ol.interaction.ConditionType} * @type {ol.interaction.ConditionType}
*/ */
this.condition_ = condition; this.condition_ = goog.isDef(options.condition) ?
options.condition : ol.interaction.condition.shiftKeyOnly;
/** /**
* @private * @private
@@ -37,6 +47,12 @@ ol.interaction.DragRotateAndZoom = function(condition) {
*/ */
this.lastMagnitude_ = undefined; this.lastMagnitude_ = undefined;
/**
* @private
* @type {number}
*/
this.lastScaleDelta_ = 0;
}; };
goog.inherits(ol.interaction.DragRotateAndZoom, ol.interaction.Drag); goog.inherits(ol.interaction.DragRotateAndZoom, ol.interaction.Drag);
@@ -57,22 +73,41 @@ ol.interaction.DragRotateAndZoom.prototype.handleDrag =
// FIXME works for View2D only // FIXME works for View2D only
var view = map.getView().getView2D(); var view = map.getView().getView2D();
map.requestRenderFrame(); map.requestRenderFrame();
// FIXME the calls to map.rotate and map.zoomToResolution should use
// map.withFrozenRendering but an assertion fails :-(
if (goog.isDef(this.lastAngle_)) { if (goog.isDef(this.lastAngle_)) {
var angleDelta = theta - this.lastAngle_; var angleDelta = theta - this.lastAngle_;
ol.interaction.Interaction.rotate( ol.interaction.Interaction.rotateWithoutConstraints(
map, view, view.getRotation() - angleDelta); map, view, view.getRotation() - angleDelta);
} }
this.lastAngle_ = theta; this.lastAngle_ = theta;
if (goog.isDef(this.lastMagnitude_)) { if (goog.isDef(this.lastMagnitude_)) {
var resolution = this.lastMagnitude_ * (view.getResolution() / magnitude); var resolution = this.lastMagnitude_ * (view.getResolution() / magnitude);
ol.interaction.Interaction.zoom(map, view, resolution); ol.interaction.Interaction.zoomWithoutConstraints(map, view, resolution);
}
if (goog.isDef(this.lastMagnitude_)) {
this.lastScaleDelta_ = this.lastMagnitude_ / magnitude;
} }
this.lastMagnitude_ = magnitude; this.lastMagnitude_ = magnitude;
}; };
/**
* @inheritDoc
*/
ol.interaction.DragRotateAndZoom.prototype.handleDragEnd =
function(mapBrowserEvent) {
var map = mapBrowserEvent.map;
var view = map.getView().getView2D();
var direction = this.lastScaleDelta_ - 1;
map.withFrozenRendering(function() {
ol.interaction.Interaction.rotate(map, view, view.getRotation());
ol.interaction.Interaction.zoom(map, view, view.getResolution(), undefined,
ol.interaction.DRAGROTATEANDZOOM_ANIMATION_DURATION, direction);
});
this.lastScaleDelta_ = 0;
return true;
};
/** /**
* @inheritDoc * @inheritDoc
*/ */