widget/material: draw Loader completely inside its bounds

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2021-05-19 19:35:04 +02:00
parent 039b4c4bca
commit d5b70c439c
+10 -9
View File
@@ -35,11 +35,11 @@ func (l LoaderStyle) Layout(gtx layout.Context) layout.Dimensions {
diam = gtx.Px(unit.Dp(24))
}
sz := gtx.Constraints.Constrain(image.Pt(diam, diam))
radius := float64(sz.X) * .5
radius := float32(sz.X) * .5
defer op.Save(gtx.Ops).Load()
op.Offset(f32.Pt(float32(radius), float32(radius))).Add(gtx.Ops)
op.Offset(f32.Pt(radius, radius)).Add(gtx.Ops)
dt := (time.Duration(gtx.Now.UnixNano()) % (time.Second)).Seconds()
dt := float32((time.Duration(gtx.Now.UnixNano()) % (time.Second)).Seconds())
startAngle := dt * math.Pi * 2
endAngle := startAngle + math.Pi*1.5
@@ -47,7 +47,7 @@ func (l LoaderStyle) Layout(gtx layout.Context) layout.Dimensions {
paint.ColorOp{
Color: l.Color,
}.Add(gtx.Ops)
op.Offset(f32.Pt(-float32(radius), -float32(radius))).Add(gtx.Ops)
op.Offset(f32.Pt(-radius, -radius)).Add(gtx.Ops)
paint.PaintOp{}.Add(gtx.Ops)
op.InvalidateOp{}.Add(gtx.Ops)
return layout.Dimensions{
@@ -55,16 +55,17 @@ func (l LoaderStyle) Layout(gtx layout.Context) layout.Dimensions {
}
}
func clipLoader(ops *op.Ops, startAngle, endAngle, radius float64) {
func clipLoader(ops *op.Ops, startAngle, endAngle, radius float32) {
const thickness = .25
var (
width = float32(radius * thickness)
delta = float32(endAngle - startAngle)
width = radius * thickness
delta = endAngle - startAngle
vy, vx = math.Sincos(startAngle)
vy, vx = math.Sincos(float64(startAngle))
pen = f32.Pt(float32(vx), float32(vy)).Mul(float32(radius))
inner = radius * (1. - thickness*.5)
pen = f32.Pt(float32(vx), float32(vy)).Mul(inner)
center = f32.Pt(0, 0).Sub(pen)
p clip.Path