diff --git a/elements/containers/container.go b/elements/containers/container.go index 325c260..c10b5ba 100644 --- a/elements/containers/container.go +++ b/elements/containers/container.go @@ -4,7 +4,6 @@ import "image" import "git.tebibyte.media/sashakoshka/tomo" import "git.tebibyte.media/sashakoshka/tomo/input" import "git.tebibyte.media/sashakoshka/tomo/canvas" -import "git.tebibyte.media/sashakoshka/tomo/artist" import "git.tebibyte.media/sashakoshka/tomo/elements/core" import "git.tebibyte.media/sashakoshka/tomo/default/theme" import "git.tebibyte.media/sashakoshka/tomo/default/config" @@ -189,10 +188,11 @@ func (element *Container) redoAll () { for index, entry := range element.children { rocks[index] = entry.Bounds } - pattern := element.theme.Pattern ( - tomo.PatternBackground, - tomo.State { }) - artist.DrawShatter(element.core, pattern, element.Bounds(), rocks...) + + element.core.DrawBackgroundBoundsShatter ( + element.theme.Pattern(tomo.PatternBackground, tomo.State { }), + element.Bounds(), + rocks...) // cut our canvas up and give peices to child elements for _, entry := range element.children { diff --git a/elements/core/core.go b/elements/core/core.go index fbe033b..9811f14 100644 --- a/elements/core/core.go +++ b/elements/core/core.go @@ -5,6 +5,7 @@ import "image/color" import "git.tebibyte.media/sashakoshka/tomo" import "git.tebibyte.media/sashakoshka/tomo/canvas" import "git.tebibyte.media/sashakoshka/tomo/artist" +import "git.tebibyte.media/sashakoshka/tomo/shatter" // Core is a struct that implements some core functionality common to most // widgets. It is meant to be embedded directly into a struct. @@ -144,6 +145,19 @@ func (control CoreControl) DrawBackgroundBounds ( } } +// DrawBackgroundBoundsShatter is like DrawBackgroundBounds, but uses the +// shattering algorithm to avoid drawing in areas specified by rocks. +func (control CoreControl) DrawBackgroundBoundsShatter ( + fallback artist.Pattern, + bounds image.Rectangle, + rocks ...image.Rectangle, +) { + tiles := shatter.Shatter(bounds, rocks...) + for _, tile := range tiles { + control.DrawBackgroundBounds(fallback, tile) + } +} + // Window returns the window containing the element. func (control CoreControl) Window () tomo.Window { parent := control.Parent()