mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-01 07:35:40 +00:00
layout: move Context to its own file
Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
// SPDX-License-Identifier: Unlicense OR MIT
|
||||
|
||||
package layout
|
||||
|
||||
import (
|
||||
"image"
|
||||
|
||||
"gioui.org/io/event"
|
||||
"gioui.org/io/system"
|
||||
"gioui.org/op"
|
||||
)
|
||||
|
||||
// Context carries the state needed by almost all layouts and widgets.
|
||||
type Context struct {
|
||||
// Constraints track the constraints for the active widget or
|
||||
// layout.
|
||||
Constraints Constraints
|
||||
// Dimensions track the result of the most recent layout
|
||||
// operation.
|
||||
Dimensions Dimensions
|
||||
|
||||
system.Config
|
||||
event.Queue
|
||||
*op.Ops
|
||||
}
|
||||
|
||||
// layout a widget with a set of constraints and return its
|
||||
// dimensions. The widget dimensions are constrained abd the previous
|
||||
// constraints are restored after layout.
|
||||
func ctxLayout(gtx *Context, cs Constraints, w Widget) Dimensions {
|
||||
saved := gtx.Constraints
|
||||
gtx.Constraints = cs
|
||||
gtx.Dimensions = Dimensions{}
|
||||
w()
|
||||
gtx.Dimensions.Size = cs.Constrain(gtx.Dimensions.Size)
|
||||
gtx.Constraints = saved
|
||||
return gtx.Dimensions
|
||||
}
|
||||
|
||||
// Reset the context. The constraints' minimum and maximum values are
|
||||
// set to the size.
|
||||
func (c *Context) Reset(cfg system.Config, size image.Point) {
|
||||
c.Constraints = RigidConstraints(size)
|
||||
c.Dimensions = Dimensions{}
|
||||
c.Config = cfg
|
||||
if c.Ops == nil {
|
||||
c.Ops = new(op.Ops)
|
||||
}
|
||||
c.Ops.Reset()
|
||||
}
|
||||
@@ -5,8 +5,6 @@ package layout
|
||||
import (
|
||||
"image"
|
||||
|
||||
"gioui.org/io/event"
|
||||
"gioui.org/io/system"
|
||||
"gioui.org/op"
|
||||
"gioui.org/unit"
|
||||
)
|
||||
@@ -44,20 +42,6 @@ type Direction uint8
|
||||
// computing dimensions for a user interface element.
|
||||
type Widget func()
|
||||
|
||||
// Context carries the state needed by almost all layouts and widgets.
|
||||
type Context struct {
|
||||
// Constraints track the constraints for the active widget or
|
||||
// layout.
|
||||
Constraints Constraints
|
||||
// Dimensions track the result of the most recent layout
|
||||
// operation.
|
||||
Dimensions Dimensions
|
||||
|
||||
system.Config
|
||||
event.Queue
|
||||
*op.Ops
|
||||
}
|
||||
|
||||
const (
|
||||
Start Alignment = iota
|
||||
End
|
||||
@@ -82,31 +66,6 @@ const (
|
||||
Vertical
|
||||
)
|
||||
|
||||
// layout a widget with a set of constraints and return its
|
||||
// dimensions. The widget dimensions are constrained abd the previous
|
||||
// constraints are restored after layout.
|
||||
func ctxLayout(gtx *Context, cs Constraints, w Widget) Dimensions {
|
||||
saved := gtx.Constraints
|
||||
gtx.Constraints = cs
|
||||
gtx.Dimensions = Dimensions{}
|
||||
w()
|
||||
gtx.Dimensions.Size = cs.Constrain(gtx.Dimensions.Size)
|
||||
gtx.Constraints = saved
|
||||
return gtx.Dimensions
|
||||
}
|
||||
|
||||
// Reset the context. The constraints' minimum and maximum values are
|
||||
// set to the size.
|
||||
func (c *Context) Reset(cfg system.Config, size image.Point) {
|
||||
c.Constraints = RigidConstraints(size)
|
||||
c.Dimensions = Dimensions{}
|
||||
c.Config = cfg
|
||||
if c.Ops == nil {
|
||||
c.Ops = new(op.Ops)
|
||||
}
|
||||
c.Ops.Reset()
|
||||
}
|
||||
|
||||
// Constrain a value to the range [Min; Max].
|
||||
func (c Constraint) Constrain(v int) int {
|
||||
if v < c.Min {
|
||||
|
||||
Reference in New Issue
Block a user