Spaces:
Sleeping
Sleeping
File size: 4,286 Bytes
4a288a7 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 | // @flow
import {MapMouseEvent, MapTouchEvent, MapWheelEvent} from '../events';
import type Map from '../map';
export class MapEventHandler {
_mousedownPos: Point;
_clickTolerance: number;
_map: Map;
constructor(map: Map, options: { clickTolerance: number }) {
this._map = map;
this._clickTolerance = options.clickTolerance;
}
reset() {
delete this._mousedownPos;
}
wheel(e: WheelEvent) {
// If mapEvent.preventDefault() is called by the user, prevent handlers such as:
// - ScrollZoom
return this._firePreventable(new MapWheelEvent(e.type, this._map, e));
}
mousedown(e: MouseEvent, point: Point) {
this._mousedownPos = point;
// If mapEvent.preventDefault() is called by the user, prevent handlers such as:
// - MousePan
// - MouseRotate
// - MousePitch
// - DblclickHandler
return this._firePreventable(new MapMouseEvent(e.type, this._map, e));
}
mouseup(e: MouseEvent) {
this._map.fire(new MapMouseEvent(e.type, this._map, e));
}
click(e: MouseEvent, point: Point) {
if (this._mousedownPos && this._mousedownPos.dist(point) >= this._clickTolerance) return;
this._map.fire(new MapMouseEvent(e.type, this._map, e));
}
dblclick(e: MouseEvent) {
// If mapEvent.preventDefault() is called by the user, prevent handlers such as:
// - DblClickZoom
return this._firePreventable(new MapMouseEvent(e.type, this._map, e));
}
mouseover(e: MouseEvent) {
this._map.fire(new MapMouseEvent(e.type, this._map, e));
}
mouseout(e: MouseEvent) {
this._map.fire(new MapMouseEvent(e.type, this._map, e));
}
touchstart(e: TouchEvent) {
// If mapEvent.preventDefault() is called by the user, prevent handlers such as:
// - TouchPan
// - TouchZoom
// - TouchRotate
// - TouchPitch
// - TapZoom
// - SwipeZoom
return this._firePreventable(new MapTouchEvent(e.type, this._map, e));
}
touchmove(e: TouchEvent) {
this._map.fire(new MapTouchEvent(e.type, this._map, e));
}
touchend(e: TouchEvent) {
this._map.fire(new MapTouchEvent(e.type, this._map, e));
}
touchcancel(e: TouchEvent) {
this._map.fire(new MapTouchEvent(e.type, this._map, e));
}
_firePreventable(mapEvent: MapMouseEvent | MapTouchEvent | MapWheelEvent) {
this._map.fire(mapEvent);
if (mapEvent.defaultPrevented) {
// returning an object marks the handler as active and resets other handlers
return {};
}
}
isEnabled() {
return true;
}
isActive() {
return false;
}
enable() {}
disable() {}
}
export class BlockableMapEventHandler {
_map: Map;
_delayContextMenu: boolean;
_contextMenuEvent: MouseEvent;
constructor(map: Map) {
this._map = map;
}
reset() {
this._delayContextMenu = false;
delete this._contextMenuEvent;
}
mousemove(e: MouseEvent) {
// mousemove map events should not be fired when interaction handlers (pan, rotate, etc) are active
this._map.fire(new MapMouseEvent(e.type, this._map, e));
}
mousedown() {
this._delayContextMenu = true;
}
mouseup() {
this._delayContextMenu = false;
if (this._contextMenuEvent) {
this._map.fire(new MapMouseEvent('contextmenu', this._map, this._contextMenuEvent));
delete this._contextMenuEvent;
}
}
contextmenu(e: MouseEvent) {
if (this._delayContextMenu) {
// Mac: contextmenu fired on mousedown; we save it until mouseup for consistency's sake
this._contextMenuEvent = e;
} else {
// Windows: contextmenu fired on mouseup, so fire event now
this._map.fire(new MapMouseEvent(e.type, this._map, e));
}
// prevent browser context menu when necessary
if (this._map.listens('contextmenu')) {
e.preventDefault();
}
}
isEnabled() {
return true;
}
isActive() {
return false;
}
enable() {}
disable() {}
}
|