Add experimental drag control (to be replaced)

This commit is contained in:
Tom Payne
2012-07-18 15:10:39 +02:00
parent 4754ed1cc2
commit aab2bc093a
5 changed files with 163 additions and 1 deletions

106
src/ol/control/drag.js Normal file
View File

@@ -0,0 +1,106 @@
// FIXME support touch events?
// FIXME use goog.fx.Dragger in ol.Map instead?
goog.provide('ol.control.Drag');
goog.require('goog.events.EventType');
goog.require('goog.functions');
goog.require('ol.Control');
goog.require('ol.MapBrowserEvent');
/**
* @constructor
* @extends {ol.Control}
*/
ol.control.Drag = function() {
goog.base(this);
/**
* @private
* @type {boolean}
*/
this.dragging_ = false;
/**
* @type {number}
*/
this.startX = 0;
/**
* @type {number}
*/
this.startY = 0;
/**
* @type {number}
*/
this.offsetX = 0;
/**
* @type {number}
*/
this.offsetY = 0;
};
goog.inherits(ol.control.Drag, ol.Control);
/**
* @param {ol.MapBrowserEvent} event Event.
* @protected
*/
ol.control.Drag.prototype.handleDrag = goog.nullFunction;
/**
* @param {ol.MapBrowserEvent} event Event.
* @protected
* @return {boolean} Capture dragging.
*/
ol.control.Drag.prototype.handleDragStart = goog.functions.FALSE;
/**
* @param {ol.MapBrowserEvent} event Event.
* @protected
*/
ol.control.Drag.prototype.handleDragEnd = goog.nullFunction;
/**
* @inheritDoc
*/
ol.control.Drag.prototype.handleMapBrowserEvent = function(event) {
var browserEventObject;
if (this.dragging_) {
if (event.type == goog.events.EventType.MOUSEMOVE ||
event.type == goog.events.EventType.MOUSEOUT ||
event.type == goog.events.EventType.MOUSEUP) {
browserEventObject = event.getBrowserEventObject();
this.deltaX = browserEventObject.offsetX - this.startX;
this.deltaY = browserEventObject.offsetY - this.startY;
if (event.type == goog.events.EventType.MOUSEMOVE) {
this.handleDrag(event);
} else {
this.handleDragEnd(event);
this.dragging_ = false;
}
event.preventDefault();
}
} else {
if (event.type == goog.events.EventType.MOUSEDOWN) {
browserEventObject = event.getBrowserEventObject();
this.startX = browserEventObject.offsetX;
this.startY = browserEventObject.offsetY;
this.deltaX = 0;
this.deltaY = 0;
if (this.handleDragStart(event)) {
this.dragging_ = true;
event.preventDefault();
}
}
}
};

49
src/ol/control/dragpan.js Normal file
View File

@@ -0,0 +1,49 @@
goog.provide('ol.control.DragPan');
goog.require('ol.MapBrowserEvent');
goog.require('ol.control.Drag');
/**
* @constructor
* @extends {ol.control.Drag}
*/
ol.control.DragPan = function() {
goog.base(this);
};
goog.inherits(ol.control.DragPan, ol.control.Drag);
/**
* @inheritDoc
*/
ol.control.DragPan.prototype.handleDrag = function(event) {
window.console.log(
'drag delta (' + this.deltaX + ', ' + this.deltaY + ')');
};
/**
* @inheritDoc
*/
ol.control.DragPan.prototype.handleDragEnd = function(event) {
window.console.log(
'drag end at delta (' + this.deltaX + ', ' + this.deltaY + ')');
};
/**
* @inheritDoc
*/
ol.control.DragPan.prototype.handleDragStart = function(event) {
var browserEventObject = event.getBrowserEventObject();
if (browserEventObject.shiftKey) {
window.console.log('not starting drag while shift key is pressed');
return false;
} else {
window.console.log(
'drag start at (' + this.startX + ', ' + this.startY + ')');
return true;
}
};