devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
102 lines (101 loc) • 3.24 kB
JavaScript
/**
* DevExtreme (esm/viz/vector_map/gesture_handler.js)
* Version: 24.2.6
* Build date: Mon Mar 17 2025
*
* Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
const _ln = Math.log;
const _LN2 = Math.LN2;
export function GestureHandler(params) {
this._projection = params.projection;
this._renderer = params.renderer;
this._x = this._y = 0;
this._subscribeToTracker(params.tracker)
}
GestureHandler.prototype = {
constructor: GestureHandler,
dispose: function() {
this._offTracker();
this._offTracker = null
},
_subscribeToTracker: function(tracker) {
const that = this;
let isActive = false;
that._offTracker = tracker.on({
start: function(arg) {
isActive = "control-bar" !== arg.data.name;
if (isActive) {
that._processStart(arg)
}
},
move: function(arg) {
if (isActive) {
that._processMove(arg)
}
},
end: function() {
if (isActive) {
that._processEnd()
}
},
zoom: function(arg) {
that._processZoom(arg)
}
})
},
setInteraction: function(options) {
this._processEnd();
this._centeringEnabled = options.centeringEnabled;
this._zoomingEnabled = options.zoomingEnabled
},
_processStart: function(arg) {
if (this._centeringEnabled) {
this._x = arg.x;
this._y = arg.y;
this._projection.beginMoveCenter()
}
},
_processMove: function(arg) {
const that = this;
if (that._centeringEnabled) {
that._renderer.root.attr({
cursor: "move"
});
that._projection.moveCenter([that._x - arg.x, that._y - arg.y]);
that._x = arg.x;
that._y = arg.y
}
},
_processEnd: function() {
if (this._centeringEnabled) {
this._renderer.root.attr({
cursor: "default"
});
this._projection.endMoveCenter()
}
},
_processZoom: function(arg) {
const that = this;
let delta;
let screenPosition;
let coords;
if (that._zoomingEnabled) {
if (arg.delta) {
delta = arg.delta
} else if (arg.ratio) {
delta = _ln(arg.ratio) / _LN2
}
if (that._centeringEnabled) {
screenPosition = that._renderer.getRootOffset();
screenPosition = [arg.x - screenPosition.left, arg.y - screenPosition.top];
coords = that._projection.fromScreenPoint(screenPosition)
}
that._projection.changeScaledZoom(delta);
if (that._centeringEnabled) {
that._projection.setCenterByPoint(coords, screenPosition)
}
}
}
};