mirror of
https://github.com/golang/go
synced 2024-11-12 05:30:21 -07:00
image: avoid func comparison during ColorModel comparison
When I disallowed map + func comparisons, I only did it in the static case and missed the comparisons via == on interface values. Fixing that turned these up. R=nigeltao, r CC=golang-dev https://golang.org/cl/5440103
This commit is contained in:
parent
bbbd41f4ff
commit
e4e4cdb39a
@ -134,13 +134,22 @@ type Model interface {
|
||||
Convert(c Color) Color
|
||||
}
|
||||
|
||||
// ModelFunc is an adapter type to allow the use of a color conversion
|
||||
// function as a Model. If f is such a function, ModelFunc(f) is a Model that
|
||||
// invokes f to implement the conversion.
|
||||
type ModelFunc func(Color) Color
|
||||
// ModelFunc returns a Model that invokes f to implement the conversion.
|
||||
func ModelFunc(f func(Color) Color) Model {
|
||||
// Note: using *modelFunc as the implementation
|
||||
// means that callers can still use comparisons
|
||||
// like m == RGBAModel. This is not possible if
|
||||
// we use the func value directly, because funcs
|
||||
// are no longer comparable.
|
||||
return &modelFunc{f}
|
||||
}
|
||||
|
||||
func (f ModelFunc) Convert(c Color) Color {
|
||||
return f(c)
|
||||
type modelFunc struct {
|
||||
f func(Color) Color
|
||||
}
|
||||
|
||||
func (m *modelFunc) Convert(c Color) Color {
|
||||
return m.f(c)
|
||||
}
|
||||
|
||||
// RGBAModel is the Model for RGBA colors.
|
||||
|
@ -20,7 +20,7 @@ var (
|
||||
)
|
||||
|
||||
// Uniform is an infinite-sized Image of uniform color.
|
||||
// It implements both the color.Color and Image interfaces.
|
||||
// It implements the color.Color, color.ColorModel, and Image interfaces.
|
||||
type Uniform struct {
|
||||
C color.Color
|
||||
}
|
||||
@ -30,7 +30,11 @@ func (c *Uniform) RGBA() (r, g, b, a uint32) {
|
||||
}
|
||||
|
||||
func (c *Uniform) ColorModel() color.Model {
|
||||
return color.ModelFunc(func(color.Color) color.Color { return c.C })
|
||||
return c
|
||||
}
|
||||
|
||||
func (c *Uniform) Convert(color.Color) color.Color {
|
||||
return c.C
|
||||
}
|
||||
|
||||
func (c *Uniform) Bounds() Rectangle { return Rectangle{Point{-1e9, -1e9}, Point{1e9, 1e9}} }
|
||||
|
Loading…
Reference in New Issue
Block a user