@@ -52,6 +52,8 @@ void _flushPointerEventQueue() {
52
52
53
53
public readonly HashSet < HitTestTarget > lastMoveTargets = new HashSet < HitTestTarget > ( ) ;
54
54
55
+ readonly HashSet < HitTestEntry > _enteredTargets = new HashSet < HitTestEntry > ( ) ;
56
+
55
57
void _handlePointerEvent ( PointerEvent evt ) {
56
58
if ( evt is PointerScrollEvent ) {
57
59
this . _handlePointerScrollEvent ( evt ) ;
@@ -106,22 +108,18 @@ void _handlePointerHoverEvent(PointerEvent evt) {
106
108
HitTestResult result = new HitTestResult ( ) ;
107
109
this . hitTest ( result , evt . position ) ;
108
110
109
- // enter event
111
+ D . assert ( this . _enteredTargets . Count == 0 ) ;
110
112
foreach ( var hitTestEntry in result . path ) {
111
113
if ( this . lastMoveTargets . Contains ( hitTestEntry . target ) ) {
112
114
hitTestEntry . target . handleEvent ( evt , hitTestEntry ) ;
113
115
this . lastMoveTargets . Remove ( hitTestEntry . target ) ;
114
116
}
115
117
else {
116
- hitTestEntry . target . handleEvent ( new PointerEnterEvent (
117
- timeStamp : evt . timeStamp ,
118
- pointer : evt . pointer ,
119
- device : evt . device ,
120
- kind : evt . kind
121
- ) , hitTestEntry ) ;
118
+ this . _enteredTargets . Add ( hitTestEntry ) ;
122
119
}
123
120
}
124
121
122
+ //leave events
125
123
foreach ( var lastMoveTarget in this . lastMoveTargets ) {
126
124
lastMoveTarget . handleEvent ( new PointerLeaveEvent (
127
125
timeStamp : evt . timeStamp ,
@@ -131,11 +129,23 @@ void _handlePointerHoverEvent(PointerEvent evt) {
131
129
) , null ) ;
132
130
}
133
131
132
+ //enter events
133
+ foreach ( var hitTestEntry in this . _enteredTargets ) {
134
+ hitTestEntry . target . handleEvent ( new PointerEnterEvent (
135
+ timeStamp : evt . timeStamp ,
136
+ pointer : evt . pointer ,
137
+ device : evt . device ,
138
+ kind : evt . kind
139
+ ) , hitTestEntry ) ;
140
+ }
141
+
134
142
this . lastMoveTargets . Clear ( ) ;
135
143
foreach ( var hitTestEntry in result . path ) {
136
144
this . lastMoveTargets . Add ( hitTestEntry . target ) ;
137
145
}
138
146
147
+ this . _enteredTargets . Clear ( ) ;
148
+
139
149
this . dispatchEvent ( evt , result ) ;
140
150
}
141
151
0 commit comments