Files
gio/widget/border.go
T
Elias Naur 48a8540a68 all: [API] change clip.RRect and UniformRRect to take integer coordinates
Like the change to op.Offset before this, clip.RRect and UniformRRect
is usually used with integer coordinates. Change to integer coordinates
to eliminate many useless conversions to float32.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
2022-05-31 10:24:09 +02:00

44 lines
780 B
Go

// SPDX-License-Identifier: Unlicense OR MIT
package widget
import (
"image"
"image/color"
"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 := gtx.Px(b.CornerRadius)
width := gtx.Px(b.Width)
sz.X -= width
sz.Y -= width
r := image.Rectangle{Max: sz}
r = r.Add(image.Point{X: width / 2, Y: width / 2})
paint.FillShape(gtx.Ops,
b.Color,
clip.Stroke{
Path: clip.UniformRRect(r, rr).Path(gtx.Ops),
Width: float32(width),
}.Op(),
)
return dims
}