diff --git a/artist/checkered.go b/artist/checkered.go index a239b9c..c02f795 100644 --- a/artist/checkered.go +++ b/artist/checkered.go @@ -26,8 +26,26 @@ func (pattern Checkered) AtWhen (x, y, width, height int) (c color.RGBA) { y %= pattern.CellHeight if n % 2 == 0 { - return pattern.First.AtWhen(x, y, pattern.CellWidth, pattern.CellHeight) + return pattern.First.AtWhen ( + x, y, pattern.CellWidth, pattern.CellHeight) } else { - return pattern.Second.AtWhen(x, y, pattern.CellWidth, pattern.CellHeight) + return pattern.Second.AtWhen ( + x, y, pattern.CellWidth, pattern.CellHeight) } } + +// Tiled is a pattern that tiles another pattern accross a grid. +type Tiled struct { + Pattern + CellWidth, CellHeight int +} + +// AtWhen satisfies the Pattern interface. +func (pattern Tiled) AtWhen (x, y, width, height int) (c color.RGBA) { + x %= pattern.CellWidth + y %= pattern.CellHeight + if x < 0 { x += pattern.CellWidth } + if y < 0 { y += pattern.CellHeight } + return pattern.Pattern.AtWhen ( + x, y, pattern.CellWidth, pattern.CellHeight) +} diff --git a/elements/testing/artist.go b/elements/testing/artist.go index de4b12f..084bda1 100644 --- a/elements/testing/artist.go +++ b/elements/testing/artist.go @@ -175,6 +175,21 @@ func (element *Artist) Resize (width, height int) { Spacing: 16, }, element.cellAt(2, 5)) + + // 3, 5 + artist.FillRectangle ( + element, + artist.Tiled { + Pattern: artist.QuadBeveled { + artist.NewUniform(hex(0x880000FF)), + artist.NewUniform(hex(0x00FF00FF)), + artist.NewUniform(hex(0x0000FFFF)), + artist.NewUniform(hex(0xFF00FFFF)), + }, + CellWidth: 17, + CellHeight: 23, + }, + element.cellAt(3, 5)) } func (element *Artist) lines (weight int, bounds image.Rectangle) {