io/router: support multiple pointer areas for same tag

Fixes gio#129

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2020-06-08 14:33:04 +02:00
parent 1c68b7d585
commit ea85e80dc8
2 changed files with 100 additions and 41 deletions
+44
View File
@@ -206,6 +206,22 @@ func TestPointerEnterLeave(t *testing.T) {
assertEventSequence(t, r.Events(handler1))
assertEventSequence(t, r.Events(handler2), pointer.Enter, pointer.Press)
// Check that a drag only affects the participating handlers.
r.Add(
// Leave
pointer.Event{
Type: pointer.Move,
Position: f32.Pt(25, 25),
},
// Enter
pointer.Event{
Type: pointer.Move,
Position: f32.Pt(50, 50),
},
)
assertEventSequence(t, r.Events(handler1))
assertEventSequence(t, r.Events(handler2), pointer.Leave, pointer.Drag, pointer.Enter, pointer.Drag)
// Check that a Release event generates Enter/Leave Events.
r.Add(
pointer.Event{
@@ -220,6 +236,34 @@ func TestPointerEnterLeave(t *testing.T) {
}
func TestMultipleAreas(t *testing.T) {
handler := new(int)
var ops op.Ops
addPointerHandler(&ops, handler, image.Rect(0, 0, 100, 100))
addPointerHandler(&ops, handler, image.Rect(50, 50, 200, 200))
var r Router
r.Frame(&ops)
// Hit first area, then second area, then both.
r.Add(
pointer.Event{
Type: pointer.Move,
Position: f32.Pt(25, 25),
},
pointer.Event{
Type: pointer.Move,
Position: f32.Pt(150, 150),
},
pointer.Event{
Type: pointer.Move,
Position: f32.Pt(50, 50),
},
)
assertEventSequence(t, r.Events(handler), pointer.Cancel, pointer.Enter, pointer.Move, pointer.Move, pointer.Move)
}
func TestPointerEnterLeaveNested(t *testing.T) {
handler1 := new(int)
handler2 := new(int)