// Copyright 2016 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package widget import ( "golang.org/x/exp/shiny/unit" "golang.org/x/exp/shiny/widget/node" "golang.org/x/exp/shiny/widget/theme" ) // Sizer is a shell widget that overrides its child's measured size. type Sizer struct { node.ShellEmbed NaturalWidth unit.Value NaturalHeight unit.Value } // NewSizer returns a new Sizer widget of the given natural size. Its parent // widget may lay it out at a different size than its natural size, such as // expanding to fill a panel's width. func NewSizer(naturalWidth, naturalHeight unit.Value, inner node.Node) *Sizer { w := &Sizer{ NaturalWidth: naturalWidth, NaturalHeight: naturalHeight, } w.Wrapper = w if inner != nil { w.Insert(inner, nil) } return w } func (w *Sizer) Measure(t *theme.Theme, widthHint, heightHint int) { w.MeasuredSize.X = t.Pixels(w.NaturalWidth).Round() w.MeasuredSize.Y = t.Pixels(w.NaturalHeight).Round() if c := w.FirstChild; c != nil { c.Wrapper.Measure(t, w.MeasuredSize.X, w.MeasuredSize.Y) } }