From 35e477757bf45b6db52482838e7599e8ed7746d6 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Mon, 8 Jun 2020 13:05:06 +0200 Subject: [PATCH] io/router: remove redundant pointerHandler.transform field The area transform is already stored in areaNode. Updates gio#129 Signed-off-by: Elias Naur --- io/router/pointer.go | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/io/router/pointer.go b/io/router/pointer.go index c9037535..a6c64fd2 100644 --- a/io/router/pointer.go +++ b/io/router/pointer.go @@ -44,7 +44,6 @@ type pointerInfo struct { type pointerHandler struct { area int active bool - transform op.TransformOp wantsGrab bool types pointer.Type } @@ -108,7 +107,6 @@ func (q *pointerQueue) collectHandlers(r *ops.Reader, events *handlerEvents, t o } h.active = true h.area = area - h.transform = t h.wantsGrab = op.Grab h.types = op.Types } @@ -139,10 +137,18 @@ func (q *pointerQueue) opHit(handlers *[]event.Tag, pos f32.Point) { } } +func (q *pointerQueue) invTransform(areaIdx int, p f32.Point) f32.Point { + if areaIdx == -1 { + return p + } + return q.areas[areaIdx].trans.Invert().Transform(p) +} + func (q *pointerQueue) hit(areaIdx int, p f32.Point) bool { for areaIdx != -1 { a := &q.areas[areaIdx] - if !a.hit(p) { + p := a.trans.Invert().Transform(p) + if !a.area.Hit(p) { return false } areaIdx = a.next @@ -150,11 +156,6 @@ func (q *pointerQueue) hit(areaIdx int, p f32.Point) bool { return true } -func (a *areaNode) hit(p f32.Point) bool { - p = a.trans.Invert().Transform(p) - return a.area.Hit(p) -} - func (q *pointerQueue) init() { if q.handlers == nil { q.handlers = make(map[event.Tag]*pointerHandler) @@ -272,7 +273,7 @@ func (q *pointerQueue) deliverEvent(p *pointerInfo, events *handlerEvents, e poi e.Priority = pointer.Foremost } - e.Position = h.transform.Invert().Transform(e.Position) + e.Position = q.invTransform(h.area, e.Position) if e.Type&h.types == e.Type { foremost = false @@ -303,7 +304,7 @@ func (q *pointerQueue) deliverEnterLeaveEvents(p *pointerInfo, events *handlerEv } } - e.Position = h.transform.Invert().Transform(e.Position) + e.Position = q.invTransform(h.area, e.Position) switch { case !hit && entered != -1: