Move style into this repostiory
This commit is contained in:
parent
bacdd81f60
commit
2ae5e2e30f
70
style/style.go
Normal file
70
style/style.go
Normal file
@ -0,0 +1,70 @@
|
||||
package style
|
||||
|
||||
import "image/color"
|
||||
import "git.tebibyte.media/tomo/tomo"
|
||||
|
||||
// Style can apply a visual style to different objects.
|
||||
type Style struct {
|
||||
// Rules determines which styles get applied to which Objects.
|
||||
Rules []Rule
|
||||
|
||||
// Colors maps tomo.Color values to color.RGBA values.
|
||||
Colors map[tomo.Color] color.Color
|
||||
}
|
||||
|
||||
// Rule describes under what circumstances should certain style attributes be
|
||||
// active.
|
||||
type Rule struct {
|
||||
Role tomo.Role
|
||||
Tags []string
|
||||
Set AttrSet
|
||||
}
|
||||
|
||||
// Ru is shorthand for creating a rule structure
|
||||
func Ru (set AttrSet, role tomo.Role, tags ...string) Rule {
|
||||
return Rule {
|
||||
Role: role,
|
||||
Tags: tags,
|
||||
Set: set,
|
||||
}
|
||||
}
|
||||
|
||||
// AttrSet is a set of attributes wherein only one/zero of each attribute type
|
||||
// can exist. It is keyed by the AttrKind of each attribute and must not be
|
||||
// modified directly.
|
||||
type AttrSet map[tomo.AttrKind] tomo.Attr
|
||||
|
||||
// AS builds an AttrSet out of a vararg list of Attr values. If multiple Attrs
|
||||
// of the same kind are specified, the last one will override the others.
|
||||
func AS (attrs ...tomo.Attr) AttrSet {
|
||||
set := AttrSet { }
|
||||
set.Add(attrs...)
|
||||
return set
|
||||
}
|
||||
|
||||
// Add adds attributes to the set.
|
||||
func (this AttrSet) Add (attrs ...tomo.Attr) {
|
||||
for _, attr := range attrs {
|
||||
this[attr.Kind()] = attr
|
||||
}
|
||||
}
|
||||
|
||||
// MergeUnder takes attributes from another set and adds them if they don't
|
||||
// already exist in this one.
|
||||
func (this AttrSet) MergeUnder (other AttrSet) {
|
||||
if other == nil { return }
|
||||
for _, attr := range other {
|
||||
if _, exists := this[attr.Kind()]; !exists {
|
||||
this.Add(attr)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MergeOver takes attributes from another set and adds them, overriding this
|
||||
// one.
|
||||
func (this AttrSet) MergeOver (other AttrSet) {
|
||||
if other == nil { return }
|
||||
for _, attr := range other {
|
||||
this.Add(attr)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user