Restructure internal/theme

This commit is contained in:
Sasha Koshka 2024-06-03 03:04:29 -04:00
parent cf3b7ca651
commit 8d9bdd5cb8
15 changed files with 36 additions and 15 deletions

View File

@ -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

View File

@ -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
}

View File

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB

View File

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 6.9 KiB

View File

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -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)

View File

@ -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
}

View File

@ -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 },
),
},
}

View File

@ -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 { },
}
}