UNPKG

gl2d

Version:

2D graphics package for WebGL

58 lines 2.31 kB
"use strict"; 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