Merge pull request #3190 from tsauerwein/event-dragging
Introduce `dragging` flag for MapBrowserEvent
This commit is contained in:
@@ -145,7 +145,10 @@ var displayFeatureInfo = function(pixel) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$(map.getViewport()).on('mousemove', function(evt) {
|
map.on('pointermove', function(evt) {
|
||||||
|
if (evt.dragging) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
var pixel = map.getEventPixel(evt.originalEvent);
|
var pixel = map.getEventPixel(evt.originalEvent);
|
||||||
displayFeatureInfo(pixel);
|
displayFeatureInfo(pixel);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -141,7 +141,10 @@ var displayFeatureInfo = function(pixel) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$(map.getViewport()).on('mousemove', function(evt) {
|
map.on('pointermove', function(evt) {
|
||||||
|
if (evt.dragging) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
var pixel = map.getEventPixel(evt.originalEvent);
|
var pixel = map.getEventPixel(evt.originalEvent);
|
||||||
displayFeatureInfo(pixel);
|
displayFeatureInfo(pixel);
|
||||||
});
|
});
|
||||||
|
|||||||
+4
-1
@@ -85,7 +85,10 @@ var displayFeatureInfo = function(pixel) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$(map.getViewport()).on('mousemove', function(evt) {
|
map.on('pointermove', function(evt) {
|
||||||
|
if (evt.dragging) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
var pixel = map.getEventPixel(evt.originalEvent);
|
var pixel = map.getEventPixel(evt.originalEvent);
|
||||||
displayFeatureInfo(pixel);
|
displayFeatureInfo(pixel);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -132,7 +132,10 @@ map.on('click', function(evt) {
|
|||||||
}, 1);
|
}, 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
$(map.getViewport()).on('mousemove', function(evt) {
|
map.on('pointermove', function(evt) {
|
||||||
|
if (evt.dragging) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
var pixel = map.getEventPixel(evt.originalEvent);
|
var pixel = map.getEventPixel(evt.originalEvent);
|
||||||
var hit = map.hasFeatureAtPixel(pixel);
|
var hit = map.hasFeatureAtPixel(pixel);
|
||||||
map.getTarget().style.cursor = hit ? 'pointer' : '';
|
map.getTarget().style.cursor = hit ? 'pointer' : '';
|
||||||
|
|||||||
+5
-1
@@ -86,7 +86,11 @@ map.on('click', function(evt) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// change mouse cursor when over marker
|
// change mouse cursor when over marker
|
||||||
$(map.getViewport()).on('mousemove', function(e) {
|
map.on('pointermove', function(e) {
|
||||||
|
if (e.dragging) {
|
||||||
|
$(element).popover('destroy');
|
||||||
|
return;
|
||||||
|
}
|
||||||
var pixel = map.getEventPixel(e.originalEvent);
|
var pixel = map.getEventPixel(e.originalEvent);
|
||||||
var hit = map.hasFeatureAtPixel(pixel);
|
var hit = map.hasFeatureAtPixel(pixel);
|
||||||
map.getTarget().style.cursor = hit ? 'pointer' : '';
|
map.getTarget().style.cursor = hit ? 'pointer' : '';
|
||||||
|
|||||||
+4
-1
@@ -126,7 +126,10 @@ var displaySnap = function(coordinate) {
|
|||||||
map.render();
|
map.render();
|
||||||
};
|
};
|
||||||
|
|
||||||
$(map.getViewport()).on('mousemove', function(evt) {
|
map.on('pointermove', function(evt) {
|
||||||
|
if (evt.dragging) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
var coordinate = map.getEventCoordinate(evt.originalEvent);
|
var coordinate = map.getEventCoordinate(evt.originalEvent);
|
||||||
displaySnap(coordinate);
|
displaySnap(coordinate);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -80,7 +80,10 @@ var displayFeatureInfo = function(pixel) {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
$(map.getViewport()).on('mousemove', function(evt) {
|
map.on('pointermove', function(evt) {
|
||||||
|
if (evt.dragging) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
var pixel = map.getEventPixel(evt.originalEvent);
|
var pixel = map.getEventPixel(evt.originalEvent);
|
||||||
displayFeatureInfo(pixel);
|
displayFeatureInfo(pixel);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -85,7 +85,11 @@ var displayFeatureInfo = function(pixel) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$(map.getViewport()).on('mousemove', function(evt) {
|
map.on('pointermove', function(evt) {
|
||||||
|
if (evt.dragging) {
|
||||||
|
info.tooltip('hide');
|
||||||
|
return;
|
||||||
|
}
|
||||||
displayFeatureInfo(map.getEventPixel(evt.originalEvent));
|
displayFeatureInfo(map.getEventPixel(evt.originalEvent));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -92,7 +92,11 @@ var displayFeatureInfo = function(pixel) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$(map.getViewport()).on('mousemove', function(evt) {
|
map.on('pointermove', function(evt) {
|
||||||
|
if (evt.dragging) {
|
||||||
|
info.tooltip('hide');
|
||||||
|
return;
|
||||||
|
}
|
||||||
displayFeatureInfo(map.getEventPixel(evt.originalEvent));
|
displayFeatureInfo(map.getEventPixel(evt.originalEvent));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
+4
-1
@@ -52,7 +52,10 @@ var displayFeatureInfo = function(pixel) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$(map.getViewport()).on('mousemove', function(evt) {
|
map.on('pointermove', function(evt) {
|
||||||
|
if (evt.dragging) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
var pixel = map.getEventPixel(evt.originalEvent);
|
var pixel = map.getEventPixel(evt.originalEvent);
|
||||||
displayFeatureInfo(pixel);
|
displayFeatureInfo(pixel);
|
||||||
});
|
});
|
||||||
|
|||||||
+5
-2
@@ -57,7 +57,10 @@ var sketchElement;
|
|||||||
* handle pointer move
|
* handle pointer move
|
||||||
* @param {Event} evt
|
* @param {Event} evt
|
||||||
*/
|
*/
|
||||||
var mouseMoveHandler = function(evt) {
|
var pointerMoveHandler = function(evt) {
|
||||||
|
if (evt.dragging) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (sketch) {
|
if (sketch) {
|
||||||
var output;
|
var output;
|
||||||
var geom = (sketch.getGeometry());
|
var geom = (sketch.getGeometry());
|
||||||
@@ -81,7 +84,7 @@ var map = new ol.Map({
|
|||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|
||||||
$(map.getViewport()).on('mousemove', mouseMoveHandler);
|
map.on('pointermove', pointerMoveHandler);
|
||||||
|
|
||||||
var typeSelect = document.getElementById('type');
|
var typeSelect = document.getElementById('type');
|
||||||
|
|
||||||
|
|||||||
@@ -83,7 +83,10 @@ var displaySnap = function(coordinate) {
|
|||||||
map.render();
|
map.render();
|
||||||
};
|
};
|
||||||
|
|
||||||
$(map.getViewport()).on('mousemove', function(evt) {
|
map.on('pointermove', function(evt) {
|
||||||
|
if (evt.dragging) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
var coordinate = map.getEventCoordinate(evt.originalEvent);
|
var coordinate = map.getEventCoordinate(evt.originalEvent);
|
||||||
displaySnap(coordinate);
|
displaySnap(coordinate);
|
||||||
});
|
});
|
||||||
@@ -116,13 +119,12 @@ map.on('postcompose', function(evt) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$(map.getViewport()).on('mousemove', function(e) {
|
map.on('pointermove', function(evt) {
|
||||||
var pixel = map.getEventPixel(e.originalEvent);
|
if (evt.dragging) {
|
||||||
|
return;
|
||||||
var hit = map.forEachFeatureAtPixel(pixel, function(feature, layer) {
|
}
|
||||||
return true;
|
var pixel = map.getEventPixel(evt.originalEvent);
|
||||||
});
|
var hit = map.hasFeatureAtPixel(pixel);
|
||||||
|
|
||||||
if (hit) {
|
if (hit) {
|
||||||
map.getTarget().style.cursor = 'pointer';
|
map.getTarget().style.cursor = 'pointer';
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -58,7 +58,10 @@ var displayCountryInfo = function(coordinate) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
$(map.getViewport()).on('mousemove', function(evt) {
|
map.on('pointermove', function(evt) {
|
||||||
|
if (evt.dragging) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
var coordinate = map.getEventCoordinate(evt.originalEvent);
|
var coordinate = map.getEventCoordinate(evt.originalEvent);
|
||||||
displayCountryInfo(coordinate);
|
displayCountryInfo(coordinate);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -114,7 +114,10 @@ var displayFeatureInfo = function(pixel) {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
$(map.getViewport()).on('mousemove', function(evt) {
|
map.on('pointermove', function(evt) {
|
||||||
|
if (evt.dragging) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
var pixel = map.getEventPixel(evt.originalEvent);
|
var pixel = map.getEventPixel(evt.originalEvent);
|
||||||
displayFeatureInfo(pixel);
|
displayFeatureInfo(pixel);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -92,6 +92,12 @@ oli.MapBrowserEvent.prototype.originalEvent;
|
|||||||
oli.MapBrowserEvent.prototype.pixel;
|
oli.MapBrowserEvent.prototype.pixel;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {boolean}
|
||||||
|
*/
|
||||||
|
oli.MapBrowserEvent.prototype.dragging;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @interface
|
* @interface
|
||||||
|
|||||||
+48
-29
@@ -30,9 +30,11 @@ goog.require('ol.pointer.PointerEventHandler');
|
|||||||
* @param {string} type Event type.
|
* @param {string} type Event type.
|
||||||
* @param {ol.Map} map Map.
|
* @param {ol.Map} map Map.
|
||||||
* @param {goog.events.BrowserEvent} browserEvent Browser event.
|
* @param {goog.events.BrowserEvent} browserEvent Browser event.
|
||||||
|
* @param {boolean=} opt_dragging Is the map currently being dragged?
|
||||||
* @param {?olx.FrameState=} opt_frameState Frame state.
|
* @param {?olx.FrameState=} opt_frameState Frame state.
|
||||||
*/
|
*/
|
||||||
ol.MapBrowserEvent = function(type, map, browserEvent, opt_frameState) {
|
ol.MapBrowserEvent = function(type, map, browserEvent, opt_dragging,
|
||||||
|
opt_frameState) {
|
||||||
|
|
||||||
goog.base(this, type, map, opt_frameState);
|
goog.base(this, type, map, opt_frameState);
|
||||||
|
|
||||||
@@ -61,6 +63,15 @@ ol.MapBrowserEvent = function(type, map, browserEvent, opt_frameState) {
|
|||||||
*/
|
*/
|
||||||
this.coordinate = map.getCoordinateFromPixel(this.pixel);
|
this.coordinate = map.getCoordinateFromPixel(this.pixel);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates if the map is currently being dragged. Only set for
|
||||||
|
* `POINTERDRAG` and `POINTERMOVE` events. Default is `false`.
|
||||||
|
*
|
||||||
|
* @type {boolean}
|
||||||
|
* @api stable
|
||||||
|
*/
|
||||||
|
this.dragging = goog.isDef(opt_dragging) ? opt_dragging : false;
|
||||||
|
|
||||||
};
|
};
|
||||||
goog.inherits(ol.MapBrowserEvent, ol.MapEvent);
|
goog.inherits(ol.MapBrowserEvent, ol.MapEvent);
|
||||||
|
|
||||||
@@ -96,11 +107,14 @@ ol.MapBrowserEvent.prototype.stopPropagation = function() {
|
|||||||
* @param {string} type Event type.
|
* @param {string} type Event type.
|
||||||
* @param {ol.Map} map Map.
|
* @param {ol.Map} map Map.
|
||||||
* @param {ol.pointer.PointerEvent} pointerEvent Pointer event.
|
* @param {ol.pointer.PointerEvent} pointerEvent Pointer event.
|
||||||
|
* @param {boolean=} opt_dragging Is the map currently being dragged?
|
||||||
* @param {?olx.FrameState=} opt_frameState Frame state.
|
* @param {?olx.FrameState=} opt_frameState Frame state.
|
||||||
*/
|
*/
|
||||||
ol.MapBrowserPointerEvent = function(type, map, pointerEvent, opt_frameState) {
|
ol.MapBrowserPointerEvent = function(type, map, pointerEvent, opt_dragging,
|
||||||
|
opt_frameState) {
|
||||||
|
|
||||||
goog.base(this, type, map, pointerEvent.browserEvent, opt_frameState);
|
goog.base(this, type, map, pointerEvent.browserEvent, opt_dragging,
|
||||||
|
opt_frameState);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @const
|
* @const
|
||||||
@@ -139,7 +153,7 @@ ol.MapBrowserEventHandler = function(map) {
|
|||||||
* @type {boolean}
|
* @type {boolean}
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
this.dragged_ = false;
|
this.dragging_ = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @type {Array.<number>}
|
* @type {Array.<number>}
|
||||||
@@ -162,6 +176,8 @@ ol.MapBrowserEventHandler = function(map) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* The most recent "down" type event (or null if none have occurred).
|
||||||
|
* Set on pointerdown.
|
||||||
* @type {ol.pointer.PointerEvent}
|
* @type {ol.pointer.PointerEvent}
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
@@ -222,16 +238,6 @@ ol.MapBrowserEventHandler = function(map) {
|
|||||||
goog.inherits(ol.MapBrowserEventHandler, goog.events.EventTarget);
|
goog.inherits(ol.MapBrowserEventHandler, goog.events.EventTarget);
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the last "down" type event. This will be set on pointerdown.
|
|
||||||
* @return {ol.pointer.PointerEvent} The most recent "down" type event (or null
|
|
||||||
* if none have occurred).
|
|
||||||
*/
|
|
||||||
ol.MapBrowserEventHandler.prototype.getDown = function() {
|
|
||||||
return this.down_;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {goog.events.BrowserEvent} browserEvent Pointer event.
|
* @param {goog.events.BrowserEvent} browserEvent Pointer event.
|
||||||
* @private
|
* @private
|
||||||
@@ -304,22 +310,24 @@ ol.MapBrowserEventHandler.prototype.handlePointerUp_ = function(pointerEvent) {
|
|||||||
ol.MapBrowserEvent.EventType.POINTERUP, this.map_, pointerEvent);
|
ol.MapBrowserEvent.EventType.POINTERUP, this.map_, pointerEvent);
|
||||||
this.dispatchEvent(newEvent);
|
this.dispatchEvent(newEvent);
|
||||||
|
|
||||||
|
// We emulate click events on left mouse button click, touch contact, and pen
|
||||||
|
// contact. isMouseActionButton returns true in these cases (evt.button is set
|
||||||
|
// to 0).
|
||||||
|
// See http://www.w3.org/TR/pointerevents/#button-states
|
||||||
|
if (!this.dragging_ && this.isMouseActionButton_(pointerEvent)) {
|
||||||
|
goog.asserts.assert(!goog.isNull(this.down_));
|
||||||
|
this.emulateClick_(this.down_);
|
||||||
|
}
|
||||||
|
|
||||||
goog.asserts.assert(this.activePointers_ >= 0);
|
goog.asserts.assert(this.activePointers_ >= 0);
|
||||||
if (this.activePointers_ === 0) {
|
if (this.activePointers_ === 0) {
|
||||||
goog.array.forEach(this.dragListenerKeys_, goog.events.unlistenByKey);
|
goog.array.forEach(this.dragListenerKeys_, goog.events.unlistenByKey);
|
||||||
this.dragListenerKeys_ = null;
|
this.dragListenerKeys_ = null;
|
||||||
|
this.dragging_ = false;
|
||||||
|
this.down_ = null;
|
||||||
goog.dispose(this.documentPointerEventHandler_);
|
goog.dispose(this.documentPointerEventHandler_);
|
||||||
this.documentPointerEventHandler_ = null;
|
this.documentPointerEventHandler_ = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// We emulate click event on left mouse button click, touch contact, and pen
|
|
||||||
// contact. isMouseActionButton returns true in these cases (evt.button is set
|
|
||||||
// to 0).
|
|
||||||
// See http://www.w3.org/TR/pointerevents/#button-states
|
|
||||||
if (!this.dragged_ && this.isMouseActionButton_(pointerEvent)) {
|
|
||||||
goog.asserts.assert(!goog.isNull(this.down_));
|
|
||||||
this.emulateClick_(this.down_);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -350,7 +358,6 @@ ol.MapBrowserEventHandler.prototype.handlePointerDown_ =
|
|||||||
this.dispatchEvent(newEvent);
|
this.dispatchEvent(newEvent);
|
||||||
|
|
||||||
this.down_ = pointerEvent;
|
this.down_ = pointerEvent;
|
||||||
this.dragged_ = false;
|
|
||||||
|
|
||||||
if (goog.isNull(this.dragListenerKeys_)) {
|
if (goog.isNull(this.dragListenerKeys_)) {
|
||||||
/* Set up a pointer event handler on the `document`,
|
/* Set up a pointer event handler on the `document`,
|
||||||
@@ -399,11 +406,11 @@ ol.MapBrowserEventHandler.prototype.handlePointerMove_ =
|
|||||||
// the exact same coordinates of the pointerdown event. To avoid a
|
// the exact same coordinates of the pointerdown event. To avoid a
|
||||||
// 'false' touchmove event to be dispatched , we test if the pointer
|
// 'false' touchmove event to be dispatched , we test if the pointer
|
||||||
// effectively moved.
|
// effectively moved.
|
||||||
if (pointerEvent.clientX != this.down_.clientX ||
|
if (this.isMoving_(pointerEvent)) {
|
||||||
pointerEvent.clientY != this.down_.clientY) {
|
this.dragging_ = true;
|
||||||
this.dragged_ = true;
|
|
||||||
var newEvent = new ol.MapBrowserPointerEvent(
|
var newEvent = new ol.MapBrowserPointerEvent(
|
||||||
ol.MapBrowserEvent.EventType.POINTERDRAG, this.map_, pointerEvent);
|
ol.MapBrowserEvent.EventType.POINTERDRAG, this.map_, pointerEvent,
|
||||||
|
this.dragging_);
|
||||||
this.dispatchEvent(newEvent);
|
this.dispatchEvent(newEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -422,8 +429,20 @@ ol.MapBrowserEventHandler.prototype.handlePointerMove_ =
|
|||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
ol.MapBrowserEventHandler.prototype.relayEvent_ = function(pointerEvent) {
|
ol.MapBrowserEventHandler.prototype.relayEvent_ = function(pointerEvent) {
|
||||||
|
var dragging = !goog.isNull(this.down_) && this.isMoving_(pointerEvent);
|
||||||
this.dispatchEvent(new ol.MapBrowserPointerEvent(
|
this.dispatchEvent(new ol.MapBrowserPointerEvent(
|
||||||
pointerEvent.type, this.map_, pointerEvent));
|
pointerEvent.type, this.map_, pointerEvent, dragging));
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {ol.pointer.PointerEvent} pointerEvent Pointer event.
|
||||||
|
* @return {boolean}
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
ol.MapBrowserEventHandler.prototype.isMoving_ = function(pointerEvent) {
|
||||||
|
return pointerEvent.clientX != this.down_.clientX ||
|
||||||
|
pointerEvent.clientY != this.down_.clientY;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -96,22 +96,22 @@ describe('ol.MapBrowserEventHandler', function() {
|
|||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('#getDown()', function() {
|
describe('#down_', function() {
|
||||||
|
|
||||||
var handler;
|
var handler;
|
||||||
beforeEach(function() {
|
beforeEach(function() {
|
||||||
handler = new ol.MapBrowserEventHandler(new ol.Map({}));
|
handler = new ol.MapBrowserEventHandler(new ol.Map({}));
|
||||||
});
|
});
|
||||||
|
|
||||||
it('returns null if no "down" type event has been handled', function() {
|
it('is null if no "down" type event has been handled', function() {
|
||||||
expect(handler.getDown()).to.be(null);
|
expect(handler.down_).to.be(null);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('returns an event after handlePointerDown_ has been called', function() {
|
it('is an event after handlePointerDown_ has been called', function() {
|
||||||
var event = new ol.pointer.PointerEvent('pointerdown',
|
var event = new ol.pointer.PointerEvent('pointerdown',
|
||||||
new goog.events.BrowserEvent({}));
|
new goog.events.BrowserEvent({}));
|
||||||
handler.handlePointerDown_(event);
|
handler.handlePointerDown_(event);
|
||||||
expect(handler.getDown()).to.be(event);
|
expect(handler.down_).to.be(event);
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user