Compare commits
3 Commits
v0.5.1
...
d4c08a0f8c
| Author | SHA1 | Date | |
|---|---|---|---|
| d4c08a0f8c | |||
| 38054a95bb | |||
| 2ae5e2e30f |
2
go.mod
2
go.mod
@@ -3,7 +3,7 @@ module git.tebibyte.media/tomo/backend
|
|||||||
go 1.20
|
go 1.20
|
||||||
|
|
||||||
require (
|
require (
|
||||||
git.tebibyte.media/tomo/tomo v0.41.1
|
git.tebibyte.media/tomo/tomo v0.42.0
|
||||||
git.tebibyte.media/tomo/typeset v0.7.1
|
git.tebibyte.media/tomo/typeset v0.7.1
|
||||||
git.tebibyte.media/tomo/xgbkb v1.0.1
|
git.tebibyte.media/tomo/xgbkb v1.0.1
|
||||||
github.com/jezek/xgb v1.1.1
|
github.com/jezek/xgb v1.1.1
|
||||||
|
|||||||
4
go.sum
4
go.sum
@@ -1,6 +1,6 @@
|
|||||||
git.tebibyte.media/sashakoshka/xgbkb v1.0.0/go.mod h1:pNcE6TRO93vHd6q42SdwLSTTj25L0Yzggz7yLe0JV6Q=
|
git.tebibyte.media/sashakoshka/xgbkb v1.0.0/go.mod h1:pNcE6TRO93vHd6q42SdwLSTTj25L0Yzggz7yLe0JV6Q=
|
||||||
git.tebibyte.media/tomo/tomo v0.41.1 h1:XdbyF3VjsLj1Zppr70gUaufuh49hU32JQo2ENnw4PcA=
|
git.tebibyte.media/tomo/tomo v0.42.0 h1:yaEUnURYrvBdMdcajrFhpd83TNzyQyBB+jOxvIyQTkU=
|
||||||
git.tebibyte.media/tomo/tomo v0.41.1/go.mod h1:C9EzepS9wjkTJjnZaPBh22YvVPyA4hbBAJVU20Rdmps=
|
git.tebibyte.media/tomo/tomo v0.42.0/go.mod h1:WrtilgKB1y8O2Yu7X4mYcRiqOlPR8NuUnoA/ynkQWrs=
|
||||||
git.tebibyte.media/tomo/typeset v0.7.1 h1:aZrsHwCG5ZB4f5CruRFsxLv5ezJUCFUFsQJJso2sXQ8=
|
git.tebibyte.media/tomo/typeset v0.7.1 h1:aZrsHwCG5ZB4f5CruRFsxLv5ezJUCFUFsQJJso2sXQ8=
|
||||||
git.tebibyte.media/tomo/typeset v0.7.1/go.mod h1:PwDpSdBF3l/EzoIsa2ME7QffVVajnTHZN6l3MHEGe1g=
|
git.tebibyte.media/tomo/typeset v0.7.1/go.mod h1:PwDpSdBF3l/EzoIsa2ME7QffVVajnTHZN6l3MHEGe1g=
|
||||||
git.tebibyte.media/tomo/xgbkb v1.0.1 h1:b3HDUopjdQp1MZrb5Vpil4bOtk3NnNXtfQW27Blw2kE=
|
git.tebibyte.media/tomo/xgbkb v1.0.1 h1:b3HDUopjdQp1MZrb5Vpil4bOtk3NnNXtfQW27Blw2kE=
|
||||||
|
|||||||
@@ -91,17 +91,11 @@ func (this *Memo[T]) Value () T {
|
|||||||
// Invalidate marks the Memo's value as invalid, which will cause it to be
|
// Invalidate marks the Memo's value as invalid, which will cause it to be
|
||||||
// updated the next time Value is called.
|
// updated the next time Value is called.
|
||||||
func (this *Memo[T]) Invalidate () {
|
func (this *Memo[T]) Invalidate () {
|
||||||
|
var zero T
|
||||||
|
this.cache = zero
|
||||||
this.valid = false
|
this.valid = false
|
||||||
}
|
}
|
||||||
|
|
||||||
// InvalidateTo invalidates the Memo and sets its value. The new value will be
|
|
||||||
// entirely inaccessible. This is only intended to be used for setting a
|
|
||||||
// reference to nil
|
|
||||||
func (this *Memo[T]) InvalidateTo (value T) {
|
|
||||||
this.Invalidate()
|
|
||||||
this.cache = value
|
|
||||||
}
|
|
||||||
|
|
||||||
// Cycler stores a value and an accompanying io.Closer. When the value is set,
|
// Cycler stores a value and an accompanying io.Closer. When the value is set,
|
||||||
// the closer associated with the previous value is closed.
|
// the closer associated with the previous value is closed.
|
||||||
type Cycler[T any] struct {
|
type Cycler[T any] struct {
|
||||||
@@ -130,3 +124,28 @@ func (this *Cycler[T]) Close () error {
|
|||||||
this.closer = nil
|
this.closer = nil
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Optional is an optional value.
|
||||||
|
type Optional[T any] struct {
|
||||||
|
value T
|
||||||
|
exists bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// Value returns the value and true if the value exists. If not, it returns the
|
||||||
|
// last set value and false.
|
||||||
|
func (this *Optional[T]) Value () (T, bool) {
|
||||||
|
return this.value, this.exists
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set sets the value.
|
||||||
|
func (this *Optional[T]) Set (value T) {
|
||||||
|
this.value = value
|
||||||
|
this.exists = true
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unset unsets the value.
|
||||||
|
func (this *Optional[T]) Unset () {
|
||||||
|
var zero T
|
||||||
|
this.value = zero
|
||||||
|
this.exists = false
|
||||||
|
}
|
||||||
|
|||||||
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user