widget/material: fade in inkwells

When a clickable is pressed and dragged any enclosing List will grab and
cancels the press. To minimize visual dicontinuity, smoothly fade in the
inkwell.

Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
Elias Naur
2020-06-08 21:57:29 +02:00
parent 0444caa9e3
commit 36f4267a6c
+6 -5
View File
@@ -189,17 +189,19 @@ func (b IconButtonStyle) Layout(gtx layout.Context) layout.Dimensions {
} }
func drawInk(gtx layout.Context, c widget.Press) { func drawInk(gtx layout.Context, c widget.Press) {
d := gtx.Now().Sub(c.Time) now := gtx.Now()
t := float32(d.Seconds()) age := now.Sub(c.Time)
t := float32(age.Seconds())
const duration = 0.5 const duration = 0.5
if t > duration { if t > duration {
// Too old.
return return
} }
t = t / duration t = t / duration
stack := op.Push(gtx.Ops) defer op.Push(gtx.Ops).Pop()
size := float32(gtx.Px(unit.Dp(700))) * t size := float32(gtx.Px(unit.Dp(700))) * t
rr := size * .5 rr := size * .5
col := byte(0xaa * (1 - t*t)) col := byte(0xcc * t * t)
ink := paint.ColorOp{Color: color.RGBA{A: col, R: col, G: col, B: col}} ink := paint.ColorOp{Color: color.RGBA{A: col, R: col, G: col, B: col}}
ink.Add(gtx.Ops) ink.Add(gtx.Ops)
op.TransformOp{}.Offset(c.Position).Offset(f32.Point{ op.TransformOp{}.Offset(c.Position).Offset(f32.Point{
@@ -214,6 +216,5 @@ func drawInk(gtx layout.Context, c widget.Press) {
NE: rr, NW: rr, SE: rr, SW: rr, NE: rr, NW: rr, SE: rr, SW: rr,
}.Op(gtx.Ops).Add(gtx.Ops) }.Op(gtx.Ops).Add(gtx.Ops)
paint.PaintOp{Rect: f32.Rectangle{Max: f32.Point{X: float32(size), Y: float32(size)}}}.Add(gtx.Ops) paint.PaintOp{Rect: f32.Rectangle{Max: f32.Point{X: float32(size), Y: float32(size)}}}.Add(gtx.Ops)
stack.Pop()
op.InvalidateOp{}.Add(gtx.Ops) op.InvalidateOp{}.Add(gtx.Ops)
} }