diff --git a/src/Stage.js b/src/Stage.js
index cdc54c15..f1082d49 100644
--- a/src/Stage.js
+++ b/src/Stage.js
@@ -393,10 +393,13 @@
* if no shape was detected, clear target shape and try
* to run mouseout from previous target shape
*/
- else if(this.targetShape && !go.isDragging()) {
+ else {
+ if(this.targetShape && !go.isDragging()) {
this.targetShape._fireAndBubble(MOUSEOUT, evt);
this.targetShape._fireAndBubble(MOUSELEAVE, evt);
this.targetShape = null;
+ }
+ this._fire(MOUSEMOVE, evt);
}
if(dd) {
@@ -406,99 +409,81 @@
_mousedown: function(evt) {
this._setPointerPosition(evt);
var go = Kinetic.Global,
- obj = this.getIntersection(this.getPointerPosition()),
- shape;
+ obj = this.getIntersection(this.getPointerPosition()),
+ shape = obj && obj.shape ? obj.shape : this;
- if(obj && obj.shape) {
- shape = obj.shape;
- this.clickStart = true;
- this.clickStartShape = shape;
- shape._fireAndBubble(MOUSEDOWN, evt);
- }
-
- //init stage drag and drop
- if(this.isDraggable() && !go.isDragReady()) {
- this.startDrag(evt);
- }
+ this.clickStart = true;
+ this.clickStartShape = shape;
+ shape._fireAndBubble(MOUSEDOWN, evt);
},
_mouseup: function(evt) {
this._setPointerPosition(evt);
var that = this,
go = Kinetic.Global,
obj = this.getIntersection(this.getPointerPosition()),
- shape;
+ shape = obj && obj.shape ? obj.shape : this;
- if(obj && obj.shape) {
- shape = obj.shape;
- shape._fireAndBubble(MOUSEUP, evt);
- // detect if click or double click occurred
- if(this.clickStart) {
- /*
- * if dragging and dropping, or if click doesn't map to
- * the correct shape, don't fire click or dbl click event
- */
- if(!go.isDragging() && shape._id === this.clickStartShape._id) {
- shape._fireAndBubble(CLICK, evt);
+ shape._fireAndBubble(MOUSEUP, evt);
- if(this.inDoubleClickWindow) {
- shape._fireAndBubble(DBL_CLICK, evt);
- }
- this.inDoubleClickWindow = true;
- setTimeout(function() {
- that.inDoubleClickWindow = false;
- }, this.dblClickWindow);
+ // detect if click or double click occurred
+ if(this.clickStart) {
+ /*
+ * if dragging and dropping, or if click doesn't map to
+ * the correct shape, don't fire click or dbl click event
+ */
+ if(!go.isDragging() && shape._id === this.clickStartShape._id) {
+ shape._fireAndBubble(CLICK, evt);
+
+ if(this.inDoubleClickWindow) {
+ shape._fireAndBubble(DBL_CLICK, evt);
}
+ this.inDoubleClickWindow = true;
+ setTimeout(function() {
+ that.inDoubleClickWindow = false;
+ }, this.dblClickWindow);
}
}
+
this.clickStart = false;
},
_touchstart: function(evt) {
this._setPointerPosition(evt);
var go = Kinetic.Global,
obj = this.getIntersection(this.getPointerPosition()),
- shape;
+ shape = obj && obj.shape ? obj.shape : this;
- if(obj && obj.shape) {
- shape = obj.shape;
- this.tapStart = true;
- this.tapStartShape = shape;
- shape._fireAndBubble(TOUCHSTART, evt);
- }
-
- //init stage drag and drop
- if(this.isDraggable() && !go.isDragReady()) {
- this.startDrag(evt);
- }
+ shape = obj.shape;
+ this.tapStart = true;
+ this.tapStartShape = shape;
+ shape._fireAndBubble(TOUCHSTART, evt);
},
_touchend: function(evt) {
this._setPointerPosition(evt);
var that = this,
go = Kinetic.Global,
obj = this.getIntersection(this.getPointerPosition()),
- shape;
+ shape = obj && obj.shape ? obj.shape : this;
- if(obj && obj.shape) {
- shape = obj.shape;
- shape._fireAndBubble(TOUCHEND, evt);
+ shape = obj.shape;
+ shape._fireAndBubble(TOUCHEND, evt);
- // detect if tap or double tap occurred
- if(this.tapStart) {
- /*
- * if dragging and dropping, don't fire tap or dbltap
- * event
- */
- if(!go.isDragging() && shape._id === this.tapStartShape._id) {
- shape._fireAndBubble(TAP, evt);
+ // detect if tap or double tap occurred
+ if(this.tapStart) {
+ /*
+ * if dragging and dropping, don't fire tap or dbltap
+ * event
+ */
+ if(!go.isDragging() && shape._id === this.tapStartShape._id) {
+ shape._fireAndBubble(TAP, evt);
- if(this.inDoubleClickWindow) {
- shape._fireAndBubble(DBL_TAP, evt);
- }
- this.inDoubleClickWindow = true;
- setTimeout(function() {
- that.inDoubleClickWindow = false;
- }, this.dblClickWindow);
+ if(this.inDoubleClickWindow) {
+ shape._fireAndBubble(DBL_TAP, evt);
}
+ this.inDoubleClickWindow = true;
+ setTimeout(function() {
+ that.inDoubleClickWindow = false;
+ }, this.dblClickWindow);
}
}
@@ -508,13 +493,11 @@
this._setPointerPosition(evt);
var dd = Kinetic.DD,
obj = this.getIntersection(this.getPointerPosition()),
- shape;
+ shape = obj && obj.shape ? obj.shape : this;
- if(obj && obj.shape) {
- shape = obj.shape;
- shape._fireAndBubble(TOUCHMOVE, evt);
- }
-
+ shape = obj.shape;
+ shape._fireAndBubble(TOUCHMOVE, evt);
+
// start drag and drop
if(dd) {
dd._drag(evt);
diff --git a/tests/html/functionalTests.html b/tests/html/functionalTests.html
index 2c43ce0b..54b807f4 100644
--- a/tests/html/functionalTests.html
+++ b/tests/html/functionalTests.html
@@ -7,7 +7,6 @@
-