Deliver is like Push, but delivers an event to a particular area.
(handlers map[event.Tag]*handler, areaIdx int, e pointer.Event)
| 680 | |
| 681 | // Deliver is like Push, but delivers an event to a particular area. |
| 682 | func (q *pointerQueue) Deliver(handlers map[event.Tag]*handler, areaIdx int, e pointer.Event) []taggedEvent { |
| 683 | scroll := e.Scroll |
| 684 | idx := len(q.hitTree) - 1 |
| 685 | // Locate first potential receiver. |
| 686 | for idx != -1 { |
| 687 | n := &q.hitTree[idx] |
| 688 | if n.area == areaIdx { |
| 689 | break |
| 690 | } |
| 691 | idx-- |
| 692 | } |
| 693 | var evts []taggedEvent |
| 694 | for idx != -1 { |
| 695 | n := &q.hitTree[idx] |
| 696 | idx = n.next |
| 697 | h, ok := handlers[n.tag] |
| 698 | if !ok || !h.filter.pointer.Matches(e) { |
| 699 | continue |
| 700 | } |
| 701 | e := e |
| 702 | if e.Kind == pointer.Scroll { |
| 703 | if scroll == (f32.Point{}) { |
| 704 | break |
| 705 | } |
| 706 | scroll, e.Scroll = h.filter.pointer.clampScroll(scroll) |
| 707 | } |
| 708 | e.Position = q.invTransform(h.pointer.areaPlusOne-1, e.Position) |
| 709 | evts = append(evts, taggedEvent{tag: n.tag, event: e}) |
| 710 | if e.Kind != pointer.Scroll { |
| 711 | break |
| 712 | } |
| 713 | } |
| 714 | return evts |
| 715 | } |
| 716 | |
| 717 | // SemanticArea returns the sematic content for area, and its parent area. |
| 718 | func (q *pointerQueue) SemanticArea(areaIdx int) (semanticContent, int) { |
no test coverage detected