/**
* @private
* Touch event.
*/
Ext.define('Ext.event.Touch', {
extend: 'Ext.event.Dom',
requires: [
'Ext.util.Point'
],
constructor: function(event, info) {
if (info) {
this.set(info);
}
this.touchesMap = {};
this.changedTouches = this.cloneTouches(event.changedTouches);
this.touches = this.cloneTouches(event.touches);
this.targetTouches = this.cloneTouches(event.targetTouches);
return this.callParent([event]);
},
clone: function() {
return new this.self(this);
},
setTargets: function(targetsMap) {
this.doSetTargets(this.changedTouches, targetsMap);
this.doSetTargets(this.touches, targetsMap);
this.doSetTargets(this.targetTouches, targetsMap);
},
doSetTargets: function(touches, targetsMap) {
var i, ln, touch, identifier, targets;
for (i = 0,ln = touches.length; i < ln; i++) {
touch = touches[i];
identifier = touch.identifier;
targets = targetsMap[identifier];
if (targets) {
touch.targets = targets;
}
}
},
cloneTouches: function(touches) {
var map = this.touchesMap,
clone = [],
lastIdentifier = null,
i, ln, touch, identifier;
for (i = 0,ln = touches.length; i < ln; i++) {
touch = touches[i];
identifier = touch.identifier;
// A quick fix for a bug found in Bada 1.0 where all touches have
// idenfitier of 0
if (lastIdentifier !== null && identifier === lastIdentifier) {
identifier++;
}
lastIdentifier = identifier;
if (!map[identifier]) {
map[identifier] = {
pageX: touch.pageX,
pageY: touch.pageY,
identifier: identifier,
target: touch.target,
timeStamp: touch.timeStamp,
point: Ext.util.Point.fromTouch(touch),
targets: touch.targets
};
}
clone[i] = map[identifier];
}
return clone;
}
});