mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-07 18:35:34 +00:00
layout: expose Direction.Position calculation
Signed-off-by: Egon Elbre <egonelbre@gmail.com>
This commit is contained in:
+25
-15
@@ -173,29 +173,39 @@ func (d Direction) Layout(gtx Context, w Widget) Dimensions {
|
|||||||
if sz.Y < cs.Min.Y {
|
if sz.Y < cs.Min.Y {
|
||||||
sz.Y = cs.Min.Y
|
sz.Y = cs.Min.Y
|
||||||
}
|
}
|
||||||
var p image.Point
|
|
||||||
switch d {
|
defer op.Save(gtx.Ops).Load()
|
||||||
case N, S, Center:
|
p := d.Position(dims.Size, sz)
|
||||||
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)
|
|
||||||
op.Offset(FPt(p)).Add(gtx.Ops)
|
op.Offset(FPt(p)).Add(gtx.Ops)
|
||||||
call.Add(gtx.Ops)
|
call.Add(gtx.Ops)
|
||||||
stack.Load()
|
|
||||||
return Dimensions{
|
return Dimensions{
|
||||||
Size: sz,
|
Size: sz,
|
||||||
Baseline: dims.Baseline + sz.Y - dims.Size.Y - p.Y,
|
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.
|
// Spacer adds space between widgets.
|
||||||
type Spacer struct {
|
type Spacer struct {
|
||||||
Width, Height unit.Value
|
Width, Height unit.Value
|
||||||
|
|||||||
Reference in New Issue
Block a user