From 8d9bdd5cb82ab989622c0c4f40eab26bddf30bad Mon Sep 17 00:00:00 2001 From: Sasha Koshka Date: Mon, 3 Jun 2024 03:04:29 -0400 Subject: [PATCH] Restructure internal/theme --- examples/icons/main.go | 2 +- internal/registrar/registrar_unix.go | 15 ++++++++++----- .../fallback}/assets/icons-large.png | Bin .../fallback}/assets/icons-large.xcf | Bin .../fallback}/assets/icons-small.png | Bin .../fallback}/assets/icons-small.xcf | Bin .../fallback}/assets/old/icons-large.png | Bin .../fallback}/assets/old/icons-large.xcf | Bin .../fallback}/assets/old/icons-small.png | Bin .../fallback}/assets/old/icons-small.xcf | Bin .../theme/{default => icons/fallback}/icon.go | 8 +++++++- internal/theme/{xdgicons => icons/xdg}/icon.go | 4 ++-- .../theme/{xdgicons => icons/xdg}/xdgiconname.go | 0 .../theme/{default => style/fallback}/style.go | 13 ++++++++++++- .../default.go => style/fallback/wintergreen.go} | 9 ++++----- 15 files changed, 36 insertions(+), 15 deletions(-) rename internal/theme/{default => icons/fallback}/assets/icons-large.png (100%) rename internal/theme/{default => icons/fallback}/assets/icons-large.xcf (100%) rename internal/theme/{default => icons/fallback}/assets/icons-small.png (100%) rename internal/theme/{default => icons/fallback}/assets/icons-small.xcf (100%) rename internal/theme/{default => icons/fallback}/assets/old/icons-large.png (100%) rename internal/theme/{default => icons/fallback}/assets/old/icons-large.xcf (100%) rename internal/theme/{default => icons/fallback}/assets/old/icons-small.png (100%) rename internal/theme/{default => icons/fallback}/assets/old/icons-small.xcf (100%) rename internal/theme/{default => icons/fallback}/icon.go (98%) rename internal/theme/{xdgicons => icons/xdg}/icon.go (97%) rename internal/theme/{xdgicons => icons/xdg}/xdgiconname.go (100%) rename internal/theme/{default => style/fallback}/style.go (96%) rename internal/theme/{default/default.go => style/fallback/wintergreen.go} (68%) diff --git a/examples/icons/main.go b/examples/icons/main.go index 7c920bd..ab5e106 100644 --- a/examples/icons/main.go +++ b/examples/icons/main.go @@ -7,7 +7,7 @@ import "git.tebibyte.media/tomo/nasin" import "git.tebibyte.media/tomo/objects" import "git.tebibyte.media/tomo/tomo/input" import "git.tebibyte.media/tomo/objects/layouts" -import "git.tebibyte.media/tomo/nasin/internal/theme/xdgicons" +import "git.tebibyte.media/tomo/nasin/internal/theme/icons/xdg" const scrollIcons = true diff --git a/internal/registrar/registrar_unix.go b/internal/registrar/registrar_unix.go index 53172cf..4c7380c 100644 --- a/internal/registrar/registrar_unix.go +++ b/internal/registrar/registrar_unix.go @@ -3,13 +3,14 @@ package registrar import "os" import "log" -import "git.tebibyte.media/tomo/x" +import "git.tebibyte.media/tomo/backend/x" import "git.tebibyte.media/tomo/tomo" -import "git.tebibyte.media/tomo/nasin/internal/theme/default" -import "git.tebibyte.media/tomo/nasin/internal/theme/xdgicons" +import "git.tebibyte.media/tomo/nasin/internal/theme/icons/xdg" +import "git.tebibyte.media/tomo/nasin/internal/theme/icons/fallback" +import "git.tebibyte.media/tomo/nasin/internal/theme/style/fallback" func Init () error { - theme := defaultTheme.Theme() + theme := fallbackStyle.New() iconThemeName := os.Getenv("TOMO_XDG_ICON_THEME") if iconThemeName != "" { @@ -20,8 +21,12 @@ func Init () error { log.Printf("nasin: could not load icon theme '%s': %v", iconThemeName, err) } } + + if theme.IconTheme == nil { + theme.IconTheme = fallbackIcons.New() + } tomo.SetTheme(theme) - tomo.Register(1, x.NewBackend) + tomo.Register(1, x.New) return nil } diff --git a/internal/theme/default/assets/icons-large.png b/internal/theme/icons/fallback/assets/icons-large.png similarity index 100% rename from internal/theme/default/assets/icons-large.png rename to internal/theme/icons/fallback/assets/icons-large.png diff --git a/internal/theme/default/assets/icons-large.xcf b/internal/theme/icons/fallback/assets/icons-large.xcf similarity index 100% rename from internal/theme/default/assets/icons-large.xcf rename to internal/theme/icons/fallback/assets/icons-large.xcf diff --git a/internal/theme/default/assets/icons-small.png b/internal/theme/icons/fallback/assets/icons-small.png similarity index 100% rename from internal/theme/default/assets/icons-small.png rename to internal/theme/icons/fallback/assets/icons-small.png diff --git a/internal/theme/default/assets/icons-small.xcf b/internal/theme/icons/fallback/assets/icons-small.xcf similarity index 100% rename from internal/theme/default/assets/icons-small.xcf rename to internal/theme/icons/fallback/assets/icons-small.xcf diff --git a/internal/theme/default/assets/old/icons-large.png b/internal/theme/icons/fallback/assets/old/icons-large.png similarity index 100% rename from internal/theme/default/assets/old/icons-large.png rename to internal/theme/icons/fallback/assets/old/icons-large.png diff --git a/internal/theme/default/assets/old/icons-large.xcf b/internal/theme/icons/fallback/assets/old/icons-large.xcf similarity index 100% rename from internal/theme/default/assets/old/icons-large.xcf rename to internal/theme/icons/fallback/assets/old/icons-large.xcf diff --git a/internal/theme/default/assets/old/icons-small.png b/internal/theme/icons/fallback/assets/old/icons-small.png similarity index 100% rename from internal/theme/default/assets/old/icons-small.png rename to internal/theme/icons/fallback/assets/old/icons-small.png diff --git a/internal/theme/default/assets/old/icons-small.xcf b/internal/theme/icons/fallback/assets/old/icons-small.xcf similarity index 100% rename from internal/theme/default/assets/old/icons-small.xcf rename to internal/theme/icons/fallback/assets/old/icons-small.xcf diff --git a/internal/theme/default/icon.go b/internal/theme/icons/fallback/icon.go similarity index 98% rename from internal/theme/default/icon.go rename to internal/theme/icons/fallback/icon.go index d8bf213..5c3eb67 100644 --- a/internal/theme/default/icon.go +++ b/internal/theme/icons/fallback/icon.go @@ -1,4 +1,4 @@ -package defaultTheme +package fallbackIcons import "bytes" import "image" @@ -7,6 +7,7 @@ import _ "image/png" import "git.tebibyte.media/tomo/tomo" import "git.tebibyte.media/tomo/tomo/data" import "git.tebibyte.media/tomo/tomo/canvas" +import dataTheme "git.tebibyte.media/tomo/nasin/internal/theme" //go:embed assets/icons-small.png var atlasSmallBytes []byte @@ -416,6 +417,11 @@ type iconTheme struct { texturesLarge map[tomo.Icon] canvas.Texture } +// New creates a new fallback icon theme. +func New () dataTheme.IconTheme { + return new(iconTheme) +} + func (this *iconTheme) ensure () { if this.texturesSmall != nil { return } this.texturesSmall = generateSource(atlasSmallBytes, 16) diff --git a/internal/theme/xdgicons/icon.go b/internal/theme/icons/xdg/icon.go similarity index 97% rename from internal/theme/xdgicons/icon.go rename to internal/theme/icons/xdg/icon.go index f0ce89d..f59d207 100644 --- a/internal/theme/xdgicons/icon.go +++ b/internal/theme/icons/xdg/icon.go @@ -54,14 +54,14 @@ func (this *iconTheme) xdgIcon (name string, size tomo.IconSize) (canvas.Texture iconFile, err := os.Open(icon.Path) if err != nil { // this failing indicates a broken icon theme - log.Println("nasin: icon file '%s' is inaccessible: %v", icon.Path, err) + log.Printf("nasin: icon file '%s' is inaccessible: %v\n", icon.Path, err) return nil, false } iconImage, _, err := image.Decode(iconFile) if err != nil { // this failing indicates a broken icon theme - log.Println("nasin: icon file '%s' is broken: %v", icon.Path, err) + log.Printf("nasin: icon file '%s' is broken: %v\n", icon.Path, err) return nil, false } diff --git a/internal/theme/xdgicons/xdgiconname.go b/internal/theme/icons/xdg/xdgiconname.go similarity index 100% rename from internal/theme/xdgicons/xdgiconname.go rename to internal/theme/icons/xdg/xdgiconname.go diff --git a/internal/theme/default/style.go b/internal/theme/style/fallback/style.go similarity index 96% rename from internal/theme/default/style.go rename to internal/theme/style/fallback/style.go index 7f49d00..48b093c 100644 --- a/internal/theme/default/style.go +++ b/internal/theme/style/fallback/style.go @@ -1,4 +1,4 @@ -package defaultTheme +package fallbackStyle import "image/color" import "git.tebibyte.media/tomo/tomo" @@ -295,4 +295,15 @@ var rules = []dataTheme.Rule { dataTheme.AttrColor { Color: tomo.ColorAccent }, ), }, + + // *.File[*] + dataTheme.Rule { + Role: tomo.R("", "File", ""), + Default: dataTheme.AS ( + dataTheme.AttrColor { Color: color.Transparent }, + ), + Focused: dataTheme.AS ( + dataTheme.AttrColor { Color: tomo.ColorAccent }, + ), + }, } diff --git a/internal/theme/default/default.go b/internal/theme/style/fallback/wintergreen.go similarity index 68% rename from internal/theme/default/default.go rename to internal/theme/style/fallback/wintergreen.go index d352cb4..604147f 100644 --- a/internal/theme/default/default.go +++ b/internal/theme/style/fallback/wintergreen.go @@ -1,12 +1,12 @@ -package defaultTheme +package fallbackStyle import "image/color" import "git.tebibyte.media/tomo/tomo" import dataTheme "git.tebibyte.media/tomo/nasin/internal/theme" -// Theme returns Wintergreen, the default Tomo tomo. It is neutral-gray with -// green and turquoise accents. -func Theme () *dataTheme.Theme { +// New returns Wintergreen, the default Tomo tomo. It is neutral-gray with green +// and turquoise accents. +func New () *dataTheme.Theme { return &dataTheme.Theme { Colors: map[tomo.Color] color.Color { tomo.ColorBackground: colorBackground, @@ -16,6 +16,5 @@ func Theme () *dataTheme.Theme { tomo.ColorAccent: colorFocus, }, Rules: rules, - IconTheme: &iconTheme { }, } }