| // 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 |
| } |