mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-01 07:35:40 +00:00
layout,app,io/system: move Queue from app.Window to FrameEvent
Change gioui.org/commit/0e70fbc1262920a69c60409285795b6bb8701b09 added a note that app.Window.Queue must only be used during the processing of a FrameEvent. The change was added because a Gio user took the existence of app.Window.Queue to mean it was always available. This change reduces the scope of window Queues by moving it from Window to FrameEvent, and minimizes the risk of misuse by not offering Window.Queue at all. Note that the gioui.org/commit/a937a7653439333b8c6fc30c7a6039b717339766 change moved Window's Frame method (named Update) to FrameEvent for the same reason. Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
+5
-14
@@ -44,7 +44,7 @@ type Window struct {
|
||||
nextFrame time.Time
|
||||
delayedDraw *time.Timer
|
||||
|
||||
queue Queue
|
||||
queue queue
|
||||
|
||||
callbacks callbacks
|
||||
}
|
||||
@@ -53,9 +53,9 @@ type callbacks struct {
|
||||
w *Window
|
||||
}
|
||||
|
||||
// Queue is an event.Queue implementation that distributes system events
|
||||
// queue is an event.Queue implementation that distributes system events
|
||||
// to the input handlers declared in the most recent frame.
|
||||
type Queue struct {
|
||||
type queue struct {
|
||||
q router.Router
|
||||
}
|
||||
|
||||
@@ -107,16 +107,6 @@ func (w *Window) Events() <-chan event.Event {
|
||||
return w.out
|
||||
}
|
||||
|
||||
// Queue returns the Window's event queue. The queue contains the events
|
||||
// received since the last frame.
|
||||
//
|
||||
// Note: the Queue may only be used after receiving a FrameEvent and before the
|
||||
// next event is received, or the FrameEvent.Frame method is called, whichever
|
||||
// comes first.
|
||||
func (w *Window) Queue() *Queue {
|
||||
return &w.queue
|
||||
}
|
||||
|
||||
// update updates the Window. Paint operations updates the
|
||||
// window contents, input operations declare input handlers,
|
||||
// and so on. The supplied operations list completely replaces
|
||||
@@ -274,6 +264,7 @@ func (w *Window) run(opts *window.Options) {
|
||||
frameStart := time.Now()
|
||||
w.hasNextFrame = false
|
||||
e2.Frame = w.update
|
||||
e2.Queue = &w.queue
|
||||
w.out <- e2.FrameEvent
|
||||
if w.loop != nil {
|
||||
if e2.Sync {
|
||||
@@ -353,7 +344,7 @@ func (w *Window) run(opts *window.Options) {
|
||||
}
|
||||
}
|
||||
|
||||
func (q *Queue) Events(k event.Key) []event.Event {
|
||||
func (q *queue) Events(k event.Key) []event.Event {
|
||||
return q.q.Events(k)
|
||||
}
|
||||
|
||||
|
||||
+6
-3
@@ -8,11 +8,12 @@ import (
|
||||
"image"
|
||||
"time"
|
||||
|
||||
"gioui.org/io/event"
|
||||
"gioui.org/op"
|
||||
"gioui.org/unit"
|
||||
)
|
||||
|
||||
// A FrameEvent asks for a new frame in the form of a list of
|
||||
// A FrameEvent requests a new frame in the form of a list of
|
||||
// operations.
|
||||
type FrameEvent struct {
|
||||
Config Config
|
||||
@@ -20,9 +21,11 @@ type FrameEvent struct {
|
||||
Size image.Point
|
||||
// Insets is the insets to apply.
|
||||
Insets Insets
|
||||
// Frame replaces the window's frame with the new
|
||||
// frame.
|
||||
// Frame is the callback to supply the list of
|
||||
// operations to complete the FrameEvent.
|
||||
Frame func(frame *op.Ops)
|
||||
// Queue supplies the events for event handlers.
|
||||
Queue event.Queue
|
||||
}
|
||||
|
||||
// Config defines the essential properties of
|
||||
|
||||
Reference in New Issue
Block a user