@@ 17,23 17,24 @@ func Image(opt Options) image.Image {
case "plain":
draw.Draw(im, im.Bounds(), image.NewUniform(opt.Colors[0]), image.Point{}, draw.Src)
case "diagonal":
- var c [2]color.RGBA
- copy(c[:], opt.Colors)
- im.drawDiagonal(opt.Width, opt.Height, c)
+ h, w := float64(im.Bounds().Max.Y-im.Bounds().Min.Y), float64(im.Bounds().Max.X-im.Bounds().Min.X)
+
+ draw.Draw(im, im.Bounds(), image.NewUniform(opt.Colors[0]), image.Point{}, draw.Src)
+ draw.DrawMask(im, im.Bounds(), image.NewUniform(opt.Colors[1]), image.Point{}, &diagonal{im, h, w}, image.Point{}, draw.Over)
}
return im
}
-func (im *img) drawDiagonal(w, h int, c [2]color.RGBA) {
- for x := 0; x < w; x++ {
- for y := 0; y < h; y++ {
- // if y < h/w)*x) {
- if y <= h-x {
- im.Set(x, y, c[0])
- } else {
- im.Set(x, y, c[1])
- }
- }
+type diagonal struct {
+ image.Image
+ h, w float64
+}
+
+func (im *diagonal) At(x, y int) color.Color {
+ if float64(y)+0.5 < im.h-(im.h/im.w)*float64(x) {
+ return color.Alpha{}
}
+
+ return color.Alpha{0xff}
}
@@ 94,7 94,4 @@ func (opt *Options) Normalize() {
if opt.Width > 600 {
opt.Width = 600
}
-
- // TODO: fix rectangles, for now only squares
- opt.Height = opt.Width
}