Add canvas, dither, sprites, clock and pixel elements

This commit is contained in:
ZacharyZhang-NY committed 2026-10-11 16:02:31 -04:00
1 parent 538031af31
commit d33bf0cbbb
11 files changed
+1274 -11

No files matched your search

+60
View File
@@ -0,0 +1,60 @@
package pixel_test
import (
"image"
"testing"
"github.com/egoist/mygo/ui"
"git.zacharyzhang.com/ZacharyZhang-NY/8bitMyGoUI/pixel"
)
// dots reads a Dot 2 frame, dot by dot.
type dots struct {
t *testing.T
img *image.RGBA
pal *pixel.Palette
}
// at is the slot of dot x, y.
func (d dots) at(x, y int) pixel.Slot {
d.t.Helper()
c := d.img.RGBAAt(2*x, 2*y)
for _, o := range [][2]int{{1, 0}, {0, 1}, {1, 1}} {
if d.img.RGBAAt(2*x+o[0], 2*y+o[1]) != c {
d.t.Fatalf("dot %d,%d is not one color", x, y)
}
}
for s, pc := range d.pal.Colors {
if pc.R == c.R && pc.G == c.G && pc.B == c.B && c.A == 255 {
return pixel.Slot(s)
}
}
d.t.Fatalf("dot %d,%d has %v, outside the palette", x, y, c)
return 0
}
// count is how many dots of an area hold s.
func (d dots) count(x, y, w, h int, s pixel.Slot) int {
n := 0
for j := range h {
for i := range w {
if d.at(x+i, y+j) == s {
n++
}
}
}
return n
}
// canvas draws on a w×h dot box at the top-left.
func canvas(t *testing.T, w, h int, draw func(g pixel.Canvas)) dots {
t.Helper()
pal := pixel.SummerDay
tt := ui.NewTester(func(c *ui.Context) {
pixel.Use(c, pixel.Settings{Palette: pal, Dot: 2})
k := pixel.K(c)
ui.Box(c).Size(k.D(w), k.D(h)).Draw(func(p *ui.Painter, r ui.Rect) { draw(k.Canvas(p, r)) })
}, 2*w, 2*h)
return dots{t: t, img: tt.Image(), pal: pal}
}