added new fire() method which fires synthetic events and custom events. Simulate() now simulates user events with event bubbling

This commit is contained in:
Eric Rowell
2012-11-03 17:19:21 -07:00
parent df829e1e89
commit 0748692c1d
8 changed files with 108 additions and 76 deletions

View File

@@ -589,15 +589,25 @@ Kinetic.Node.prototype = {
}
},
/**
* simulate event
* simulate event with event bubbling
* @name simulate
* @methodOf Kinetic.Node.prototype
* @param {String} eventType
* @param {Object} event attribute
* @param {EventObject} evt event object
*/
simulate: function(eventType, evt) {
this._handleEvent(eventType, evt || {});
},
/**
* synthetically fire an event.  The event object will not bubble up the Node tree.  You can also pass in custom properties
* @name fire
* @methodOf Kinetic.Node.prototype
* @param {String} eventType
* @param {Object} obj optional object which can be used to pass parameters
*/
fire: function(eventType, obj) {
this._executeHandlers(eventType, obj || {});
},
/**
* get absolute transform of the node which takes into
* account its parent transforms
@@ -902,14 +912,11 @@ Kinetic.Node.prototype = {
if(okayToRun) {
if(el[eventType]) {
var events = el[eventType];
for(var i = 0; i < events.length; i++) {
events[i].handler.apply(this, [evt]);
}
this.fire(eventType, evt);
}
// simulate event bubbling
if(Kinetic.Global.BUBBLE_WHITELIST.indexOf(eventType) >= 0 && !evt.cancelBubble && this.parent) {
if(!evt.cancelBubble && this.parent) {
if(compareShape && compareShape.parent) {
this._handleEvent.call(this.parent, eventType, evt, compareShape.parent);
}
@@ -919,6 +926,12 @@ Kinetic.Node.prototype = {
}
}
},
_executeHandlers: function(eventType, evt) {
var events = this.eventListeners[eventType];
for(var i = 0; i < events.length; i++) {
events[i].handler.apply(this, [evt]);
}
},
_shouldDraw: function(canvas) {
return (this.isVisible() && (!canvas || canvas.name !== 'buffer' || this.getListening()));
}