    /** * A event recognizer which knows when you pinch. */Ext.define('Ext.event.gesture.Pinch', {    extend: 'Ext.event.gesture.MultiTouch',     priority: 700,     handledEvents: ['pinchstart', 'pinch', 'pinchend', 'pinchcancel'],     /**     * @member Ext.dom.Element     * @event pinchstart     * Fired once when a pinch has started.     * @param {Ext.event.Event} event The {@link Ext.event.Event} event encapsulating the DOM event.     * @param {HTMLElement} node The target of the event.     * @param {Object} options The options object passed to Ext.mixin.Observable.addListener.     */     /**     * @member Ext.dom.Element     * @event pinch     * Fires continuously when there is pinching (the touch must move for this to be fired).     * @param {Ext.event.Event} event The {@link Ext.event.Event} event encapsulating the DOM event.     * @param {HTMLElement} node The target of the event.     * @param {Object} options The options object passed to Ext.mixin.Observable.addListener.     */     /**     * @member Ext.dom.Element     * @event pinchend     * Fires when a pinch has ended.     * @param {Ext.event.Event} event The {@link Ext.event.Event} event encapsulating the DOM event.     * @param {HTMLElement} node The target of the event.     * @param {Object} options The options object passed to Ext.mixin.Observable.addListener.     */     /**     * @property {Number} scale      * The scape of a pinch event.     *     * **This is only available when the event type is `pinch`**     * @member Ext.event.Event     */     startDistance: 0,     lastTouches: null,     onTouchMove: function(e) {        var me = this,            touches, firstPoint, secondPoint, distance;         if (me.isTracking) {            touches = e.touches;             firstPoint = touches[0].point;            secondPoint = touches[1].point;             distance = firstPoint.getDistanceTo(secondPoint);             if (distance === 0) {                return;            }             if (!me.isStarted) {                 me.isStarted = true;                 me.startDistance = distance;                 me.fire('pinchstart', e, {                    touches: touches,                    distance: distance,                    scale: 1                });            } else {                me.fire('pinch', e, {                    touches: touches,                    distance: distance,                    scale: distance / me.startDistance                });            }        }    },     onTouchEnd: function(e) {        if (this.isStarted) {            this.fire('pinchend', e);        }         return this.callParent([e]);    },     onCancel: function(e) {        this.fire('pinchcancel', e, null, true);    },     reset: function() {        this.lastTouches = null;        this.startDistance = 0;        return this.callParent();    }}, function(Pinch) {    var gestures = Ext.manifest.gestures;    Pinch.instance = new Pinch(gestures && gestures.pinch);});