~gioverse/chat

84203ce5a4600afddee9aebafa91138fb96f0e97 — Jack Mordaunt 2 months ago 67742c9
widget/material: maintain size for empty images

If the image source is empty, we should maintain the specified size so
that the parent can rely on the Width and Height values they specified.

Prior to this patch, the layout would move around when the image was
empty one frame and present the next. This produces bad user experience
as the layout resizes as images pop in.

Such behaviour reliably occured when using an async.Loader to download
images.

Signed-off-by: Jack Mordaunt <jackmordaunt.dev@gmail.com>
1 files changed, 4 insertions(+), 0 deletions(-)

M widget/material/image.go
M widget/material/image.go => widget/material/image.go +4 -0
@@ 7,6 7,7 @@ import (
	"gioui.org/layout"
	"gioui.org/op"
	"gioui.org/op/clip"
	"gioui.org/op/paint"
	"gioui.org/unit"
	"gioui.org/widget"
)


@@ 30,6 31,9 @@ func (img Image) Layout(gtx layout.Context) layout.Dimensions {
	if img.Height.V > 0 {
		gtx.Constraints.Max.Y = gtx.Constraints.Constrain(image.Pt(0, gtx.Px(img.Height))).Y
	}
	if img.Image.Src == (paint.ImageOp{}) {
		return D{Size: gtx.Constraints.Max}
	}
	defer op.Save(gtx.Ops).Load()
	macro := op.Record(gtx.Ops)
	dims := img.Image.Layout(gtx)