mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-01 15:45:38 +00:00
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:
@@ -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
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user