Skip to content
This repository was archived by the owner on Apr 29, 2021. It is now read-only.

Commit 3efb8ff

Browse files
authored
Merge pull request #138 from UnityTech/textselection
trigger pointer leave events before pointer enter
2 parents ad7d207 + 7ba4991 commit 3efb8ff

File tree

1 file changed

+17
-7
lines changed

1 file changed

+17
-7
lines changed

Runtime/gestures/binding.cs

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ void _flushPointerEventQueue() {
5252

5353
public readonly HashSet<HitTestTarget> lastMoveTargets = new HashSet<HitTestTarget>();
5454

55+
readonly HashSet<HitTestEntry> _enteredTargets = new HashSet<HitTestEntry>();
56+
5557
void _handlePointerEvent(PointerEvent evt) {
5658
if (evt is PointerScrollEvent) {
5759
this._handlePointerScrollEvent(evt);
@@ -106,22 +108,18 @@ void _handlePointerHoverEvent(PointerEvent evt) {
106108
HitTestResult result = new HitTestResult();
107109
this.hitTest(result, evt.position);
108110

109-
// enter event
111+
D.assert(this._enteredTargets.Count == 0);
110112
foreach (var hitTestEntry in result.path) {
111113
if (this.lastMoveTargets.Contains(hitTestEntry.target)) {
112114
hitTestEntry.target.handleEvent(evt, hitTestEntry);
113115
this.lastMoveTargets.Remove(hitTestEntry.target);
114116
}
115117
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);
122119
}
123120
}
124121

122+
//leave events
125123
foreach (var lastMoveTarget in this.lastMoveTargets) {
126124
lastMoveTarget.handleEvent(new PointerLeaveEvent(
127125
timeStamp: evt.timeStamp,
@@ -131,11 +129,23 @@ void _handlePointerHoverEvent(PointerEvent evt) {
131129
), null);
132130
}
133131

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+
134142
this.lastMoveTargets.Clear();
135143
foreach (var hitTestEntry in result.path) {
136144
this.lastMoveTargets.Add(hitTestEntry.target);
137145
}
138146

147+
this._enteredTargets.Clear();
148+
139149
this.dispatchEvent(evt, result);
140150
}
141151

0 commit comments

Comments
 (0)