| import * as eventUtil from './event.js'; | 
| var GestureMgr = (function () { | 
|     function GestureMgr() { | 
|         this._track = []; | 
|     } | 
|     GestureMgr.prototype.recognize = function (event, target, root) { | 
|         this._doTrack(event, target, root); | 
|         return this._recognize(event); | 
|     }; | 
|     GestureMgr.prototype.clear = function () { | 
|         this._track.length = 0; | 
|         return this; | 
|     }; | 
|     GestureMgr.prototype._doTrack = function (event, target, root) { | 
|         var touches = event.touches; | 
|         if (!touches) { | 
|             return; | 
|         } | 
|         var trackItem = { | 
|             points: [], | 
|             touches: [], | 
|             target: target, | 
|             event: event | 
|         }; | 
|         for (var i = 0, len = touches.length; i < len; i++) { | 
|             var touch = touches[i]; | 
|             var pos = eventUtil.clientToLocal(root, touch, {}); | 
|             trackItem.points.push([pos.zrX, pos.zrY]); | 
|             trackItem.touches.push(touch); | 
|         } | 
|         this._track.push(trackItem); | 
|     }; | 
|     GestureMgr.prototype._recognize = function (event) { | 
|         for (var eventName in recognizers) { | 
|             if (recognizers.hasOwnProperty(eventName)) { | 
|                 var gestureInfo = recognizers[eventName](this._track, event); | 
|                 if (gestureInfo) { | 
|                     return gestureInfo; | 
|                 } | 
|             } | 
|         } | 
|     }; | 
|     return GestureMgr; | 
| }()); | 
| export { GestureMgr }; | 
| function dist(pointPair) { | 
|     var dx = pointPair[1][0] - pointPair[0][0]; | 
|     var dy = pointPair[1][1] - pointPair[0][1]; | 
|     return Math.sqrt(dx * dx + dy * dy); | 
| } | 
| function center(pointPair) { | 
|     return [ | 
|         (pointPair[0][0] + pointPair[1][0]) / 2, | 
|         (pointPair[0][1] + pointPair[1][1]) / 2 | 
|     ]; | 
| } | 
| var recognizers = { | 
|     pinch: function (tracks, event) { | 
|         var trackLen = tracks.length; | 
|         if (!trackLen) { | 
|             return; | 
|         } | 
|         var pinchEnd = (tracks[trackLen - 1] || {}).points; | 
|         var pinchPre = (tracks[trackLen - 2] || {}).points || pinchEnd; | 
|         if (pinchPre | 
|             && pinchPre.length > 1 | 
|             && pinchEnd | 
|             && pinchEnd.length > 1) { | 
|             var pinchScale = dist(pinchEnd) / dist(pinchPre); | 
|             !isFinite(pinchScale) && (pinchScale = 1); | 
|             event.pinchScale = pinchScale; | 
|             var pinchCenter = center(pinchEnd); | 
|             event.pinchX = pinchCenter[0]; | 
|             event.pinchY = pinchCenter[1]; | 
|             return { | 
|                 type: 'pinch', | 
|                 target: tracks[0].target, | 
|                 event: event | 
|             }; | 
|         } | 
|     } | 
| }; |