layout: expose Direction.Position calculation

Signed-off-by: Egon Elbre <egonelbre@gmail.com>
This commit is contained in:
Egon Elbre
2021-03-05 10:18:08 +02:00
parent 3627df7efa
commit 9e85b43b0c
+25 -15
View File
@@ -173,29 +173,39 @@ func (d Direction) Layout(gtx Context, w Widget) Dimensions {
if sz.Y < cs.Min.Y {
sz.Y = cs.Min.Y
}
var p image.Point
switch d {
case N, S, Center:
p.X = (sz.X - dims.Size.X) / 2
case NE, SE, E:
p.X = sz.X - dims.Size.X
}
switch d {
case W, Center, E:
p.Y = (sz.Y - dims.Size.Y) / 2
case SW, S, SE:
p.Y = sz.Y - dims.Size.Y
}
stack := op.Save(gtx.Ops)
defer op.Save(gtx.Ops).Load()
p := d.Position(dims.Size, sz)
op.Offset(FPt(p)).Add(gtx.Ops)
call.Add(gtx.Ops)
stack.Load()
return Dimensions{
Size: sz,
Baseline: dims.Baseline + sz.Y - dims.Size.Y - p.Y,
}
}
// Position calculates widget position according to the direction.
func (d Direction) Position(widget, bounds image.Point) image.Point {
var p image.Point
switch d {
case N, S, Center:
p.X = (bounds.X - widget.X) / 2
case NE, SE, E:
p.X = bounds.X - widget.X
}
switch d {
case W, Center, E:
p.Y = (bounds.Y - widget.Y) / 2
case SW, S, SE:
p.Y = bounds.Y - widget.Y
}
return p
}
// Spacer adds space between widgets.
type Spacer struct {
Width, Height unit.Value