From bbdedfa4a7328204688aa668fb08e1c9550eade8 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Mon, 2 Dec 2019 12:43:42 +0100 Subject: [PATCH] layout: move Context to its own file Signed-off-by: Elias Naur --- layout/context.go | 50 +++++++++++++++++++++++++++++++++++++++++++++++ layout/layout.go | 41 -------------------------------------- 2 files changed, 50 insertions(+), 41 deletions(-) create mode 100644 layout/context.go diff --git a/layout/context.go b/layout/context.go new file mode 100644 index 00000000..ee84a5c1 --- /dev/null +++ b/layout/context.go @@ -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() +} diff --git a/layout/layout.go b/layout/layout.go index af795fb6..9eee28d8 100644 --- a/layout/layout.go +++ b/layout/layout.go @@ -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 {