Files
gio-patched/widget/border.go
T
Egon Elbre fecfbbb050 op/clip: expose Circle.Path and RRect.Path.
These can be nicely used together with clip.Stroke.

Signed-off-by: Egon Elbre <egonelbre@gmail.com>
2021-03-14 13:28:21 +01:00

42 lines
804 B
Go

// SPDX-License-Identifier: Unlicense OR MIT
package widget
import (
"image/color"
"gioui.org/f32"
"gioui.org/layout"
"gioui.org/op/clip"
"gioui.org/op/paint"
"gioui.org/unit"
)
// Border lays out a widget and draws a border inside it.
type Border struct {
Color color.NRGBA
CornerRadius unit.Value
Width unit.Value
}
func (b Border) Layout(gtx layout.Context, w layout.Widget) layout.Dimensions {
dims := w(gtx)
sz := dims.Size
rr := float32(gtx.Px(b.CornerRadius))
width := float32(gtx.Px(b.Width))
r := f32.Rectangle{Max: layout.FPt(sz)}
r = r.Add(f32.Point{X: width * 0.5, Y: width * 0.5})
paint.FillShape(gtx.Ops,
b.Color,
clip.Stroke{
Path: clip.UniformRRect(r, rr).Path(gtx.Ops),
Style: clip.StrokeStyle{Width: width},
}.Op(),
)
return dims
}