Add canvas, dither, sprites, clock and pixel elements
This commit is contained in:
11 files changed
+1274
-11
No files matched your search
@@ -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}
|
||||
}
|
||||
Reference in new issue
Block a user