This repository has been archived on 2023-08-08. You can view files and clone it, but cannot push or open issues or pull requests.
tomo-old/artist/uniform.go
2023-01-09 01:03:19 -05:00

72 lines
1.8 KiB
Go

package artist
import "image"
import "image/color"
// Uniform is an infinite-sized Image of uniform color. It implements the
// color.Color, color.Model, and tomo.Image interfaces.
type Uniform struct {
C color.RGBA
}
// NewUniform returns a new Uniform image of the given color.
func NewUniform (c color.Color) (uniform *Uniform) {
uniform = &Uniform { }
r, g, b, a := c.RGBA()
uniform.C.R = uint8(r >> 8)
uniform.C.G = uint8(g >> 8)
uniform.C.B = uint8(b >> 8)
uniform.C.A = uint8(a >> 8)
return
}
func (uniform *Uniform) RGBA () (r, g, b, a uint32) {
r = uint32(uniform.C.R) << 8 | uint32(uniform.C.R)
g = uint32(uniform.C.G) << 8 | uint32(uniform.C.G)
b = uint32(uniform.C.B) << 8 | uint32(uniform.C.B)
a = uint32(uniform.C.A) << 8 | uint32(uniform.C.A)
return
}
func (uniform *Uniform) ColorModel () (model color.Model) {
model = uniform
return
}
func (uniform *Uniform) Convert (in color.Color) (out color.Color) {
out = uniform.C
return
}
func (uniform *Uniform) Bounds () (rectangle image.Rectangle) {
rectangle.Min = image.Point { -1e9, -1e9 }
rectangle.Max = image.Point { 1e9, 1e9 }
return
}
func (uniform *Uniform) At (x, y int) (c color.Color) {
c = uniform.C
return
}
func (uniform *Uniform) RGBAAt (x, y int) (c color.RGBA) {
c = uniform.C
return
}
func (uniform *Uniform) RGBA64At (x, y int) (c color.RGBA64) {
r := uint16(uniform.C.R) << 8 | uint16(uniform.C.R)
g := uint16(uniform.C.G) << 8 | uint16(uniform.C.G)
b := uint16(uniform.C.B) << 8 | uint16(uniform.C.B)
a := uint16(uniform.C.A) << 8 | uint16(uniform.C.A)
c = color.RGBA64 { R: r, G: g, B: b, A: a }
return
}
// Opaque scans the entire image and reports whether it is fully opaque.
func (uniform *Uniform) Opaque () (opaque bool) {
opaque = uniform.C.A == 0xFF
return
}