From a60a729ad9768cb4cefe5da57f8783a4662d083c Mon Sep 17 00:00:00 2001 From: Sasha Koshka Date: Sat, 10 Aug 2024 20:47:36 -0400 Subject: [PATCH] Update X backend --- x/backend.go | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/x/backend.go b/x/backend.go index 9057e21..6e2ecba 100644 --- a/x/backend.go +++ b/x/backend.go @@ -4,7 +4,9 @@ import "image" import "errors" import "git.tebibyte.media/tomo/tomo" import "git.tebibyte.media/tomo/xgbkb" +import "git.tebibyte.media/tomo/tomo/data" import "git.tebibyte.media/tomo/tomo/canvas" +import "git.tebibyte.media/tomo/backend/style" import "git.tebibyte.media/tomo/backend/x/canvas" import "git.tebibyte.media/tomo/backend/internal/system" @@ -17,6 +19,9 @@ import "github.com/jezek/xgbutil/mousebind" type Backend struct { x *xgbutil.XUtil system *system.System + + style *style.Style + iconSet style.IconSet doChannel chan func() windows map[xproto.Window] *window @@ -126,19 +131,40 @@ func (this *Backend) NewCanvas (bounds image.Rectangle) canvas.CanvasCloser { return xcanvas.NewCanvas(this.x, bounds) } -func (this *Backend) SetStyle (style *tomo.Style) { +func (this *Backend) ColorRGBA (id tomo.Color) (r, g, b, a uint32) { + if col, ok := this.style.Colors[id]; ok { + return col.RGBA() + } + return 0xFFFF, 0, 0xFFFF, 0xFFFF // punish bad styles +} + +func (this *Backend) IconTexture (id tomo.Icon, size tomo.IconSize) canvas.Texture { + return this.iconSet.Icon(id, size) +} + +func (this *Backend) MimeIconTexture (mime data.Mime, size tomo.IconSize) canvas.Texture { + return this.iconSet.MimeIcon(mime, size) +} + +func (this *Backend) SetStyle (style *style.Style) { + this.style = style this.system.SetStyle(style) } -func (this *Backend) SetIconSet (icons tomo.IconSet) { - this.system.SetIconSet(icons) +func (this *Backend) SetIconSet (iconSet style.IconSet) { + this.iconSet = iconSet + this.system.SetIconSet(iconSet) +} + +func (this *Backend) SetFaceSet (faceSet style.FaceSet) { + this.system.SetFaceSet(faceSet) } func (this *Backend) assert () { if this == nil { panic("x: nil backend") } } -func (this *Backend) afterEvent () { +func (this *Backend) afterEvent () { for _, window := range this.windows { window.hierarchy.AfterEvent() }