From fb3ae95b28204ac8cecd55ede7deb3634889695c Mon Sep 17 00:00:00 2001 From: Chris Waldon Date: Thu, 7 Dec 2023 12:31:15 -0500 Subject: [PATCH] widget/material: fix list scrollbar display This commit fixes a visual misalignment in scrollbars resulting from subtle differences in the semantics of layout.Stack and layout.Background. layout.Stack will position expanded children according to their minimum constraint regardless of their returned size, whereas layout.Background uses their returned size. This means that layout.Expanded widgets returning zero dimensions are positioned correctly, but they break when converted to use layout.Background. This commit fixes the problem by returning correct dimensions from the scrollbar track. Signed-off-by: Chris Waldon --- widget/material/list.go | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/widget/material/list.go b/widget/material/list.go index baccdf57..6350aeb6 100644 --- a/widget/material/list.go +++ b/widget/material/list.go @@ -165,9 +165,6 @@ func (s ScrollbarStyle) layout(gtx layout.Context, axis layout.Axis, viewportSta if axis == layout.Horizontal { inset.Top, inset.Bottom, inset.Left, inset.Right = inset.Left, inset.Right, inset.Top, inset.Bottom } - // Capture the outer constraints because layout.Stack will reset - // the minimum to zero. - outerConstraints := gtx.Constraints return layout.Background{}.Layout(gtx, func(gtx layout.Context) layout.Dimensions { @@ -186,10 +183,9 @@ func (s ScrollbarStyle) layout(gtx layout.Context, axis layout.Axis, viewportSta s.Scrollbar.AddTrack(gtx.Ops) paint.FillShape(gtx.Ops, s.Track.Color, clip.Rect(area).Op()) - return layout.Dimensions{} + return layout.Dimensions{Size: gtx.Constraints.Min} }, func(gtx layout.Context) layout.Dimensions { - gtx.Constraints = outerConstraints return inset.Layout(gtx, func(gtx layout.Context) layout.Dimensions { // Use axis-independent constraints. gtx.Constraints.Min = axis.Convert(gtx.Constraints.Min)