widget/material: propagate ButtonLayout minimum constraints to content

The previous change fixed a regression where minimum constraints larger than 0
would not affect the button. This change moves the minimum constraints one
level lower so the content widget will see them as well. The wrapping
layout.Center ensures that any misbehaving widgets still end up centered.

Add a test to lock in the new behaviour and the previous fix.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2020-03-25 17:52:02 +01:00
parent f7a23ad46a
commit 52ccc183b5
2 changed files with 27 additions and 2 deletions
+2 -2
View File
@@ -109,9 +109,9 @@ func (b ButtonLayout) Layout(gtx *layout.Context, button *widget.Button, w layou
}
}),
layout.Stacked(func() {
gtx.Constraints.Width.Min = hmin
gtx.Constraints.Height.Min = vmin
layout.Center.Layout(gtx, func() {
gtx.Constraints.Width.Min = hmin
gtx.Constraints.Height.Min = vmin
b.Inset.Layout(gtx, func() {
paint.ColorOp{Color: b.Color}.Add(gtx.Ops)
w()
+25
View File
@@ -0,0 +1,25 @@
// SPDX-License-Identifier: Unlicense OR MIT
package material
import (
"image"
"testing"
"gioui.org/layout"
"gioui.org/widget"
)
func TestButtonLayout(t *testing.T) {
var gtx layout.Context
gtx.Reset(nil, image.Point{X: 100, Y: 100})
ButtonLayout{}.Layout(&gtx, new(widget.Button), func() {
if got, exp := gtx.Constraints.Width.Min, 100; got != exp {
t.Errorf("minimum width is %d, expected %d", got, exp)
}
if got, exp := gtx.Constraints.Height.Min, 100; got != exp {
t.Errorf("minimum width is %d, expected %d", got, exp)
}
})
}