You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
125 lines
3.1 KiB
Go
125 lines
3.1 KiB
Go
// SPDX-License-Identifier: Unlicense OR MIT
|
|
|
|
// Package system contains events usually handled at the top-level
|
|
// program level.
|
|
package system
|
|
|
|
import (
|
|
"image"
|
|
"time"
|
|
|
|
"gioui.org/io/event"
|
|
"gioui.org/op"
|
|
"gioui.org/unit"
|
|
)
|
|
|
|
// A FrameEvent requests a new frame in the form of a list of
|
|
// operations that describes what to display and how to handle
|
|
// input.
|
|
type FrameEvent struct {
|
|
// Now is the current animation. Use Now instead of time.Now to
|
|
// synchronize animation and to avoid the time.Now call overhead.
|
|
Now time.Time
|
|
// Metric converts device independent dp and sp to device pixels.
|
|
Metric unit.Metric
|
|
// Size is the dimensions of the window.
|
|
Size image.Point
|
|
// Insets is the insets to apply.
|
|
Insets Insets
|
|
// Frame is the callback to supply the list of
|
|
// operations to complete the FrameEvent.
|
|
//
|
|
// Note that the operation list and the operations themselves
|
|
// may not be mutated until another FrameEvent is received from
|
|
// the same event source.
|
|
// That means that calls to frame.Reset and changes to referenced
|
|
// data such as ImageOp backing images should happen between
|
|
// receiving a FrameEvent and calling Frame.
|
|
//
|
|
// Example:
|
|
//
|
|
// var w *app.Window
|
|
// var frame *op.Ops
|
|
// for e := range w.Events() {
|
|
// if e, ok := e.(system.FrameEvent); ok {
|
|
// // Call frame.Reset and manipulate images for ImageOps
|
|
// // here.
|
|
// e.Frame(frame)
|
|
// }
|
|
// }
|
|
Frame func(frame *op.Ops)
|
|
// Queue supplies the events for event handlers.
|
|
Queue event.Queue
|
|
}
|
|
|
|
// DestroyEvent is the last event sent through
|
|
// a window event channel.
|
|
type DestroyEvent struct {
|
|
// Err is nil for normal window closures. If a
|
|
// window is prematurely closed, Err is the cause.
|
|
Err error
|
|
}
|
|
|
|
// ClipboardEvent is sent once for each request for the
|
|
// clipboard content.
|
|
type ClipboardEvent struct {
|
|
Text string
|
|
}
|
|
|
|
// Insets is the space taken up by
|
|
// system decoration such as translucent
|
|
// system bars and software keyboards.
|
|
type Insets struct {
|
|
Top, Bottom, Left, Right unit.Value
|
|
}
|
|
|
|
// A StageEvent is generated whenever the stage of a
|
|
// Window changes.
|
|
type StageEvent struct {
|
|
Stage Stage
|
|
}
|
|
|
|
// CommandEvent is a system event.
|
|
type CommandEvent struct {
|
|
Type CommandType
|
|
// Suppress the default action of the command.
|
|
Cancel bool
|
|
}
|
|
|
|
// Stage of a Window.
|
|
type Stage uint8
|
|
|
|
// CommandType is the type of a CommandEvent.
|
|
type CommandType uint8
|
|
|
|
const (
|
|
// StagePaused is the Stage for inactive Windows.
|
|
// Inactive Windows don't receive FrameEvents.
|
|
StagePaused Stage = iota
|
|
// StateRunning is for active Windows.
|
|
StageRunning
|
|
)
|
|
|
|
const (
|
|
// CommandBack is the command for a back action
|
|
// such as the Android back button.
|
|
CommandBack CommandType = iota
|
|
)
|
|
|
|
func (l Stage) String() string {
|
|
switch l {
|
|
case StagePaused:
|
|
return "StagePaused"
|
|
case StageRunning:
|
|
return "StageRunning"
|
|
default:
|
|
panic("unexpected Stage value")
|
|
}
|
|
}
|
|
|
|
func (FrameEvent) ImplementsEvent() {}
|
|
func (StageEvent) ImplementsEvent() {}
|
|
func (*CommandEvent) ImplementsEvent() {}
|
|
func (DestroyEvent) ImplementsEvent() {}
|
|
func (ClipboardEvent) ImplementsEvent() {}
|