gl2d
Version:
2D graphics package for WebGL
58 lines • 2.31 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var vec2_1 = require("../struct/vec2");
var point_1 = require("../struct/point");
var PinchZoomTool = (function () {
function PinchZoomTool() {
}
PinchZoomTool.prototype.onSurfaceEvent = function (event) {
// Check two pointers are down
if (event.pointers.length < 2) {
return;
}
// Check previous focus point is set
if (!this.previousFocus) {
return this.onStart(event);
}
// Delegate based on status of action
switch (event.status) {
case 0 /* Start */:
return this.onStart(event);
case 2 /* Drag */:
return this.onDrag(event);
case 4 /* End */:
this.previousFocus = null;
}
};
PinchZoomTool.prototype.onStart = function (event) {
var p1 = event.pointers[0];
var p2 = event.pointers[1];
this.previousSpan = p1.distance(p2);
this.previousFocus = point_1.Point.midpoint(p1, p2);
};
PinchZoomTool.prototype.onDrag = function (event) {
var p1 = event.pointers[0];
var p2 = event.pointers[1];
var span = p1.distance(p2);
var focus = point_1.Point.midpoint(p1, p2);
var surface = event.target;
var camera = surface.renderer.camera;
var actualScale = camera.zoomIn(span / this.previousSpan);
var toFocusPoint = vec2_1.Vec2.fromPointToPoint(focus, this.previousFocus);
toFocusPoint.divScalar(actualScale); // Adjust vector for change in zoom
var actualOffset = camera.offset(toFocusPoint);
// If any changes occurred
if (actualScale !== 1 || !actualOffset.equalsScalar(0)) {
// Keep track of previous span and focus point
this.previousSpan = span / actualScale;
this.previousFocus.x = focus.x + actualOffset.x;
this.previousFocus.y = focus.y + actualOffset.y;
// Show changes on surface
camera.updateMatrix();
surface.requestRender();
}
};
return PinchZoomTool;
}());
exports.PinchZoomTool = PinchZoomTool;
//# sourceMappingURL=pinchZoom.js.map