mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-08 02:45:38 +00:00
io/router: merge pointerQueue.deliverScrollEvents and deliverEvent
They're similar except for a bit of special handling for scroll events. Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
+7
-23
@@ -664,7 +664,7 @@ func (q *pointerQueue) Push(e pointer.Event, events *handlerEvents) {
|
|||||||
q.deliverDropEvent(p, events)
|
q.deliverDropEvent(p, events)
|
||||||
case pointer.Scroll:
|
case pointer.Scroll:
|
||||||
q.deliverEnterLeaveEvents(p, events, e)
|
q.deliverEnterLeaveEvents(p, events, e)
|
||||||
q.deliverScrollEvent(p, events, e)
|
q.deliverEvent(p, events, e)
|
||||||
default:
|
default:
|
||||||
panic("unsupported pointer event type")
|
panic("unsupported pointer event type")
|
||||||
}
|
}
|
||||||
@@ -676,27 +676,6 @@ func (q *pointerQueue) Push(e pointer.Event, events *handlerEvents) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (q *pointerQueue) deliverEvent(p *pointerInfo, events *handlerEvents, e pointer.Event) {
|
func (q *pointerQueue) deliverEvent(p *pointerInfo, events *handlerEvents, e pointer.Event) {
|
||||||
foremost := true
|
|
||||||
if p.pressed && len(p.handlers) == 1 {
|
|
||||||
e.Priority = pointer.Grabbed
|
|
||||||
foremost = false
|
|
||||||
}
|
|
||||||
for _, k := range p.handlers {
|
|
||||||
h := q.handlers[k]
|
|
||||||
if e.Type&h.types == 0 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
e := e
|
|
||||||
if foremost {
|
|
||||||
foremost = false
|
|
||||||
e.Priority = pointer.Foremost
|
|
||||||
}
|
|
||||||
e.Position = q.invTransform(h.area, e.Position)
|
|
||||||
events.Add(k, e)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (q *pointerQueue) deliverScrollEvent(p *pointerInfo, events *handlerEvents, e pointer.Event) {
|
|
||||||
foremost := true
|
foremost := true
|
||||||
if p.pressed && len(p.handlers) == 1 {
|
if p.pressed && len(p.handlers) == 1 {
|
||||||
e.Priority = pointer.Grabbed
|
e.Priority = pointer.Grabbed
|
||||||
@@ -704,13 +683,18 @@ func (q *pointerQueue) deliverScrollEvent(p *pointerInfo, events *handlerEvents,
|
|||||||
}
|
}
|
||||||
var sx, sy = e.Scroll.X, e.Scroll.Y
|
var sx, sy = e.Scroll.X, e.Scroll.Y
|
||||||
for _, k := range p.handlers {
|
for _, k := range p.handlers {
|
||||||
|
h := q.handlers[k]
|
||||||
|
if e.Type == pointer.Scroll {
|
||||||
if sx == 0 && sy == 0 {
|
if sx == 0 && sy == 0 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
h := q.handlers[k]
|
|
||||||
// Distribute the scroll to the handler based on its ScrollRange.
|
// Distribute the scroll to the handler based on its ScrollRange.
|
||||||
sx, e.Scroll.X = setScrollEvent(sx, h.scrollRange.Min.X, h.scrollRange.Max.X)
|
sx, e.Scroll.X = setScrollEvent(sx, h.scrollRange.Min.X, h.scrollRange.Max.X)
|
||||||
sy, e.Scroll.Y = setScrollEvent(sy, h.scrollRange.Min.Y, h.scrollRange.Max.Y)
|
sy, e.Scroll.Y = setScrollEvent(sy, h.scrollRange.Min.Y, h.scrollRange.Max.Y)
|
||||||
|
}
|
||||||
|
if e.Type&h.types == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
e := e
|
e := e
|
||||||
if foremost {
|
if foremost {
|
||||||
foremost = false
|
foremost = false
|
||||||
|
|||||||
Reference in New Issue
Block a user