blob: c8fadeca2ce6807cc5df41fc88f2b07c2a98cc0d [file] [log] [blame]
// 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 (
"image"
"image/draw"
"golang.org/x/exp/shiny/widget/node"
"golang.org/x/exp/shiny/widget/theme"
)
// Uniform is a shell widget that paints a uniform color, analogous to an
// image.Uniform.
type Uniform struct {
node.ShellEmbed
ThemeColor theme.Color
}
// NewUniform returns a new Uniform widget of the given color.
func NewUniform(c theme.Color, inner node.Node) *Uniform {
w := &Uniform{
ThemeColor: c,
}
w.Wrapper = w
if inner != nil {
w.Insert(inner, nil)
}
return w
}
func (w *Uniform) PaintBase(ctx *node.PaintBaseContext, origin image.Point) error {
w.Marks.UnmarkNeedsPaintBase()
if w.ThemeColor != nil {
src := w.ThemeColor.Uniform(ctx.Theme)
// TODO: should draw.Src be draw.Over?
draw.Draw(ctx.Dst, w.Rect.Add(origin), src, image.Point{}, draw.Src)
}
if c := w.FirstChild; c != nil {
return c.Wrapper.PaintBase(ctx, origin.Add(w.Rect.Min))
}
return nil
}