48 lines
1.1 KiB
Go
48 lines
1.1 KiB
Go
package artist
|
|
|
|
import "image/color"
|
|
|
|
// StripeDirection specifies the direction of stripes.
|
|
type StripeDirection int
|
|
|
|
const (
|
|
StripeDirectionVertical StripeDirection = iota
|
|
StripeDirectionDiagonalRight
|
|
StripeDirectionHorizontal
|
|
StripeDirectionDiagonalLeft
|
|
)
|
|
|
|
// Striped is a pattern that produces stripes of two alternating colors.
|
|
type Striped struct {
|
|
First Stroke
|
|
Second Stroke
|
|
Direction StripeDirection
|
|
}
|
|
|
|
// AtWhen satisfies the Pattern interface.
|
|
func (pattern Striped) AtWhen (x, y, width, height int) (c color.RGBA) {
|
|
position := 0
|
|
switch pattern.Direction {
|
|
case StripeDirectionVertical:
|
|
position = x
|
|
case StripeDirectionDiagonalRight:
|
|
position = x + y
|
|
case StripeDirectionHorizontal:
|
|
position = y
|
|
case StripeDirectionDiagonalLeft:
|
|
position = x - y
|
|
}
|
|
|
|
phase := pattern.First.Weight + pattern.Second.Weight
|
|
position %= phase
|
|
if position < 0 {
|
|
position += phase
|
|
}
|
|
|
|
if position < pattern.First.Weight {
|
|
return pattern.First.Pattern.AtWhen(x, y, width, height)
|
|
} else {
|
|
return pattern.Second.Pattern.AtWhen(x, y, width, height)
|
|
}
|
|
}
|