mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-05 17:35:36 +00:00
io/pointer: add InputOp.Types to specify which types of events to receive
Signed-off-by: Gordon Klaus <gordon.klaus@gmail.com>
This commit is contained in:
+14
-5
@@ -46,6 +46,7 @@ type pointerHandler struct {
|
||||
active bool
|
||||
transform op.TransformOp
|
||||
wantsGrab bool
|
||||
types pointer.Type
|
||||
}
|
||||
|
||||
type areaOp struct {
|
||||
@@ -109,6 +110,7 @@ func (q *pointerQueue) collectHandlers(r *ops.Reader, events *handlerEvents, t o
|
||||
h.area = area
|
||||
h.transform = t
|
||||
h.wantsGrab = op.Grab
|
||||
h.types = op.Types
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -264,7 +266,7 @@ func (q *pointerQueue) deliverEvent(p *pointerInfo, events *handlerEvents, e poi
|
||||
}
|
||||
e.Position = h.transform.Invert().Transform(e.Position)
|
||||
|
||||
events.Add(k, e)
|
||||
addPointerEvent(events, k, e, h.types)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -293,15 +295,21 @@ func (q *pointerQueue) deliverEnterLeaveEvents(p *pointerInfo, events *handlerEv
|
||||
case !hit && entered != -1:
|
||||
p.entered = append(p.entered[:entered], p.entered[entered+1:]...)
|
||||
e.Type = pointer.Leave
|
||||
events.Add(k, e)
|
||||
addPointerEvent(events, k, e, h.types)
|
||||
case hit && entered == -1:
|
||||
p.entered = append(p.entered, k)
|
||||
e.Type = pointer.Enter
|
||||
events.Add(k, e)
|
||||
addPointerEvent(events, k, e, h.types)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func addPointerEvent(events *handlerEvents, k event.Tag, e pointer.Event, types pointer.Type) {
|
||||
if e.Type&types == e.Type {
|
||||
events.Add(k, e)
|
||||
}
|
||||
}
|
||||
|
||||
func (op *areaOp) Decode(d []byte) {
|
||||
if opconst.OpType(d[0]) != opconst.TypeArea {
|
||||
panic("invalid op")
|
||||
@@ -352,8 +360,9 @@ func decodePointerInputOp(d []byte, refs []interface{}) pointer.InputOp {
|
||||
panic("invalid op")
|
||||
}
|
||||
return pointer.InputOp{
|
||||
Tag: refs[0].(event.Tag),
|
||||
Grab: d[1] != 0,
|
||||
Tag: refs[0].(event.Tag),
|
||||
Grab: d[1] != 0,
|
||||
Types: pointer.Type(d[2]),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user