shiny/widget: make Uniform a shell, not a leaf.
This lets us use a Uniform to fill a background color for other widgets.
Change-Id: I5f062296a0441ceb371d5ea94d6db7f4dab8f94c
Reviewed-on: https://go-review.googlesource.com/24872
Reviewed-by: David Crawshaw <crawshaw@golang.org>
diff --git a/shiny/example/basicgl/main.go b/shiny/example/basicgl/main.go
index 5a14887..0433dca 100644
--- a/shiny/example/basicgl/main.go
+++ b/shiny/example/basicgl/main.go
@@ -30,7 +30,7 @@
)
func colorPatch(c color.Color, w, h unit.Value) *widget.Sizer {
- return widget.NewSizer(w, h, widget.NewUniform(c))
+ return widget.NewSizer(w, h, widget.NewUniform(c, nil))
}
func main() {
diff --git a/shiny/example/layout/main.go b/shiny/example/layout/main.go
index 6c5c03d..91032cb 100644
--- a/shiny/example/layout/main.go
+++ b/shiny/example/layout/main.go
@@ -34,7 +34,7 @@
var px = unit.Pixels
func colorPatch(c color.Color, w, h unit.Value) *widget.Sizer {
- return widget.NewSizer(w, h, widget.NewUniform(c))
+ return widget.NewSizer(w, h, widget.NewUniform(c, nil))
}
func main() {
diff --git a/shiny/widget/uniform.go b/shiny/widget/uniform.go
index 9111f33..5597cde 100644
--- a/shiny/widget/uniform.go
+++ b/shiny/widget/uniform.go
@@ -13,26 +13,32 @@
"golang.org/x/exp/shiny/widget/theme"
)
-// Uniform is a leaf widget that paints a uniform color, analogous to an
+// Uniform is a shell widget that paints a uniform color, analogous to an
// image.Uniform.
type Uniform struct {
- node.LeafEmbed
+ node.ShellEmbed
Uniform image.Uniform
}
// NewUniform returns a new Uniform widget of the given color.
-func NewUniform(c color.Color) *Uniform {
+func NewUniform(c color.Color, inner node.Node) *Uniform {
w := &Uniform{
Uniform: image.Uniform{c},
}
w.Wrapper = w
+ if inner != nil {
+ w.Insert(inner, nil)
+ }
return w
}
func (w *Uniform) Paint(t *theme.Theme, dst *image.RGBA, origin image.Point) {
w.Marks.UnmarkNeedsPaint()
- if w.Uniform.C == nil {
- return
+ if w.Uniform.C != nil {
+ // TODO: should draw.Src be draw.Over?
+ draw.Draw(dst, w.Rect.Add(origin), &w.Uniform, image.Point{}, draw.Src)
}
- draw.Draw(dst, w.Rect.Add(origin), &w.Uniform, image.Point{}, draw.Src)
+ if c := w.FirstChild; c != nil {
+ c.Wrapper.Paint(t, dst, origin.Add(w.Rect.Min))
+ }
}