diff --git a/io/pointer/pointer.go b/io/pointer/pointer.go index f7c82714..de862bb0 100644 --- a/io/pointer/pointer.go +++ b/io/pointer/pointer.go @@ -265,6 +265,22 @@ func (op InputOp) Add(o *op.Ops) { } func (t Type) String() string { + if t == Cancel { + return "Cancel" + } + var buf strings.Builder + for tt := Type(1); tt > 0; tt <<= 1 { + if t&tt > 0 { + if buf.Len() > 0 { + buf.WriteByte('|') + } + buf.WriteString((t & tt).string()) + } + } + return buf.String() +} + +func (t Type) string() string { switch t { case Press: return "Press" diff --git a/io/pointer/pointer_test.go b/io/pointer/pointer_test.go index aaf4e006..cce2c454 100644 --- a/io/pointer/pointer_test.go +++ b/io/pointer/pointer_test.go @@ -8,6 +8,32 @@ import ( "gioui.org/op" ) +func TestTypeString(t *testing.T) { + for _, tc := range []struct { + typ Type + res string + }{ + {Cancel, "Cancel"}, + {Press, "Press"}, + {Release, "Release"}, + {Move, "Move"}, + {Drag, "Drag"}, + {Enter, "Enter"}, + {Leave, "Leave"}, + {Scroll, "Scroll"}, + {Enter | Leave, "Enter|Leave"}, + {Press | Release, "Press|Release"}, + {Enter | Leave | Press | Release, "Press|Release|Enter|Leave"}, + {Move | Scroll, "Move|Scroll"}, + } { + t.Run(tc.res, func(t *testing.T) { + if want, got := tc.res, tc.typ.String(); want != got { + t.Errorf("got %q; want %q", got, want) + } + }) + } +} + func TestTransformChecks(t *testing.T) { defer func() { if err := recover(); err == nil {