mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-01 07:35:40 +00:00
app: [API] remove assumption that FrameEvent.Queue is an interface
We're about to make the Queue field of FrameEvent (and layout.Context) a concrete type. Remove the interface assumption from app.Window. Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
+14
-24
@@ -76,7 +76,7 @@ type Window struct {
|
||||
// metric is the metric from the most recent frame.
|
||||
metric unit.Metric
|
||||
|
||||
queue queue
|
||||
queue router.Router
|
||||
cursor pointer.Cursor
|
||||
decorations struct {
|
||||
op.Ops
|
||||
@@ -132,12 +132,6 @@ type callbacks struct {
|
||||
waitEvents []event.Event
|
||||
}
|
||||
|
||||
// queue is an event.Queue implementation that distributes system events
|
||||
// to the input handlers declared in the most recent frame.
|
||||
type queue struct {
|
||||
q router.Router
|
||||
}
|
||||
|
||||
// NewWindow creates a new window for a set of window
|
||||
// options. The options are hints; the platform is free to
|
||||
// ignore or adjust them.
|
||||
@@ -279,7 +273,7 @@ func (w *Window) validateAndProcess(d driver, size image.Point, sync bool, frame
|
||||
return err
|
||||
}
|
||||
}
|
||||
w.queue.q.Frame(frame)
|
||||
w.queue.Frame(frame)
|
||||
// Let the client continue as soon as possible, in particular before
|
||||
// a potentially blocking Present.
|
||||
signal()
|
||||
@@ -312,7 +306,7 @@ func (w *Window) processFrame(d driver) {
|
||||
delete(w.semantic.ids, k)
|
||||
}
|
||||
w.semantic.uptodate = false
|
||||
q := &w.queue.q
|
||||
q := &w.queue
|
||||
switch q.TextInputState() {
|
||||
case router.TextInputOpen:
|
||||
d.ShowTextInput(true)
|
||||
@@ -529,7 +523,7 @@ func (c *callbacks) AppendSemanticDiffs(diffs []router.SemanticID) []router.Sema
|
||||
|
||||
func (c *callbacks) SemanticAt(pos f32.Point) (router.SemanticID, bool) {
|
||||
c.w.updateSemantics()
|
||||
return c.w.queue.q.SemanticAt(pos)
|
||||
return c.w.queue.SemanticAt(pos)
|
||||
}
|
||||
|
||||
func (c *callbacks) EditorState() editorState {
|
||||
@@ -572,8 +566,8 @@ func (c *callbacks) SetEditorSnippet(r key.Range) {
|
||||
}
|
||||
|
||||
func (w *Window) moveFocus(dir router.FocusDirection, d driver) {
|
||||
if w.queue.q.MoveFocus(dir) {
|
||||
w.queue.q.RevealFocus(w.viewport)
|
||||
if w.queue.MoveFocus(dir) {
|
||||
w.queue.RevealFocus(w.viewport)
|
||||
} else {
|
||||
var v image.Point
|
||||
switch dir {
|
||||
@@ -590,18 +584,18 @@ func (w *Window) moveFocus(dir router.FocusDirection, d driver) {
|
||||
}
|
||||
const scrollABit = unit.Dp(50)
|
||||
dist := v.Mul(int(w.metric.Dp(scrollABit)))
|
||||
w.queue.q.ScrollFocus(dist)
|
||||
w.queue.ScrollFocus(dist)
|
||||
}
|
||||
}
|
||||
|
||||
func (c *callbacks) ClickFocus() {
|
||||
c.w.queue.q.ClickFocus()
|
||||
c.w.queue.ClickFocus()
|
||||
c.w.setNextFrame(time.Time{})
|
||||
c.w.updateAnimation(c.d)
|
||||
}
|
||||
|
||||
func (c *callbacks) ActionAt(p f32.Point) (system.Action, bool) {
|
||||
return c.w.queue.q.ActionAt(p)
|
||||
return c.w.queue.ActionAt(p)
|
||||
}
|
||||
|
||||
func (e *editorState) Replace(r key.Range, text string) {
|
||||
@@ -765,7 +759,7 @@ func (w *Window) updateSemantics() {
|
||||
}
|
||||
w.semantic.uptodate = true
|
||||
w.semantic.prevTree, w.semantic.tree = w.semantic.tree, w.semantic.prevTree
|
||||
w.semantic.tree = w.queue.q.AppendSemantics(w.semantic.tree[:0])
|
||||
w.semantic.tree = w.queue.AppendSemantics(w.semantic.tree[:0])
|
||||
w.semantic.root = w.semantic.tree[0].ID
|
||||
for _, n := range w.semantic.tree {
|
||||
w.semantic.ids[n.ID] = n
|
||||
@@ -855,7 +849,7 @@ func (w *Window) processEvent(d driver, e event.Event) bool {
|
||||
}
|
||||
// Scroll to focus if viewport is shrinking in any dimension.
|
||||
if old, new := w.viewport.Size(), viewport.Size(); new.X < old.X || new.Y < old.Y {
|
||||
w.queue.q.RevealFocus(viewport)
|
||||
w.queue.RevealFocus(viewport)
|
||||
}
|
||||
w.viewport = viewport
|
||||
viewSize := e2.Size
|
||||
@@ -894,7 +888,7 @@ func (w *Window) processEvent(d driver, e event.Event) bool {
|
||||
w.out <- e2
|
||||
case wakeupEvent:
|
||||
case event.Event:
|
||||
handled := w.queue.q.Queue(e2)
|
||||
handled := w.queue.Queue(e2)
|
||||
if e, ok := e.(key.Event); ok && !handled {
|
||||
if e.State == key.Press {
|
||||
handled = true
|
||||
@@ -919,7 +913,7 @@ func (w *Window) processEvent(d driver, e event.Event) bool {
|
||||
// As a special case, the top-most input handler receives all unhandled
|
||||
// events.
|
||||
if !handled {
|
||||
handled = w.queue.q.QueueTopmost(e)
|
||||
handled = w.queue.QueueTopmost(e)
|
||||
}
|
||||
}
|
||||
w.updateCursor(d)
|
||||
@@ -982,7 +976,7 @@ func (w *Window) NextEvent() event.Event {
|
||||
}
|
||||
|
||||
func (w *Window) updateCursor(d driver) {
|
||||
if c := w.queue.q.Cursor(); c != w.cursor {
|
||||
if c := w.queue.Cursor(); c != w.cursor {
|
||||
w.cursor = c
|
||||
d.SetCursor(c)
|
||||
}
|
||||
@@ -1073,10 +1067,6 @@ func (w *Window) Perform(actions system.Action) {
|
||||
}
|
||||
}
|
||||
|
||||
func (q *queue) Events(k event.Tag) []event.Event {
|
||||
return q.q.Events(k)
|
||||
}
|
||||
|
||||
// Title sets the title of the window.
|
||||
func Title(t string) Option {
|
||||
return func(_ unit.Metric, cnf *Config) {
|
||||
|
||||
Reference in New Issue
Block a user