mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-06 01:45:36 +00:00
io/pointer: add Drag event type
This eliminates needless redraws for handlers that care about drag events and not move events, like gesture.Scroll. Signed-off-by: Gordon Klaus <gordon.klaus@gmail.com>
This commit is contained in:
+2
-2
@@ -174,7 +174,7 @@ func (s *Scroll) Add(ops *op.Ops) {
|
|||||||
oph := pointer.InputOp{
|
oph := pointer.InputOp{
|
||||||
Tag: s,
|
Tag: s,
|
||||||
Grab: s.grab,
|
Grab: s.grab,
|
||||||
Types: pointer.Press | pointer.Move | pointer.Release | pointer.Scroll,
|
Types: pointer.Press | pointer.Drag | pointer.Release | pointer.Scroll,
|
||||||
}
|
}
|
||||||
oph.Add(ops)
|
oph.Add(ops)
|
||||||
if s.flinger.Active() {
|
if s.flinger.Active() {
|
||||||
@@ -234,7 +234,7 @@ func (s *Scroll) Scroll(cfg unit.Converter, q event.Queue, t time.Time, axis Axi
|
|||||||
iscroll := int(s.scroll)
|
iscroll := int(s.scroll)
|
||||||
s.scroll -= float32(iscroll)
|
s.scroll -= float32(iscroll)
|
||||||
total += iscroll
|
total += iscroll
|
||||||
case pointer.Move:
|
case pointer.Drag:
|
||||||
if !s.dragging || s.pid != e.PointerID {
|
if !s.dragging || s.pid != e.PointerID {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -12,7 +12,7 @@ Types
|
|||||||
|
|
||||||
Only events that match a specified list of types are delivered to a handler.
|
Only events that match a specified list of types are delivered to a handler.
|
||||||
|
|
||||||
For example, to receive Press, Move, and Release events (but not Enter,
|
For example, to receive Press, Drag, and Release events (but not Move, Enter,
|
||||||
Leave, or Scroll):
|
Leave, or Scroll):
|
||||||
|
|
||||||
var ops op.Ops
|
var ops op.Ops
|
||||||
@@ -20,7 +20,7 @@ Leave, or Scroll):
|
|||||||
|
|
||||||
pointer.InputOp{
|
pointer.InputOp{
|
||||||
Tag: h,
|
Tag: h,
|
||||||
Types: pointer.Press | pointer.Move | pointer.Release,
|
Types: pointer.Press | pointer.Drag | pointer.Release,
|
||||||
}.Add(ops)
|
}.Add(ops)
|
||||||
|
|
||||||
Scroll events are only delivered to the foremost scroll handler.
|
Scroll events are only delivered to the foremost scroll handler.
|
||||||
|
|||||||
@@ -92,6 +92,8 @@ const (
|
|||||||
Release
|
Release
|
||||||
// Move of a pointer.
|
// Move of a pointer.
|
||||||
Move
|
Move
|
||||||
|
// Drag of a pointer.
|
||||||
|
Drag
|
||||||
// Pointer enters an area watching for pointer input
|
// Pointer enters an area watching for pointer input
|
||||||
Enter
|
Enter
|
||||||
// Pointer leaves an area watching for pointer input
|
// Pointer leaves an area watching for pointer input
|
||||||
@@ -180,6 +182,8 @@ func (t Type) String() string {
|
|||||||
return "Cancel"
|
return "Cancel"
|
||||||
case Move:
|
case Move:
|
||||||
return "Move"
|
return "Move"
|
||||||
|
case Drag:
|
||||||
|
return "Drag"
|
||||||
case Enter:
|
case Enter:
|
||||||
return "Enter"
|
return "Enter"
|
||||||
case Leave:
|
case Leave:
|
||||||
|
|||||||
@@ -235,6 +235,10 @@ func (q *pointerQueue) Push(e pointer.Event, events *handlerEvents) {
|
|||||||
}
|
}
|
||||||
p := &q.pointers[pidx]
|
p := &q.pointers[pidx]
|
||||||
|
|
||||||
|
if e.Type == pointer.Move && p.pressed {
|
||||||
|
e.Type = pointer.Drag
|
||||||
|
}
|
||||||
|
|
||||||
q.deliverEnterLeaveEvents(p, events, e)
|
q.deliverEnterLeaveEvents(p, events, e)
|
||||||
if e.Type == pointer.Release {
|
if e.Type == pointer.Release {
|
||||||
q.deliverEvent(p, events, e)
|
q.deliverEvent(p, events, e)
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ func TestPointerDrag(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
assertEventSequence(t, r.Events(handler), pointer.Cancel, pointer.Enter, pointer.Press, pointer.Leave, pointer.Move)
|
assertEventSequence(t, r.Events(handler), pointer.Cancel, pointer.Enter, pointer.Press, pointer.Leave, pointer.Drag)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPointerMove(t *testing.T) {
|
func TestPointerMove(t *testing.T) {
|
||||||
@@ -446,7 +446,7 @@ func addPointerHandler(ops *op.Ops, tag event.Tag, area image.Rectangle) {
|
|||||||
pointer.Rect(area).Add(ops)
|
pointer.Rect(area).Add(ops)
|
||||||
pointer.InputOp{
|
pointer.InputOp{
|
||||||
Tag: tag,
|
Tag: tag,
|
||||||
Types: pointer.Press | pointer.Move | pointer.Release | pointer.Enter | pointer.Leave,
|
Types: pointer.Press | pointer.Release | pointer.Move | pointer.Drag | pointer.Enter | pointer.Leave,
|
||||||
}.Add(ops)
|
}.Add(ops)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user