Skip to content

Commit b3bf57c

Browse files
committed
Implement Item#onMouseEnter / #onMouseLeave.
1 parent c0e6d5b commit b3bf57c

2 files changed

Lines changed: 23 additions & 15 deletions

File tree

src/ui/CanvasView.js

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -74,28 +74,18 @@ var CanvasView = View.extend(/** @lends CanvasView# */{
7474
tolerance: 0
7575
};
7676

77-
function callEvent(item, event, bubble) {
78-
var called = false;
79-
while (item) {
80-
called = item.fire(event.type, event) || called;
81-
if (called && (!bubble || event._stopped))
82-
break;
83-
item = item.getParent();
84-
}
85-
return called;
86-
}
87-
8877
function handleEvent(view, type, event, point) {
8978
if (view._eventCounters[type]) {
9079
var hit = view._project.hitTest(point, hitOptions);
9180
if (hit && hit.item) {
92-
callEvent(hit.item, new MouseEvent(type, point,
93-
hit.item, event), false);
94-
return hit;
81+
new MouseEvent(type, point, hit.item, event)._call();
82+
return hit.item;
9583
}
9684
}
9785
}
9886

87+
var overItem = null;
88+
9989
return {
10090
_onMouseDown: function(event, point) {
10191
handleEvent(this, 'mousedown', event, point);
@@ -106,7 +96,12 @@ var CanvasView = View.extend(/** @lends CanvasView# */{
10696
},
10797

10898
_onMouseMove: function(event, point) {
109-
handleEvent(this, 'mousemove', event, point);
99+
var item = handleEvent(this, 'mousemove', event, point);
100+
if (item != overItem) {
101+
new MouseEvent('mouseleave', point, overItem, event)._call();
102+
overItem = item;
103+
new MouseEvent('mouseenter', point, item, event)._call();
104+
}
110105
}
111106
};
112107
});

src/ui/MouseEvent.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,5 +36,18 @@ var MouseEvent = this.MouseEvent = Event.extend(/** @lends MouseEvent# */{
3636
+ ', target: ' + this.target
3737
+ ', modifiers: ' + this.getModifiers()
3838
+ ' }';
39+
},
40+
41+
// TODO: Move to Event perhaps?
42+
_call: function(bubble) {
43+
var item = this.target,
44+
called = false;
45+
while (item) {
46+
called = item.fire(this.type, this) || called;
47+
if (called && (!bubble || this._stopped))
48+
break;
49+
item = item.getParent();
50+
}
51+
return called;
3952
}
4053
});

0 commit comments

Comments
 (0)