1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- // SPDX-License-Identifier: Unlicense OR MIT
- package material
- import (
- "image"
- "image/color"
- "math"
- "gioui.org/layout"
- "gioui.org/op"
- "gioui.org/op/paint"
- )
- type ProgressCircleStyle struct {
- Color color.NRGBA
- Progress float32
- }
- func ProgressCircle(th *Theme, progress float32) ProgressCircleStyle {
- return ProgressCircleStyle{
- Color: th.Palette.ContrastBg,
- Progress: progress,
- }
- }
- func (p ProgressCircleStyle) Layout(gtx layout.Context) layout.Dimensions {
- diam := gtx.Constraints.Min.X
- if minY := gtx.Constraints.Min.Y; minY > diam {
- diam = minY
- }
- if diam == 0 {
- diam = gtx.Dp(24)
- }
- sz := gtx.Constraints.Constrain(image.Pt(diam, diam))
- radius := sz.X / 2
- defer op.Offset(image.Pt(radius, radius)).Push(gtx.Ops).Pop()
- defer clipLoader(gtx.Ops, -math.Pi/2, -math.Pi/2+math.Pi*2*p.Progress, float32(radius)).Push(gtx.Ops).Pop()
- paint.ColorOp{
- Color: p.Color,
- }.Add(gtx.Ops)
- paint.PaintOp{}.Add(gtx.Ops)
- return layout.Dimensions{
- Size: sz,
- }
- }
|