Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f99d9e0d2a | |||
| c785fb461c | |||
| 487471d7a9 |
@@ -45,6 +45,10 @@ func (broadcaster *Broadcaster[L]) ensure () {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NoCookie is a cookie that does nothing when closed.
|
||||||
|
type NoCookie struct { }
|
||||||
|
func (NoCookie) Close () { }
|
||||||
|
|
||||||
type cookie[L any] struct {
|
type cookie[L any] struct {
|
||||||
id int
|
id int
|
||||||
broadcaster *Broadcaster[L]
|
broadcaster *Broadcaster[L]
|
||||||
|
|||||||
2
go.mod
2
go.mod
@@ -2,4 +2,4 @@ module git.tebibyte.media/tomo/tomo
|
|||||||
|
|
||||||
go 1.20
|
go 1.20
|
||||||
|
|
||||||
require golang.org/x/image v0.8.0
|
require golang.org/x/image v0.11.0
|
||||||
|
|||||||
3
go.sum
3
go.sum
@@ -3,6 +3,8 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
|
|||||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
golang.org/x/image v0.8.0 h1:agUcRXV/+w6L9ryntYYsF2x9fQTMd4T8fiiYXAVW6Jg=
|
golang.org/x/image v0.8.0 h1:agUcRXV/+w6L9ryntYYsF2x9fQTMd4T8fiiYXAVW6Jg=
|
||||||
golang.org/x/image v0.8.0/go.mod h1:PwLxp3opCYg4WR2WO9P0L6ESnsD6bLTWcw8zanLMVFM=
|
golang.org/x/image v0.8.0/go.mod h1:PwLxp3opCYg4WR2WO9P0L6ESnsD6bLTWcw8zanLMVFM=
|
||||||
|
golang.org/x/image v0.11.0 h1:ds2RoQvBvYTiJkwpSFDwCcDFNX7DqjL2WsUgTNk0Ooo=
|
||||||
|
golang.org/x/image v0.11.0/go.mod h1:bglhjqbqVuEb9e9+eNR45Jfu7D+T4Qan+NhQk8Ck2P8=
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
@@ -26,6 +28,7 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
|||||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
||||||
|
golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||||
|
|||||||
@@ -23,12 +23,30 @@ func R (pack, object string) Role {
|
|||||||
return Role { Package: pack, Object: object }
|
return Role { Package: pack, Object: object }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Color represents a color ID.
|
||||||
|
type Color int; const (
|
||||||
|
ColorBackground Color = iota
|
||||||
|
ColorForeground
|
||||||
|
ColorRaised
|
||||||
|
ColorSunken
|
||||||
|
ColorAccent
|
||||||
|
)
|
||||||
|
|
||||||
|
// RGBA satisfies the color.Color interface.
|
||||||
|
func (id Color) RGBA () (r, g, b, a uint32) {
|
||||||
|
if current == nil { return }
|
||||||
|
return current.RGBA(id)
|
||||||
|
}
|
||||||
|
|
||||||
// Theme is an object that can apply a visual style to different objects.
|
// Theme is an object that can apply a visual style to different objects.
|
||||||
type Theme interface {
|
type Theme interface {
|
||||||
// Apply applies the theme to the given object, according to the given
|
// Apply applies the theme to the given object, according to the given
|
||||||
// role. This may register event listeners with the given object;
|
// role. This may register event listeners with the given object;
|
||||||
// closing the returned cookie will remove them.
|
// closing the returned cookie will remove them.
|
||||||
Apply (tomo.Object, Role) event.Cookie
|
Apply (tomo.Object, Role) event.Cookie
|
||||||
|
|
||||||
|
// RGBA returns the RGBA values of the corresponding color ID.
|
||||||
|
RGBA (Color) (r, g, b, a uint32)
|
||||||
}
|
}
|
||||||
|
|
||||||
var current Theme
|
var current Theme
|
||||||
@@ -42,5 +60,7 @@ func SetTheme (theme Theme) {
|
|||||||
// role. This may register event listeners with the given object; closing the
|
// role. This may register event listeners with the given object; closing the
|
||||||
// returned cookie will remove them.
|
// returned cookie will remove them.
|
||||||
func Apply (object tomo.Object, role Role) event.Cookie {
|
func Apply (object tomo.Object, role Role) event.Cookie {
|
||||||
|
if current == nil { return event.NoCookie { } }
|
||||||
return current.Apply(object, role)
|
return current.Apply(object, role)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user