kettlebell-tracker/internal/ui/theme/theme.go

79 lines
2.2 KiB
Go

package theme
import (
"image/color"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/theme"
)
var (
OneDarkBackground = color.NRGBA{R: 40, G: 44, B: 52, A: 0xff} // #282c34 (helleres Grau)
OneDarkCardBackground = color.NRGBA{R: 30, G: 32, B: 40, A: 0xff} // #1e2028 (dunkler für Cards)
OneDarkText = color.NRGBA{R: 171, G: 178, B: 191, A: 0xff} // #abb2bf (Standard-Text)
OneDarkSubtleText = color.NRGBA{R: 110, G: 115, B: 141, A: 0xff} // #6e738d (deaktiviert, Placeholder)
OneDarkGreen = color.NRGBA{R: 152, G: 195, B: 121, A: 0xff} // #98c379
OneDarkRed = color.NRGBA{R: 224, G: 108, B: 117, A: 0xff} // #e06c75
OneDarkYellow = color.NRGBA{R: 229, G: 192, B: 123, A: 0xff} // #e5c07b
)
type KettlebellThemeOneDark struct{}
func (t *KettlebellThemeOneDark) Color(name fyne.ThemeColorName, variant fyne.ThemeVariant) color.Color {
switch name {
case theme.ColorNameBackground:
return OneDarkBackground
case theme.ColorNameButton:
return OneDarkGreen
case theme.ColorNameDisabledButton:
return OneDarkSubtleText
case theme.ColorNamePrimary:
return OneDarkGreen
case theme.ColorNamePlaceHolder:
return OneDarkSubtleText
case theme.ColorNameHover:
return OneDarkYellow
case theme.ColorNameForeground:
return OneDarkText
case theme.ColorNameDisabled:
return OneDarkSubtleText
case theme.ColorNameError:
return OneDarkRed
case theme.ColorNameInputBackground:
return OneDarkCardBackground
case theme.ColorNameSeparator:
return OneDarkSubtleText
case theme.ColorNameSelection:
return OneDarkYellow
case theme.ColorNameShadow:
return OneDarkCardBackground
case theme.ColorNameFocus:
return OneDarkYellow
default:
return theme.DefaultTheme().Color(name, variant)
}
}
func (t *KettlebellThemeOneDark) Icon(name fyne.ThemeIconName) fyne.Resource {
return theme.DefaultTheme().Icon(name)
}
func (t *KettlebellThemeOneDark) Font(style fyne.TextStyle) fyne.Resource {
return theme.DefaultTheme().Font(style)
}
func (t *KettlebellThemeOneDark) Size(name fyne.ThemeSizeName) float32 {
switch name {
case theme.SizeNamePadding:
return 8
case theme.SizeNameText:
return 16
case theme.SizeNameHeadingText:
return 24
case theme.SizeNameSubHeadingText:
return 20
default:
return theme.DefaultTheme().Size(name)
}
}