Add navigation components 131-150; pixel Pad, Finish, Park, Since
This commit is contained in:
63 files changed
+2776
-87
No files matched your search
@@ -0,0 +1,78 @@
|
||||
package navigation
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/egoist/mygo/ui"
|
||||
|
||||
"git.zacharyzhang.com/ZacharyZhang-NY/8bitMyGoUI/icon"
|
||||
"git.zacharyzhang.com/ZacharyZhang-NY/8bitMyGoUI/pixel"
|
||||
)
|
||||
|
||||
// waving is a flag in two frames of wind.
|
||||
var waving = pixel.MustSprite(`
|
||||
.#..........
|
||||
.#######....
|
||||
.########...
|
||||
.#########..
|
||||
.########...
|
||||
.#######....
|
||||
.#..........
|
||||
.#..........
|
||||
.#..........
|
||||
.#..........
|
||||
|
||||
.#..........
|
||||
.##.#####...
|
||||
.#########..
|
||||
.#########..
|
||||
.##########.
|
||||
.##.#####...
|
||||
.#..........
|
||||
.#..........
|
||||
.#..........
|
||||
.#..........
|
||||
`)
|
||||
|
||||
type StepsOptions struct{}
|
||||
|
||||
// Steps are flags on a path: done, waving, then locked.
|
||||
func Steps(c *ui.Context, labels []string, current int, o StepsOptions) *ui.Element {
|
||||
k := pixel.K(c)
|
||||
if current < 0 || current >= len(labels) {
|
||||
panic(fmt.Sprintf("navigation: step %d of %d", current, len(labels)))
|
||||
}
|
||||
ws, total := make([]int, len(labels)), 0
|
||||
for i, l := range labels {
|
||||
ws[i] = max(pixel.Measure(l), 12) + 16
|
||||
total += ws[i]
|
||||
}
|
||||
return ui.Box(c).Role(ui.RoleList).Label(strings.Join(labels, ", ")).Description(fmt.Sprintf("%d/%d", current+1, len(labels))).
|
||||
Size(k.D(total), k.D(14+pixel.LineHeight)).Draw(func(p *ui.Painter, r ui.Rect) {
|
||||
g := k.Canvas(p, r)
|
||||
x := 0
|
||||
for i, l := range labels {
|
||||
mid := x + ws[i]/2
|
||||
if i > 0 {
|
||||
for d := x - ws[i-1]/2 + 10; d < mid-8; d += 3 {
|
||||
g.Dot(d, 6, pixel.Faint)
|
||||
}
|
||||
}
|
||||
switch {
|
||||
case i < current:
|
||||
g.Sprite(mid-6, 0, waving, 0, pixel.Good, 1)
|
||||
case i == current:
|
||||
g.Sprite(mid-6, 0, waving, g.Step(4)%2, pixel.Accent, 1)
|
||||
default:
|
||||
g.Sprite(mid-6, 0, icon.Lock, 0, pixel.Faint, 1)
|
||||
}
|
||||
ink := pixel.Faint
|
||||
if i <= current {
|
||||
ink = pixel.Ink
|
||||
}
|
||||
g.Text(mid-pixel.Measure(l)/2, 14, l, ink, 1)
|
||||
x += ws[i]
|
||||
}
|
||||
})
|
||||
}
|
||||
Reference in new issue
Block a user