ui/input: move Router and input queues to internal package

Now that only app.Window needs the Router, make it unavailable for
clients.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2019-07-12 13:51:00 +02:00
parent 0d924a1950
commit cbdda4e9c5
4 changed files with 23 additions and 19 deletions
@@ -4,13 +4,14 @@ package input
import (
"gioui.org/ui"
"gioui.org/ui/input"
"gioui.org/ui/internal/ops"
"gioui.org/ui/key"
)
type keyQueue struct {
focus Key
handlers map[Key]*keyHandler
focus input.Key
handlers map[input.Key]*keyHandler
reader ui.OpsReader
state key.TextInputState
}
@@ -36,7 +37,7 @@ func (q *keyQueue) InputState() key.TextInputState {
func (q *keyQueue) Frame(root *ui.Ops, events handlerEvents) {
if q.handlers == nil {
q.handlers = make(map[Key]*keyHandler)
q.handlers = make(map[input.Key]*keyHandler)
}
for _, h := range q.handlers {
h.active = false
@@ -76,15 +77,15 @@ func (q *keyQueue) Frame(root *ui.Ops, events handlerEvents) {
}
}
func (q *keyQueue) Push(e Event, events handlerEvents) {
func (q *keyQueue) Push(e input.Event, events handlerEvents) {
if q.focus == nil {
return
}
events[q.focus] = append(events[q.focus], e)
}
func (q *keyQueue) resolveFocus(events handlerEvents) (Key, listenerPriority, bool) {
var k Key
func (q *keyQueue) resolveFocus(events handlerEvents) (input.Key, listenerPriority, bool) {
var k input.Key
var pri listenerPriority
var hide bool
loop:
@@ -111,7 +112,7 @@ loop:
h = new(keyHandler)
q.handlers[op.Key] = h
// Reset the handler on (each) first appearance.
events[op.Key] = []Event{key.FocusEvent{Focus: false}}
events[op.Key] = []input.Event{key.FocusEvent{Focus: false}}
}
h.active = true
case ops.TypeHideInput:
@@ -8,6 +8,7 @@ import (
"gioui.org/ui"
"gioui.org/ui/f32"
"gioui.org/ui/input"
"gioui.org/ui/internal/ops"
"gioui.org/ui/pointer"
)
@@ -15,10 +16,10 @@ import (
type pointerQueue struct {
hitTree []hitNode
areas []areaNode
handlers map[Key]*pointerHandler
handlers map[input.Key]*pointerHandler
pointers []pointerInfo
reader ui.OpsReader
scratch []Key
scratch []input.Key
}
type hitNode struct {
@@ -28,13 +29,13 @@ type hitNode struct {
pass bool
// For handler nodes.
key Key
key input.Key
}
type pointerInfo struct {
id pointer.ID
pressed bool
handlers []Key
handlers []input.Key
}
type pointerHandler struct {
@@ -102,7 +103,7 @@ func (q *pointerQueue) collectHandlers(r *ui.OpsReader, events handlerEvents, t
if !ok {
h = new(pointerHandler)
q.handlers[op.Key] = h
events[op.Key] = []Event{pointer.Event{Type: pointer.Cancel}}
events[op.Key] = []input.Event{pointer.Event{Type: pointer.Cancel}}
}
h.active = true
h.area = area
@@ -112,7 +113,7 @@ func (q *pointerQueue) collectHandlers(r *ui.OpsReader, events handlerEvents, t
}
}
func (q *pointerQueue) opHit(handlers *[]Key, pos f32.Point) {
func (q *pointerQueue) opHit(handlers *[]input.Key, pos f32.Point) {
// Track whether we're passing through hits.
pass := true
idx := len(q.hitTree) - 1
@@ -155,7 +156,7 @@ func (a *areaNode) hit(p f32.Point) bool {
func (q *pointerQueue) init() {
if q.handlers == nil {
q.handlers = make(map[Key]*pointerHandler)
q.handlers = make(map[input.Key]*pointerHandler)
}
}
@@ -176,7 +177,7 @@ func (q *pointerQueue) Frame(root *ui.Ops, events handlerEvents) {
}
}
func (q *pointerQueue) dropHandler(k Key) {
func (q *pointerQueue) dropHandler(k input.Key) {
delete(q.handlers, k)
for i := range q.pointers {
p := &q.pointers[i]
@@ -4,6 +4,7 @@ package input
import (
"gioui.org/ui"
"gioui.org/ui/input"
"gioui.org/ui/key"
"gioui.org/ui/pointer"
)
@@ -17,9 +18,9 @@ type Router struct {
handlers handlerEvents
}
type handlerEvents map[Key][]Event
type handlerEvents map[input.Key][]input.Event
func (q *Router) Events(k Key) []Event {
func (q *Router) Events(k input.Key) []input.Event {
events := q.handlers[k]
delete(q.handlers, k)
return events
@@ -34,7 +35,7 @@ func (q *Router) Frame(ops *ui.Ops) {
q.kqueue.Frame(ops, q.handlers)
}
func (q *Router) Add(e Event) {
func (q *Router) Add(e input.Event) {
q.init()
switch e := e.(type) {
case pointer.Event:
+2 -1
View File
@@ -12,6 +12,7 @@ import (
"gioui.org/ui"
"gioui.org/ui/app/internal/gpu"
"gioui.org/ui/input"
iinput "gioui.org/ui/app/internal/input"
"gioui.org/ui/internal/ops"
"gioui.org/ui/key"
)
@@ -46,7 +47,7 @@ type Window struct {
nextFrame time.Time
delayedDraw *time.Timer
router input.Router
router iinput.Router
reader ui.OpsReader
}