diff --git a/layout/stack.go b/layout/stack.go index 90bfaa84..4a94e7a6 100644 --- a/layout/stack.go +++ b/layout/stack.go @@ -83,6 +83,12 @@ func (s Stack) Layout(gtx *Context, children ...StackChild) { } dims := ctxLayout(gtx, cs, w.widget) m.Stop() + if w := dims.Size.X; w > maxSZ.X { + maxSZ.X = w + } + if h := dims.Size.Y; h > maxSZ.Y { + maxSZ.Y = h + } children[i].macro = m children[i].dims = dims } diff --git a/layout/stack_test.go b/layout/stack_test.go new file mode 100644 index 00000000..96824fa5 --- /dev/null +++ b/layout/stack_test.go @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: Unlicense OR MIT + +package layout + +import ( + "image" + "testing" +) + +func TestStack(t *testing.T) { + var gtx Context + gtx.Reset(nil, image.Point{X: 100, Y: 100}) + gtx.Constraints.Width.Min = 0 + gtx.Constraints.Height.Min = 0 + exp := image.Point{X: 60, Y: 70} + Stack{Alignment: Center}.Layout(>x, + Expanded(func() { + gtx.Dimensions.Size = exp + }), + Stacked(func() { + gtx.Dimensions.Size = image.Point{X: 50, Y: 50} + }), + ) + if got := gtx.Dimensions.Size; got != exp { + t.Errorf("Stack ignored Expanded size, got %v expected %v", got, exp) + } +}