diff --git a/ability/element.go b/ability/element.go index 3343b8c..50259da 100644 --- a/ability/element.go +++ b/ability/element.go @@ -4,7 +4,7 @@ package ability import "image" import "tomo" import "tomo/input" -import "tomo/artist" +import "art" // Layoutable represents an element that needs to perform layout calculations // before it can draw itself. @@ -24,7 +24,7 @@ type Container interface { // the specified canvas. The bounds of this canvas specify the area that // is actually drawn to, while the Entity bounds specify the actual area // of the element. - DrawBackground (artist.Canvas) + DrawBackground (art.Canvas) // HandleChildMinimumSizeChange is called when a child's minimum size is // changed. diff --git a/default/theme/default.go b/default/theme/default.go index fc70481..1b8f93c 100644 --- a/default/theme/default.go +++ b/default/theme/default.go @@ -9,14 +9,14 @@ import "golang.org/x/image/font" import "golang.org/x/image/font/basicfont" import "tomo" import "tomo/data" -import "tomo/artist" -import "tomo/artist/artutil" -import "tomo/artist/patterns" +import "art" +import "art/artutil" +import "art/patterns" //go:embed assets/default.png var defaultAtlasBytes []byte -var defaultAtlas artist.Canvas -var defaultTextures [7][7]artist.Pattern +var defaultAtlas art.Canvas +var defaultTextures [7][7]art.Pattern //go:embed assets/wintergreen-icons-small.png var defaultIconsSmallAtlasBytes []byte var defaultIconsSmall [640]binaryIcon @@ -24,15 +24,15 @@ var defaultIconsSmall [640]binaryIcon var defaultIconsLargeAtlasBytes []byte var defaultIconsLarge [640]binaryIcon -func atlasCell (col, row int, border artist.Inset) { +func atlasCell (col, row int, border art.Inset) { bounds := image.Rect(0, 0, 8, 8).Add(image.Pt(col, row).Mul(8)) defaultTextures[col][row] = patterns.Border { - Canvas: artist.Cut(defaultAtlas, bounds), + Canvas: art.Cut(defaultAtlas, bounds), Inset: border, } } -func atlasCol (col int, border artist.Inset) { +func atlasCol (col int, border art.Inset) { for index, _ := range defaultTextures[col] { atlasCell(col, index, border) } @@ -43,7 +43,7 @@ type binaryIcon struct { stride int } -func (icon binaryIcon) Draw (destination artist.Canvas, color color.RGBA, at image.Point) { +func (icon binaryIcon) Draw (destination art.Canvas, color color.RGBA, at image.Point) { bounds := icon.Bounds().Add(at).Intersect(destination.Bounds()) point := image.Point { } data, stride := destination.Buffer() @@ -85,15 +85,15 @@ func binaryIconFrom (source image.Image, clip image.Rectangle) (icon binaryIcon) func init () { defaultAtlasImage, _, _ := image.Decode(bytes.NewReader(defaultAtlasBytes)) - defaultAtlas = artist.FromImage(defaultAtlasImage) + defaultAtlas = art.FromImage(defaultAtlasImage) - atlasCol(0, artist.I(0)) - atlasCol(1, artist.I(3)) - atlasCol(2, artist.I(1)) - atlasCol(3, artist.I(1)) - atlasCol(4, artist.I(1)) - atlasCol(5, artist.I(3)) - atlasCol(6, artist.I(1)) + atlasCol(0, art.I(0)) + atlasCol(1, art.I(3)) + atlasCol(2, art.I(1)) + atlasCol(3, art.I(1)) + atlasCol(4, art.I(1)) + atlasCol(5, art.I(3)) + atlasCol(6, art.I(1)) // set up small icons defaultIconsSmallAtlasImage, _, _ := image.Decode ( @@ -139,7 +139,7 @@ func (Default) FontFace (style tomo.FontStyle, size tomo.FontSize, c tomo.Case) } // Icon returns an icon from the default set corresponding to the given name. -func (Default) Icon (id tomo.Icon, size tomo.IconSize, c tomo.Case) artist.Icon { +func (Default) Icon (id tomo.Icon, size tomo.IconSize, c tomo.Case) art.Icon { if size == tomo.IconSizeLarge { if id < 0 || int(id) >= len(defaultIconsLarge) { return nil @@ -157,14 +157,14 @@ func (Default) Icon (id tomo.Icon, size tomo.IconSize, c tomo.Case) artist.Icon // MimeIcon returns an icon from the default set corresponding to the given mime. // type. -func (Default) MimeIcon (data.Mime, tomo.IconSize, tomo.Case) artist.Icon { +func (Default) MimeIcon (data.Mime, tomo.IconSize, tomo.Case) art.Icon { // TODO return nil } // Pattern returns a pattern from the default theme corresponding to the given // pattern ID. -func (Default) Pattern (id tomo.Pattern, state tomo.State, c tomo.Case) artist.Pattern { +func (Default) Pattern (id tomo.Pattern, state tomo.State, c tomo.Case) art.Pattern { offset := 0; switch { case state.Disabled: offset = 1 case state.Pressed && state.On: offset = 4 @@ -224,11 +224,11 @@ func (Default) Color (id tomo.Color, state tomo.State, c tomo.Case) color.RGBA { } // Padding returns the default padding value for the given pattern. -func (Default) Padding (id tomo.Pattern, c tomo.Case) artist.Inset { +func (Default) Padding (id tomo.Pattern, c tomo.Case) art.Inset { switch id { - case tomo.PatternGutter: return artist.I(0) - case tomo.PatternLine: return artist.I(1) - default: return artist.I(6) + case tomo.PatternGutter: return art.I(0) + case tomo.PatternLine: return art.I(1) + default: return art.I(6) } } diff --git a/element.go b/element.go index e124116..494455d 100644 --- a/element.go +++ b/element.go @@ -1,6 +1,6 @@ package tomo -import "tomo/artist" +import "art" // Element represents a basic on-screen object. Extended element interfaces are // defined in the ability module. @@ -8,7 +8,7 @@ type Element interface { // Draw causes the element to draw to the specified canvas. The bounds // of this canvas specify the area that is actually drawn to, while the // Entity bounds specify the actual area of the element. - Draw (artist.Canvas) + Draw (art.Canvas) // Entity returns this element's entity. Entity () Entity diff --git a/elements/box.go b/elements/box.go index 8988436..4ead3b8 100644 --- a/elements/box.go +++ b/elements/box.go @@ -2,8 +2,8 @@ package elements import "image" import "tomo" -import "tomo/artist" -import "tomo/shatter" +import "art" +import "art/shatter" var boxCase = tomo.C("tomo", "box") @@ -61,7 +61,7 @@ func NewVBox (space Space, children ...tomo.Element) (element *Box) { } // Draw causes the element to draw to the specified destination canvas. -func (element *Box) Draw (destination artist.Canvas) { +func (element *Box) Draw (destination art.Canvas) { rocks := make([]image.Rectangle, element.entity.CountChildren()) for index := 0; index < element.entity.CountChildren(); index ++ { rocks[index] = element.entity.Child(index).Entity().Bounds() @@ -69,7 +69,7 @@ func (element *Box) Draw (destination artist.Canvas) { tiles := shatter.Shatter(element.entity.Bounds(), rocks...) for _, tile := range tiles { - element.entity.DrawBackground(artist.Cut(destination, tile)) + element.entity.DrawBackground(art.Cut(destination, tile)) } } @@ -126,7 +126,7 @@ func (element *Box) AdoptExpand (children ...tomo.Element) { // DrawBackground draws this element's background pattern to the specified // destination canvas. -func (element *Box) DrawBackground (destination artist.Canvas) { +func (element *Box) DrawBackground (destination art.Canvas) { element.entity.DrawBackground(destination) } diff --git a/elements/button.go b/elements/button.go index 72a9453..db0ed9d 100644 --- a/elements/button.go +++ b/elements/button.go @@ -3,7 +3,7 @@ package elements import "image" import "tomo" import "tomo/input" -import "tomo/artist" +import "art" import "tomo/textdraw" var buttonCase = tomo.C("tomo", "button") @@ -42,7 +42,7 @@ func (element *Button) Entity () tomo.Entity { } // Draw causes the element to draw to the specified destination canvas. -func (element *Button) Draw (destination artist.Canvas) { +func (element *Button) Draw (destination art.Canvas) { state := element.state() bounds := element.entity.Bounds() pattern := element.entity.Theme().Pattern(tomo.PatternButton, state, buttonCase) diff --git a/elements/cell.go b/elements/cell.go index 97990e9..73002d6 100644 --- a/elements/cell.go +++ b/elements/cell.go @@ -1,8 +1,8 @@ package elements import "tomo" -import "tomo/artist" -import "tomo/artist/artutil" +import "art" +import "art/artutil" var cellCase = tomo.C("tomo", "cell") @@ -32,7 +32,7 @@ func (element *Cell) Entity () tomo.Entity { } // Draw causes the element to draw to the specified destination canvas. -func (element *Cell) Draw (destination artist.Canvas) { +func (element *Cell) Draw (destination art.Canvas) { bounds := element.entity.Bounds() pattern := element.entity.Theme().Pattern(tomo.PatternTableCell, element.state(), cellCase) if element.child == nil { @@ -56,7 +56,7 @@ func (element *Cell) Layout () { // DrawBackground draws this element's background pattern to the specified // destination canvas. -func (element *Cell) DrawBackground (destination artist.Canvas) { +func (element *Cell) DrawBackground (destination art.Canvas) { element.entity.Theme().Pattern(tomo.PatternTableCell, element.state(), cellCase). Draw(destination, element.entity.Bounds()) } diff --git a/elements/checkbox.go b/elements/checkbox.go index 354fde1..cebae43 100644 --- a/elements/checkbox.go +++ b/elements/checkbox.go @@ -3,7 +3,7 @@ package elements import "image" import "tomo" import "tomo/input" -import "tomo/artist" +import "art" import "tomo/textdraw" var checkboxCase = tomo.C("tomo", "checkbox") @@ -39,7 +39,7 @@ func (element *Checkbox) Entity () tomo.Entity { } // Draw causes the element to draw to the specified destination canvas. -func (element *Checkbox) Draw (destination artist.Canvas) { +func (element *Checkbox) Draw (destination art.Canvas) { bounds := element.entity.Bounds() boxBounds := image.Rect(0, 0, bounds.Dy(), bounds.Dy()).Add(bounds.Min) diff --git a/elements/combobox.go b/elements/combobox.go index 6d1b483..c340636 100644 --- a/elements/combobox.go +++ b/elements/combobox.go @@ -3,7 +3,7 @@ package elements import "image" import "tomo" import "tomo/input" -import "tomo/artist" +import "art" import "tomo/ability" import "tomo/textdraw" @@ -53,7 +53,7 @@ func (element *ComboBox) Entity () tomo.Entity { } // Draw causes the element to draw to the specified destination canvas. -func (element *ComboBox) Draw (destination artist.Canvas) { +func (element *ComboBox) Draw (destination art.Canvas) { state := element.state() bounds := element.entity.Bounds() pattern := element.entity.Theme().Pattern(tomo.PatternButton, state, comboBoxCase) diff --git a/elements/directory.go b/elements/directory.go index 9dbe742..efa7fe1 100644 --- a/elements/directory.go +++ b/elements/directory.go @@ -4,9 +4,9 @@ import "image" import "path/filepath" import "tomo" import "tomo/input" -import "tomo/artist" +import "art" import "tomo/ability" -import "tomo/shatter" +import "art/shatter" // TODO: base on flow implementation of list. also be able to switch to a table // variant for a more information dense view. @@ -52,7 +52,7 @@ func NewDirectory ( return } -func (element *Directory) Draw (destination artist.Canvas) { +func (element *Directory) Draw (destination art.Canvas) { rocks := make([]image.Rectangle, element.entity.CountChildren()) for index := 0; index < element.entity.CountChildren(); index ++ { rocks[index] = element.entity.Child(index).Entity().Bounds() @@ -60,7 +60,7 @@ func (element *Directory) Draw (destination artist.Canvas) { tiles := shatter.Shatter(element.entity.Bounds(), rocks...) for _, tile := range tiles { - element.DrawBackground(artist.Cut(destination, tile)) + element.DrawBackground(art.Cut(destination, tile)) } } @@ -199,7 +199,7 @@ func (element *Directory) ScrollAxes () (horizontal, vertical bool) { return false, true } -func (element *Directory) DrawBackground (destination artist.Canvas) { +func (element *Directory) DrawBackground (destination art.Canvas) { element.entity.Theme().Pattern(tomo.PatternPinboard, tomo.State { }, directoryCase). Draw(destination, element.entity.Bounds()) } diff --git a/elements/document.go b/elements/document.go index 0e84f7a..0f1dd7f 100644 --- a/elements/document.go +++ b/elements/document.go @@ -2,9 +2,9 @@ package elements import "image" import "tomo" -import "tomo/artist" +import "art" import "tomo/ability" -import "tomo/shatter" +import "art/shatter" var documentCase = tomo.C("tomo", "document") @@ -33,7 +33,7 @@ func NewDocument (children ...tomo.Element) (element *Document) { } // Draw causes the element to draw to the specified destination canvas. -func (element *Document) Draw (destination artist.Canvas) { +func (element *Document) Draw (destination art.Canvas) { rocks := make([]image.Rectangle, element.entity.CountChildren()) for index := 0; index < element.entity.CountChildren(); index ++ { rocks[index] = element.entity.Child(index).Entity().Bounds() @@ -41,7 +41,7 @@ func (element *Document) Draw (destination artist.Canvas) { tiles := shatter.Shatter(element.entity.Bounds(), rocks...) for _, tile := range tiles { - element.entity.DrawBackground(artist.Cut(destination, tile)) + element.entity.DrawBackground(art.Cut(destination, tile)) } } @@ -132,7 +132,7 @@ func (element *Document) HandleChildFlexibleHeightChange (child ability.Flexible // DrawBackground draws this element's background pattern to the specified // destination canvas. -func (element *Document) DrawBackground (destination artist.Canvas) { +func (element *Document) DrawBackground (destination art.Canvas) { element.entity.DrawBackground(destination) } diff --git a/elements/file.go b/elements/file.go index 25d6540..859cdd8 100644 --- a/elements/file.go +++ b/elements/file.go @@ -5,7 +5,7 @@ import "io/fs" import "image" import "tomo" import "tomo/input" -import "tomo/artist" +import "art" var fileCase = tomo.C("files", "file") @@ -45,7 +45,7 @@ func (element *File) Entity () tomo.Entity { } // Draw causes the element to draw to the specified destination canvas. -func (element *File) Draw (destination artist.Canvas) { +func (element *File) Draw (destination art.Canvas) { // background state := element.state() bounds := element.entity.Bounds() @@ -199,7 +199,7 @@ func (element *File) state () tomo.State { } } -func (element *File) icon () artist.Icon { +func (element *File) icon () art.Icon { return element.entity.Theme().Icon(element.iconID, tomo.IconSizeLarge, fileCase) } diff --git a/elements/fun/clock.go b/elements/fun/clock.go index cfe114c..3278ed4 100644 --- a/elements/fun/clock.go +++ b/elements/fun/clock.go @@ -5,8 +5,8 @@ import "math" import "image" import "image/color" import "tomo" -import "tomo/artist" -import "tomo/artist/shapes" +import "art" +import "art/shapes" var clockCase = tomo.C("tomo", "clock") @@ -30,7 +30,7 @@ func (element *AnalogClock) Entity () tomo.Entity { } // Draw causes the element to draw to the specified destination canvas. -func (element *AnalogClock) Draw (destination artist.Canvas) { +func (element *AnalogClock) Draw (destination art.Canvas) { bounds := element.entity.Bounds() state := tomo.State { } @@ -71,7 +71,7 @@ func (element *AnalogClock) HandleThemeChange () { } func (element *AnalogClock) radialLine ( - destination artist.Canvas, + destination art.Canvas, source color.RGBA, inner float64, outer float64, diff --git a/elements/fun/piano.go b/elements/fun/piano.go index e8e85b1..b9ae8ec 100644 --- a/elements/fun/piano.go +++ b/elements/fun/piano.go @@ -3,8 +3,8 @@ package fun import "image" import "tomo" import "tomo/input" -import "tomo/artist" -import "tomo/artist/artutil" +import "art" +import "art/artutil" import "tomo/elements/fun/music" var pianoCase = tomo.C("tomo", "piano") @@ -57,7 +57,7 @@ func (element *Piano) Entity () tomo.Entity { } // Draw causes the element to draw to the specified destination canvas. -func (element *Piano) Draw (destination artist.Canvas) { +func (element *Piano) Draw (destination art.Canvas) { element.recalculate() state := tomo.State { @@ -304,7 +304,7 @@ func (element *Piano) recalculate () { } func (element *Piano) drawFlat ( - destination artist.Canvas, + destination art.Canvas, bounds image.Rectangle, pressed bool, state tomo.State, @@ -315,7 +315,7 @@ func (element *Piano) drawFlat ( } func (element *Piano) drawSharp ( - destination artist.Canvas, + destination art.Canvas, bounds image.Rectangle, pressed bool, state tomo.State, diff --git a/elements/icon.go b/elements/icon.go index 3f74e40..68b4531 100644 --- a/elements/icon.go +++ b/elements/icon.go @@ -2,7 +2,7 @@ package elements import "image" import "tomo" -import "tomo/artist" +import "art" var iconCase = tomo.C("tomo", "icon") @@ -44,7 +44,7 @@ func (element *Icon) HandleThemeChange () { } // Draw causes the element to draw to the specified destination canvas. -func (element *Icon) Draw (destination artist.Canvas) { +func (element *Icon) Draw (destination art.Canvas) { if element.entity == nil { return } bounds := element.entity.Bounds() @@ -65,7 +65,7 @@ func (element *Icon) Draw (destination artist.Canvas) { } } -func (element *Icon) icon () artist.Icon { +func (element *Icon) icon () art.Icon { return element.entity.Theme().Icon(element.id, element.size, iconCase) } diff --git a/elements/image.go b/elements/image.go index 720c1ab..6be51a8 100644 --- a/elements/image.go +++ b/elements/image.go @@ -2,20 +2,20 @@ package elements import "image" import "tomo" -import "tomo/artist" -import "tomo/artist/patterns" +import "art" +import "art/patterns" // TODO: this element is lame need to make it better // Image is an element capable of displaying an image. type Image struct { entity tomo.Entity - buffer artist.Canvas + buffer art.Canvas } // NewImage creates a new image element. func NewImage (image image.Image) (element *Image) { - element = &Image { buffer: artist.FromImage(image) } + element = &Image { buffer: art.FromImage(image) } element.entity = tomo.GetBackend().NewEntity(element) bounds := element.buffer.Bounds() element.entity.SetMinimumSize(bounds.Dx(), bounds.Dy()) @@ -28,7 +28,7 @@ func (element *Image) Entity () tomo.Entity { } // Draw causes the element to draw to the specified destination canvas. -func (element *Image) Draw (destination artist.Canvas) { +func (element *Image) Draw (destination art.Canvas) { if element.entity == nil { return } (patterns.Texture { Canvas: element.buffer }). Draw(destination, element.entity.Bounds()) diff --git a/elements/label.go b/elements/label.go index 6ec63a9..e4a94fa 100644 --- a/elements/label.go +++ b/elements/label.go @@ -5,7 +5,7 @@ import "golang.org/x/image/math/fixed" import "tomo" import "tomo/data" import "tomo/input" -import "tomo/artist" +import "art" import "tomo/textdraw" var labelCase = tomo.C("tomo", "label") @@ -48,7 +48,7 @@ func (element *Label) Entity () tomo.Entity { } // Draw causes the element to draw to the specified destination canvas. -func (element *Label) Draw (destination artist.Canvas) { +func (element *Label) Draw (destination art.Canvas) { bounds := element.entity.Bounds() if element.wrap { diff --git a/elements/list.go b/elements/list.go index 3856a42..1edbd12 100644 --- a/elements/list.go +++ b/elements/list.go @@ -3,9 +3,9 @@ package elements import "image" import "tomo" import "tomo/input" -import "tomo/artist" +import "art" import "tomo/ability" -import "tomo/artist/artutil" +import "art/artutil" type list struct { container @@ -61,7 +61,7 @@ func (element *list) init (children ...tomo.Element) { element.Adopt(children...) } -func (element *list) Draw (destination artist.Canvas) { +func (element *list) Draw (destination art.Canvas) { rocks := make([]image.Rectangle, element.entity.CountChildren()) for index := 0; index < element.entity.CountChildren(); index ++ { rocks[index] = element.entity.Child(index).Entity().Bounds() @@ -274,7 +274,7 @@ func (element *list) HandleKeyDown (key input.Key, modifiers input.Modifiers) { func (element *list) HandleKeyUp(key input.Key, modifiers input.Modifiers) { } -func (element *list) DrawBackground (destination artist.Canvas) { +func (element *list) DrawBackground (destination art.Canvas) { element.entity.DrawBackground(destination) } diff --git a/elements/progressbar.go b/elements/progressbar.go index 2bb5580..c6368c5 100644 --- a/elements/progressbar.go +++ b/elements/progressbar.go @@ -2,7 +2,7 @@ package elements import "image" import "tomo" -import "tomo/artist" +import "art" var progressBarCase = tomo.C("tomo", "progressBar") @@ -29,7 +29,7 @@ func (element *ProgressBar) Entity () tomo.Entity { } // Draw causes the element to draw to the specified destination canvas. -func (element *ProgressBar) Draw (destination artist.Canvas) { +func (element *ProgressBar) Draw (destination art.Canvas) { bounds := element.entity.Bounds() pattern := element.entity.Theme().Pattern(tomo.PatternSunken, tomo.State { }, progressBarCase) diff --git a/elements/scroll.go b/elements/scroll.go index bc065cb..820213a 100644 --- a/elements/scroll.go +++ b/elements/scroll.go @@ -3,7 +3,7 @@ package elements import "image" import "tomo" import "tomo/input" -import "tomo/artist" +import "art" import "tomo/ability" var scrollCase = tomo.C("tomo", "scroll") @@ -76,7 +76,7 @@ func (element *Scroll) Entity () tomo.Entity { } // Draw causes the element to draw to the specified destination canvas. -func (element *Scroll) Draw (destination artist.Canvas) { +func (element *Scroll) Draw (destination art.Canvas) { if element.horizontal != nil && element.vertical != nil { bounds := element.entity.Bounds() bounds.Min = image.Pt ( @@ -84,7 +84,7 @@ func (element *Scroll) Draw (destination artist.Canvas) { bounds.Max.Y - element.horizontal.Entity().Bounds().Dy()) state := tomo.State { } deadArea := element.entity.Theme().Pattern(tomo.PatternDead, state, scrollCase) - deadArea.Draw(artist.Cut(destination, bounds), bounds) + deadArea.Draw(art.Cut(destination, bounds), bounds) } } @@ -131,7 +131,7 @@ func (element *Scroll) Layout () { // DrawBackground draws this element's background pattern to the specified // destination canvas. -func (element *Scroll) DrawBackground (destination artist.Canvas) { +func (element *Scroll) DrawBackground (destination art.Canvas) { element.entity.DrawBackground(destination) } diff --git a/elements/scrollbar.go b/elements/scrollbar.go index cb029a9..a6657c9 100644 --- a/elements/scrollbar.go +++ b/elements/scrollbar.go @@ -3,7 +3,7 @@ package elements import "image" import "tomo" import "tomo/input" -import "tomo/artist" +import "art" // ScrollBar is an element similar to Slider, but it has special behavior that // makes it well suited for controlling the viewport position on one axis of a @@ -63,7 +63,7 @@ func (element *ScrollBar) Entity () tomo.Entity { } // Draw causes the element to draw to the specified destination canvas. -func (element *ScrollBar) Draw (destination artist.Canvas) { +func (element *ScrollBar) Draw (destination art.Canvas) { element.recalculate() bounds := element.entity.Bounds() diff --git a/elements/slider.go b/elements/slider.go index 3666a00..d00b73c 100644 --- a/elements/slider.go +++ b/elements/slider.go @@ -3,7 +3,7 @@ package elements import "image" import "tomo" import "tomo/input" -import "tomo/artist" +import "art" // Slider is a slider control with a floating point value between zero and one. type Slider struct { @@ -59,7 +59,7 @@ func (element *slider) Entity () tomo.Entity { } // Draw causes the element to draw to the specified destination canvas. -func (element *slider) Draw (destination artist.Canvas) { +func (element *slider) Draw (destination art.Canvas) { bounds := element.entity.Bounds() element.track = element.entity.Theme().Padding(tomo.PatternGutter, element.c).Apply(bounds) if element.vertical { diff --git a/elements/spacer.go b/elements/spacer.go index 070a1aa..e6751aa 100644 --- a/elements/spacer.go +++ b/elements/spacer.go @@ -1,7 +1,7 @@ package elements import "tomo" -import "tomo/artist" +import "art" var spacerCase = tomo.C("tomo", "spacer") @@ -32,7 +32,7 @@ func (element *Spacer) Entity () tomo.Entity { } // Draw causes the element to draw to the specified destination canvas. -func (element *Spacer) Draw (destination artist.Canvas) { +func (element *Spacer) Draw (destination art.Canvas) { bounds := element.entity.Bounds() if element.line { diff --git a/elements/switch.go b/elements/switch.go index ee9aaa5..26ec895 100644 --- a/elements/switch.go +++ b/elements/switch.go @@ -3,7 +3,7 @@ package elements import "image" import "tomo" import "tomo/input" -import "tomo/artist" +import "art" import "tomo/textdraw" var switchCase = tomo.C("tomo", "switch") @@ -44,7 +44,7 @@ func (element *Switch) Entity () tomo.Entity { } // Draw causes the element to draw to the specified destination canvas. -func (element *Switch) Draw (destination artist.Canvas) { +func (element *Switch) Draw (destination art.Canvas) { bounds := element.entity.Bounds() handleBounds := image.Rect(0, 0, bounds.Dy(), bounds.Dy()).Add(bounds.Min) gutterBounds := image.Rect(0, 0, bounds.Dy() * 2, bounds.Dy()).Add(bounds.Min) diff --git a/elements/testing/artist.go b/elements/testing/artist.go index ce2eec5..0b118e9 100644 --- a/elements/testing/artist.go +++ b/elements/testing/artist.go @@ -5,20 +5,20 @@ import "time" import "image" import "image/color" import "tomo" -import "tomo/artist" -import "tomo/shatter" +import "art" +import "art/shatter" import "tomo/textdraw" -import "tomo/artist/shapes" -import "tomo/artist/artutil" -import "tomo/artist/patterns" +import "art/shapes" +import "art/artutil" +import "art/patterns" -// Artist is an element that displays shapes and patterns drawn by the artist +// Artist is an element that displays shapes and patterns drawn by the art // package in order to test it. type Artist struct { entity tomo.Entity } -// NewArtist creates a new artist test element. +// NewArtist creates a new art test element. func NewArtist () (element *Artist) { element = &Artist { } element.entity = tomo.GetBackend().NewEntity(element) @@ -30,7 +30,7 @@ func (element *Artist) Entity () tomo.Entity { return element.entity } -func (element *Artist) Draw (destination artist.Canvas) { +func (element *Artist) Draw (destination art.Canvas) { bounds := element.entity.Bounds() patterns.Uhex(0x000000FF).Draw(destination, bounds) @@ -81,7 +81,7 @@ func (element *Artist) Draw (destination artist.Canvas) { } tiles := shatter.Shatter(c41.Bounds(), rocks...) for index, tile := range tiles { - []artist.Pattern { + []art.Pattern { patterns.Uhex(0xFF0000FF), patterns.Uhex(0x00FF00FF), patterns.Uhex(0xFF00FFFF), @@ -115,26 +115,26 @@ func (element *Artist) Draw (destination artist.Canvas) { c03 := element.cellAt(destination, 0, 3) patterns.Border { Canvas: element.thingy(c42), - Inset: artist.Inset { 8, 8, 8, 8 }, + Inset: art.Inset { 8, 8, 8, 8 }, }.Draw(c03, c03.Bounds()) // 1, 3 c13 := element.cellAt(destination, 1, 3) patterns.Border { Canvas: element.thingy(c42), - Inset: artist.Inset { 8, 8, 8, 8 }, + Inset: art.Inset { 8, 8, 8, 8 }, }.Draw(c13, c13.Bounds().Inset(10)) // 2, 3 c23 := element.cellAt(destination, 2, 3) patterns.Border { Canvas: element.thingy(c42), - Inset: artist.Inset { 8, 8, 8, 8 }, + Inset: art.Inset { 8, 8, 8, 8 }, }.Draw(c23, c23.Bounds()) patterns.Border { Canvas: element.thingy(c42), - Inset: artist.Inset { 8, 8, 8, 8 }, - }.Draw(artist.Cut(c23, c23.Bounds().Inset(16)), c23.Bounds()) + Inset: art.Inset { 8, 8, 8, 8 }, + }.Draw(art.Cut(c23, c23.Bounds().Inset(16)), c23.Bounds()) // how long did that take to render? drawTime := time.Since(drawStart) @@ -142,7 +142,7 @@ func (element *Artist) Draw (destination artist.Canvas) { textDrawer.SetFace(element.entity.Theme().FontFace ( tomo.FontStyleRegular, tomo.FontSizeNormal, - tomo.C("tomo", "artist"))) + tomo.C("tomo", "art"))) textDrawer.SetText ([]rune (fmt.Sprintf ( "%dms\n%dus", drawTime.Milliseconds(), @@ -152,7 +152,7 @@ func (element *Artist) Draw (destination artist.Canvas) { image.Pt(bounds.Min.X + 8, bounds.Max.Y - 24)) } -func (element *Artist) colorLines (destination artist.Canvas, weight int, bounds image.Rectangle) { +func (element *Artist) colorLines (destination art.Canvas, weight int, bounds image.Rectangle) { bounds = bounds.Inset(4) c := artutil.Hex(0xFFFFFFFF) shapes.ColorLine(destination, c, weight, bounds.Min, bounds.Max) @@ -186,18 +186,18 @@ func (element *Artist) colorLines (destination artist.Canvas, weight int, bounds image.Pt(bounds.Min.X + bounds.Dx() / 2, bounds.Max.Y)) } -func (element *Artist) cellAt (destination artist.Canvas, x, y int) (artist.Canvas) { +func (element *Artist) cellAt (destination art.Canvas, x, y int) (art.Canvas) { bounds := element.entity.Bounds() cellBounds := image.Rectangle { } cellBounds.Min = bounds.Min cellBounds.Max.X = bounds.Min.X + bounds.Dx() / 5 cellBounds.Max.Y = bounds.Min.Y + (bounds.Dy() - 48) / 4 - return artist.Cut (destination, cellBounds.Add (image.Pt ( + return art.Cut (destination, cellBounds.Add (image.Pt ( x * cellBounds.Dx(), y * cellBounds.Dy()))) } -func (element *Artist) thingy (destination artist.Canvas) (result artist.Canvas) { +func (element *Artist) thingy (destination art.Canvas) (result art.Canvas) { bounds := destination.Bounds() bounds = image.Rect(0, 0, 32, 32).Add(bounds.Min) shapes.FillColorRectangle(destination, artutil.Hex(0x440000FF), bounds) @@ -205,5 +205,5 @@ func (element *Artist) thingy (destination artist.Canvas) (result artist.Canvas) shapes.StrokeColorRectangle(destination, artutil.Hex(0x004400FF), bounds.Inset(4), 1) shapes.FillColorRectangle(destination, artutil.Hex(0x004444FF), bounds.Inset(12)) shapes.StrokeColorRectangle(destination, artutil.Hex(0x888888FF), bounds.Inset(8), 1) - return artist.Cut(destination, bounds) + return art.Cut(destination, bounds) } diff --git a/elements/testing/mouse.go b/elements/testing/mouse.go index 80b3ee1..479bbce 100644 --- a/elements/testing/mouse.go +++ b/elements/testing/mouse.go @@ -3,9 +3,9 @@ package testing import "image" import "tomo" import "tomo/input" -import "tomo/artist" -import "tomo/artist/shapes" -import "tomo/artist/artutil" +import "art" +import "art/shapes" +import "art/artutil" var mouseCase = tomo.C("tomo", "mouse") @@ -29,7 +29,7 @@ func (element *Mouse) Entity () tomo.Entity { return element.entity } -func (element *Mouse) Draw (destination artist.Canvas) { +func (element *Mouse) Draw (destination art.Canvas) { bounds := element.entity.Bounds() accent := element.entity.Theme().Color ( tomo.ColorAccent, diff --git a/elements/textbox.go b/elements/textbox.go index 42d0511..4ff43f1 100644 --- a/elements/textbox.go +++ b/elements/textbox.go @@ -6,11 +6,11 @@ import "image" import "tomo" import "tomo/data" import "tomo/input" -import "tomo/artist" +import "art" import "tomo/textdraw" import "tomo/textmanip" import "tomo/fixedutil" -import "tomo/artist/shapes" +import "art/shapes" var textBoxCase = tomo.C("tomo", "textBox") @@ -60,13 +60,13 @@ func (element *TextBox) Entity () tomo.Entity { } // Draw causes the element to draw to the specified destination canvas. -func (element *TextBox) Draw (destination artist.Canvas) { +func (element *TextBox) Draw (destination art.Canvas) { bounds := element.entity.Bounds() state := element.state() pattern := element.entity.Theme().Pattern(tomo.PatternInput, state, textBoxCase) padding := element.entity.Theme().Padding(tomo.PatternInput, textBoxCase) - innerCanvas := artist.Cut(destination, padding.Apply(bounds)) + innerCanvas := art.Cut(destination, padding.Apply(bounds)) pattern.Draw(destination, bounds) offset := element.textOffset() @@ -208,8 +208,8 @@ func (element *TextBox) textOffset () image.Point { innerBounds := padding.Apply(bounds) textHeight := element.valueDrawer.LineHeight().Round() return bounds.Min.Add (image.Pt ( - padding[artist.SideLeft] - element.scroll, - padding[artist.SideTop] + (innerBounds.Dy() - textHeight) / 2)) + padding[art.SideLeft] - element.scroll, + padding[art.SideTop] + (innerBounds.Dy() - textHeight) / 2)) } func (element *TextBox) atPosition (position image.Point) int { diff --git a/elements/togglebutton.go b/elements/togglebutton.go index 83cf954..104ac07 100644 --- a/elements/togglebutton.go +++ b/elements/togglebutton.go @@ -3,7 +3,7 @@ package elements import "image" import "tomo" import "tomo/input" -import "tomo/artist" +import "art" import "tomo/textdraw" var toggleButtonCase = tomo.C("tomo", "toggleButton") @@ -47,7 +47,7 @@ func (element *ToggleButton) Entity () tomo.Entity { } // Draw causes the element to draw to the specified destination canvas. -func (element *ToggleButton) Draw (destination artist.Canvas) { +func (element *ToggleButton) Draw (destination art.Canvas) { state := element.state() bounds := element.entity.Bounds() pattern := element.entity.Theme().Pattern(tomo.PatternButton, state, toggleButtonCase) diff --git a/entity.go b/entity.go index 72be102..f8475c5 100644 --- a/entity.go +++ b/entity.go @@ -1,7 +1,7 @@ package tomo import "image" -import "tomo/artist" +import "art" // Entity is a handle given to elements by the backend. Extended entity // interfaces are defined in the ability module. @@ -33,7 +33,7 @@ type Entity interface { // labels. If there is no parent element (that is, the element is // directly inside of the window), the backend will draw a default // background pattern. - DrawBackground (artist.Canvas) + DrawBackground (art.Canvas) // --- Behaviors relating to parenting --- diff --git a/go.mod b/go.mod index 64d9d0b..28de558 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,10 @@ module tomo go 1.19 +replace art => git.tebibyte.media/tomo/art v1.0.0 + require ( + art v1.0.0 git.tebibyte.media/sashakoshka/ezprof v0.0.0-20230309044548-401cba83602b github.com/jezek/xgbutil v0.0.0-20230403164920-e2f86723ca07 golang.org/x/image v0.7.0 diff --git a/go.sum b/go.sum index 2535671..bf2a06b 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,7 @@ git.tebibyte.media/sashakoshka/ezprof v0.0.0-20230309044548-401cba83602b h1:vPFKR7vjN1VrMdMtpATMrKQobz/cqbPiRrA1EbtG6PM= git.tebibyte.media/sashakoshka/ezprof v0.0.0-20230309044548-401cba83602b/go.mod h1:cpXX8SAUDEvZX5m7scoyruavUhEqQ1SByfWzPFHkTbg= +git.tebibyte.media/tomo/art v1.0.0 h1:dnP19Irgiho5WH0Im0l5vFYj5sDh4nqVk8hvG+6kW4M= +git.tebibyte.media/tomo/art v1.0.0/go.mod h1:pDQKkKWv/81CLTyH743zCzRWiri05+/4H6eNugarzvE= github.com/BurntSushi/freetype-go v0.0.0-20160129220410-b763ddbfe298 h1:1qlsVAQJXZHsaM8b6OLVo6muQUQd4CwkH/D3fnnbHXA= github.com/BurntSushi/freetype-go v0.0.0-20160129220410-b763ddbfe298/go.mod h1:D+QujdIlUNfa0igpNMk6UIvlb6C252URs4yupRUV4lQ= github.com/BurntSushi/graphics-go v0.0.0-20160129215708-b43f31a4a966 h1:lTG4HQym5oPKjL7nGs+csTgiDna685ZXjxijkne828g= diff --git a/plugins/wintergreen/wintergreen/wintergreen.go b/plugins/wintergreen/wintergreen/wintergreen.go index 61be20d..85e7443 100644 --- a/plugins/wintergreen/wintergreen/wintergreen.go +++ b/plugins/wintergreen/wintergreen/wintergreen.go @@ -9,14 +9,14 @@ import "golang.org/x/image/font" import "golang.org/x/image/font/basicfont" import "tomo" import "tomo/data" -import "tomo/artist" -import "tomo/artist/artutil" -import "tomo/artist/patterns" +import "art" +import "art/artutil" +import "art/patterns" //go:embed assets/wintergreen.png var defaultAtlasBytes []byte -var defaultAtlas artist.Canvas -var defaultTextures [17][9]artist.Pattern +var defaultAtlas art.Canvas +var defaultTextures [17][9]art.Pattern //go:embed assets/wintergreen-icons-small.png var defaultIconsSmallAtlasBytes []byte var defaultIconsSmall [640]binaryIcon @@ -24,15 +24,15 @@ var defaultIconsSmall [640]binaryIcon var defaultIconsLargeAtlasBytes []byte var defaultIconsLarge [640]binaryIcon -func atlasCell (col, row int, border artist.Inset) { +func atlasCell (col, row int, border art.Inset) { bounds := image.Rect(0, 0, 16, 16).Add(image.Pt(col, row).Mul(16)) defaultTextures[col][row] = patterns.Border { - Canvas: artist.Cut(defaultAtlas, bounds), + Canvas: art.Cut(defaultAtlas, bounds), Inset: border, } } -func atlasCol (col int, border artist.Inset) { +func atlasCol (col int, border art.Inset) { for index, _ := range defaultTextures[col] { atlasCell(col, index, border) } @@ -43,7 +43,7 @@ type binaryIcon struct { stride int } -func (icon binaryIcon) Draw (destination artist.Canvas, color color.RGBA, at image.Point) { +func (icon binaryIcon) Draw (destination art.Canvas, color color.RGBA, at image.Point) { bounds := icon.Bounds().Add(at).Intersect(destination.Bounds()) point := image.Point { } data, stride := destination.Buffer() @@ -85,43 +85,43 @@ func binaryIconFrom (source image.Image, clip image.Rectangle) (icon binaryIcon) func init () { defaultAtlasImage, _, _ := image.Decode(bytes.NewReader(defaultAtlasBytes)) - defaultAtlas = artist.FromImage(defaultAtlasImage) + defaultAtlas = art.FromImage(defaultAtlasImage) // PatternDead - atlasCol(0, artist.Inset { }) + atlasCol(0, art.Inset { }) // PatternRaised - atlasCol(1, artist.Inset { 6, 6, 6, 6 }) + atlasCol(1, art.Inset { 6, 6, 6, 6 }) // PatternSunken - atlasCol(2, artist.Inset { 4, 4, 4, 4 }) + atlasCol(2, art.Inset { 4, 4, 4, 4 }) // PatternPinboard - atlasCol(3, artist.Inset { 2, 2, 2, 2 }) + atlasCol(3, art.Inset { 2, 2, 2, 2 }) // PatternButton - atlasCol(4, artist.Inset { 6, 6, 6, 6 }) + atlasCol(4, art.Inset { 6, 6, 6, 6 }) // PatternInput - atlasCol(5, artist.Inset { 4, 4, 4, 4 }) + atlasCol(5, art.Inset { 4, 4, 4, 4 }) // PatternGutter - atlasCol(6, artist.Inset { 7, 7, 7, 7 }) + atlasCol(6, art.Inset { 7, 7, 7, 7 }) // PatternHandle - atlasCol(7, artist.Inset { 3, 3, 3, 3 }) + atlasCol(7, art.Inset { 3, 3, 3, 3 }) // PatternLine - atlasCol(8, artist.Inset { 1, 1, 1, 1 }) + atlasCol(8, art.Inset { 1, 1, 1, 1 }) // PatternMercury - atlasCol(13, artist.Inset { 2, 2, 2, 2 }) + atlasCol(13, art.Inset { 2, 2, 2, 2 }) // PatternTableHead: - atlasCol(14, artist.Inset { 4, 4, 4, 4 }) + atlasCol(14, art.Inset { 4, 4, 4, 4 }) // PatternTableCell: - atlasCol(15, artist.Inset { 4, 4, 4, 4 }) + atlasCol(15, art.Inset { 4, 4, 4, 4 }) // PatternLamp: - atlasCol(16, artist.Inset { 4, 3, 4, 3 }) + atlasCol(16, art.Inset { 4, 3, 4, 3 }) // PatternButton: basic.checkbox - atlasCol(9, artist.Inset { 3, 3, 3, 3 }) + atlasCol(9, art.Inset { 3, 3, 3, 3 }) // PatternRaised: basic.listEntry - atlasCol(10, artist.Inset { 3, 3, 3, 3 }) + atlasCol(10, art.Inset { 3, 3, 3, 3 }) // PatternRaised: fun.flatKey - atlasCol(11, artist.Inset { 3, 3, 5, 3 }) + atlasCol(11, art.Inset { 3, 3, 5, 3 }) // PatternRaised: fun.sharpKey - atlasCol(12, artist.Inset { 3, 3, 4, 3 }) + atlasCol(12, art.Inset { 3, 3, 4, 3 }) // set up small icons defaultIconsSmallAtlasImage, _, _ := image.Decode ( @@ -164,7 +164,7 @@ func (Theme) FontFace (style tomo.FontStyle, size tomo.FontSize, c tomo.Case) fo return basicfont.Face7x13 } -func (Theme) Icon (id tomo.Icon, size tomo.IconSize, c tomo.Case) artist.Icon { +func (Theme) Icon (id tomo.Icon, size tomo.IconSize, c tomo.Case) art.Icon { if size == tomo.IconSizeLarge { if id < 0 || int(id) >= len(defaultIconsLarge) { return nil @@ -180,12 +180,12 @@ func (Theme) Icon (id tomo.Icon, size tomo.IconSize, c tomo.Case) artist.Icon { } } -func (Theme) MimeIcon (data.Mime, tomo.IconSize, tomo.Case) artist.Icon { +func (Theme) MimeIcon (data.Mime, tomo.IconSize, tomo.Case) art.Icon { // TODO return nil } -func (Theme) Pattern (id tomo.Pattern, state tomo.State, c tomo.Case) artist.Pattern { +func (Theme) Pattern (id tomo.Pattern, state tomo.State, c tomo.Case) art.Pattern { offset := 0; switch { case state.Disabled: offset = 1 case state.Pressed && state.On: offset = 4 @@ -254,31 +254,31 @@ func (Theme) Color (id tomo.Color, state tomo.State, c tomo.Case) color.RGBA { } [id]) } -func (Theme) Padding (id tomo.Pattern, c tomo.Case) artist.Inset { +func (Theme) Padding (id tomo.Pattern, c tomo.Case) art.Inset { switch id { case tomo.PatternSunken: if c.Match("tomo", "progressBar", "") { - return artist.I(2, 1, 1, 2) + return art.I(2, 1, 1, 2) } else if c.Match("tomo", "list", "") { - return artist.I(2) + return art.I(2) } else if c.Match("tomo", "flowList", "") { - return artist.I(2) + return art.I(2) } else { - return artist.I(8) + return art.I(8) } case tomo.PatternPinboard: if c.Match("tomo", "piano", "") { - return artist.I(2) + return art.I(2) } else { - return artist.I(8) + return art.I(8) } - case tomo.PatternTableCell: return artist.I(5) - case tomo.PatternTableHead: return artist.I(5) - case tomo.PatternGutter: return artist.I(0) - case tomo.PatternLine: return artist.I(1) - case tomo.PatternMercury: return artist.I(5) - case tomo.PatternLamp: return artist.I(5, 5, 5, 6) - default: return artist.I(8) + case tomo.PatternTableCell: return art.I(5) + case tomo.PatternTableHead: return art.I(5) + case tomo.PatternGutter: return art.I(0) + case tomo.PatternLine: return art.I(1) + case tomo.PatternMercury: return art.I(5) + case tomo.PatternLamp: return art.I(5, 5, 5, 6) + default: return art.I(8) } } diff --git a/plugins/x/x/entity.go b/plugins/x/x/entity.go index dc5a1ee..8acd0ea 100644 --- a/plugins/x/x/entity.go +++ b/plugins/x/x/entity.go @@ -2,7 +2,7 @@ package x import "image" import "tomo" -import "tomo/artist" +import "art" import "tomo/ability" type entity struct { @@ -159,7 +159,7 @@ func (entity *entity) SetMinimumSize (width, height int) { } } -func (entity *entity) DrawBackground (destination artist.Canvas) { +func (entity *entity) DrawBackground (destination art.Canvas) { if entity.parent != nil { entity.parent.element.(ability.Container).DrawBackground(destination) } else if entity.window != nil { diff --git a/plugins/x/x/system.go b/plugins/x/x/system.go index 436c0c6..e1365a9 100644 --- a/plugins/x/x/system.go +++ b/plugins/x/x/system.go @@ -1,7 +1,7 @@ package x import "image" -import "tomo/artist" +import "art" import "tomo/ability" type entitySet map[*entity] struct { } @@ -22,7 +22,7 @@ func (set entitySet) Add (entity *entity) { type system struct { child *entity focused *entity - canvas artist.BasicCanvas + canvas art.BasicCanvas invalidateIgnore bool drawingInvalid entitySet @@ -167,7 +167,7 @@ func (system *system) draw () { for entity := range system.drawingInvalid { if entity.clippedBounds.Empty() { continue } - entity.element.Draw (artist.Cut ( + entity.element.Draw (art.Cut ( system.canvas, entity.clippedBounds)) finalBounds = finalBounds.Union(entity.clippedBounds) diff --git a/plugins/x/x/window.go b/plugins/x/x/window.go index 22706e2..2c53be7 100644 --- a/plugins/x/x/window.go +++ b/plugins/x/x/window.go @@ -13,7 +13,7 @@ import "github.com/jezek/xgbutil/mousebind" import "github.com/jezek/xgbutil/xgraphics" import "tomo" import "tomo/data" -import "tomo/artist" +import "art" type mainWindow struct { *window } type menuWindow struct { *window } @@ -414,7 +414,7 @@ func (window *window) pasteAndPush (region image.Rectangle) { } func (window *window) paste (region image.Rectangle) { - canvas := artist.Cut(window.canvas, region) + canvas := art.Cut(window.canvas, region) data, stride := canvas.Buffer() bounds := canvas.Bounds().Intersect(window.xCanvas.Bounds()) diff --git a/textdraw/drawer.go b/textdraw/drawer.go index f371eca..237a58e 100644 --- a/textdraw/drawer.go +++ b/textdraw/drawer.go @@ -5,7 +5,7 @@ import "unicode" import "image/draw" import "image/color" import "golang.org/x/image/math/fixed" -import "tomo/artist" +import "art" // Drawer is an extended TypeSetter that is able to draw text. Much like // TypeSetter, It has no constructor and its zero value can be used safely. @@ -13,7 +13,7 @@ type Drawer struct { TypeSetter } // Draw draws the drawer's text onto the specified canvas at the given offset. func (drawer Drawer) Draw ( - destination artist.Canvas, + destination art.Canvas, color color.RGBA, offset image.Point, ) ( diff --git a/theme.go b/theme.go index 4f6f3ae..1049eb3 100644 --- a/theme.go +++ b/theme.go @@ -4,7 +4,7 @@ import "image" import "image/color" import "golang.org/x/image/font" import "tomo/data" -import "tomo/artist" +import "art" // Color lits a number of cannonical colors, each with its own ID. type Color int; const ( @@ -309,7 +309,7 @@ type Hints struct { // StaticInset defines an inset rectangular area in the middle of the // pattern that does not change between PatternStates. If the inset is // zero on all sides, this hint does not apply. - StaticInset artist.Inset + StaticInset art.Inset // Uniform specifies a singular color for the entire pattern. If the // alpha channel is zero, this hint does not apply. @@ -322,15 +322,15 @@ type Theme interface { FontFace (FontStyle, FontSize, Case) font.Face // Icon returns an appropriate icon given an icon name, size, and case. - Icon (Icon, IconSize, Case) artist.Icon + Icon (Icon, IconSize, Case) art.Icon // Icon returns an appropriate icon given a file mime type, size, and, // case. - MimeIcon (data.Mime, IconSize, Case) artist.Icon + MimeIcon (data.Mime, IconSize, Case) art.Icon // Pattern returns an appropriate pattern given a pattern name, case, // and state. - Pattern (Pattern, State, Case) artist.Pattern + Pattern (Pattern, State, Case) art.Pattern // Color returns an appropriate pattern given a color name, case, and // state. @@ -338,7 +338,7 @@ type Theme interface { // Padding returns how much space should be between the bounds of a // pattern whatever an element draws inside of it. - Padding (Pattern, Case) artist.Inset + Padding (Pattern, Case) art.Inset // Margin returns the left/right (x) and top/bottom (y) margins that // should be put between any self-contained objects drawn within this