2022-12-31 16:57:11 -05:00
|
|
|
package theme
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/charmbracelet/lipgloss"
|
|
|
|
"github.com/mrusme/gobbs/config"
|
|
|
|
)
|
|
|
|
|
|
|
|
type Theme struct {
|
|
|
|
DialogBox struct {
|
2023-01-01 01:42:42 -05:00
|
|
|
Window struct {
|
|
|
|
Focused lipgloss.Style
|
|
|
|
Blurred lipgloss.Style
|
|
|
|
}
|
|
|
|
Titlebar struct {
|
|
|
|
Focused lipgloss.Style
|
|
|
|
Blurred lipgloss.Style
|
|
|
|
}
|
2022-12-31 16:57:11 -05:00
|
|
|
Bottombar lipgloss.Style
|
|
|
|
}
|
|
|
|
|
|
|
|
PostsList struct {
|
2022-12-31 17:18:53 -05:00
|
|
|
List struct {
|
|
|
|
Focused lipgloss.Style
|
|
|
|
Blurred lipgloss.Style
|
|
|
|
}
|
|
|
|
Item struct {
|
|
|
|
Focused lipgloss.Style
|
|
|
|
Blurred lipgloss.Style
|
2022-12-31 18:32:04 -05:00
|
|
|
Selected lipgloss.Style
|
|
|
|
}
|
|
|
|
ItemDetail struct {
|
|
|
|
Focused lipgloss.Style
|
|
|
|
Blurred lipgloss.Style
|
|
|
|
Selected lipgloss.Style
|
2022-12-31 17:18:53 -05:00
|
|
|
}
|
2022-12-31 16:57:11 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
Post struct {
|
|
|
|
Author lipgloss.Style
|
|
|
|
Subject lipgloss.Style
|
|
|
|
}
|
|
|
|
|
|
|
|
Reply struct {
|
|
|
|
Author lipgloss.Style
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func New(cfg *config.Config) (*Theme) {
|
|
|
|
t := new(Theme)
|
|
|
|
|
2022-12-31 18:42:49 -05:00
|
|
|
t.PostsList.List.Focused = t.fromConfig(&cfg.Theme.PostsList.List.Focused)
|
|
|
|
t.PostsList.List.Blurred = t.fromConfig(&cfg.Theme.PostsList.List.Blurred)
|
|
|
|
t.PostsList.Item.Focused = t.fromConfig(&cfg.Theme.PostsList.Item.Focused)
|
|
|
|
t.PostsList.Item.Blurred = t.fromConfig(&cfg.Theme.PostsList.Item.Blurred)
|
|
|
|
t.PostsList.Item.Selected = t.fromConfig(&cfg.Theme.PostsList.Item.Selected)
|
|
|
|
t.PostsList.ItemDetail.Focused = t.fromConfig(&cfg.Theme.PostsList.ItemDetail.Focused)
|
|
|
|
t.PostsList.ItemDetail.Blurred = t.fromConfig(&cfg.Theme.PostsList.ItemDetail.Blurred)
|
|
|
|
t.PostsList.ItemDetail.Selected = t.fromConfig(&cfg.Theme.PostsList.ItemDetail.Selected)
|
2023-01-01 01:42:42 -05:00
|
|
|
t.DialogBox.Window.Focused = t.fromConfig(&cfg.Theme.DialogBox.Window.Focused)
|
|
|
|
t.DialogBox.Window.Blurred = t.fromConfig(&cfg.Theme.DialogBox.Window.Blurred)
|
|
|
|
t.DialogBox.Titlebar.Focused = t.fromConfig(&cfg.Theme.DialogBox.Titlebar.Focused)
|
|
|
|
t.DialogBox.Titlebar.Blurred = t.fromConfig(&cfg.Theme.DialogBox.Titlebar.Blurred)
|
2022-12-31 18:42:49 -05:00
|
|
|
t.DialogBox.Bottombar = t.fromConfig(&cfg.Theme.DialogBox.Bottombar)
|
|
|
|
t.Post.Author = t.fromConfig(&cfg.Theme.Post.Author)
|
|
|
|
t.Post.Subject = t.fromConfig(&cfg.Theme.Post.Subject)
|
|
|
|
t.Reply.Author = t.fromConfig(&cfg.Theme.Reply.Author)
|
2022-12-31 16:57:11 -05:00
|
|
|
return t
|
|
|
|
}
|
2022-12-31 18:42:49 -05:00
|
|
|
|
|
|
|
func (t *Theme) fromConfig(itemCfg *config.ThemeItemConfig) lipgloss.Style {
|
|
|
|
return lipgloss.NewStyle().
|
|
|
|
Margin(itemCfg.Margin...).
|
|
|
|
Padding(itemCfg.Padding...).
|
|
|
|
Border(itemCfg.Border.Border, itemCfg.Border.Sides...).
|
|
|
|
BorderForeground(itemCfg.Border.Foreground).
|
|
|
|
BorderBackground(itemCfg.Border.Background).
|
|
|
|
Foreground(itemCfg.Foreground).
|
|
|
|
Background(itemCfg.Background)
|
|
|
|
}
|
|
|
|
|