Files
lazyrun/internal/ui/theme.go
T
oxpoe c1aed1e286 Tema surreal + logo koala baru
- assets/logo.svg (dream sky koala) + assets/icon.png hasil render 512x512
  (skrip render: oksvg/rasterx, sparkle di-inline karena <use> tidak didukung)
- tema: langit malam ungu (#140E24), kartu violet, primer dusk pink, aksen
  amber<->magenta yang berdenyut; varian terang jadi lavender lembut
- ikon monokrom dari Iconify ikut diwarnai dusk pink (#c25c9e), bukan indigo lama
- screenshot README diperbarui
2026-10-13 09:02:09 +07:00

91 lines
3.5 KiB
Go

package ui
import (
"image/color"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/theme"
)
// Palet brand LazyRun, diambil dari logo (dream sky: ungu malam, senja pink, bulan amber).
var (
brandPurple = color.NRGBA{R: 0x6A, G: 0x3D, B: 0x9A, A: 0xFF}
brandMagenta = color.NRGBA{R: 0xC2, G: 0x5C, B: 0x9E, A: 0xFF}
brandAmber = color.NRGBA{R: 0xFF, G: 0xD1, B: 0x66, A: 0xFF}
)
// Nama warna tambahan di luar tema standar Fyne.
const (
colorNameCard fyne.ThemeColorName = "lazyrunCard"
colorNameCardHover fyne.ThemeColorName = "lazyrunCardHover"
colorNameMuted fyne.ThemeColorName = "lazyrunMuted"
colorNameChipMenu fyne.ThemeColorName = "lazyrunChipMenu"
colorNameChipDesk fyne.ThemeColorName = "lazyrunChipDesktop"
colorNameChipBroken fyne.ThemeColorName = "lazyrunChipBroken"
colorNameChipKind fyne.ThemeColorName = "lazyrunChipKind"
)
// brand menimpa sebagian warna/ukuran tema bawaan; terang/gelap tetap ikut sistem.
type brand struct{ fyne.Theme }
func (b brand) Color(name fyne.ThemeColorName, variant fyne.ThemeVariant) color.Color {
dark := variant == theme.VariantDark
switch name {
case theme.ColorNamePrimary:
// senja pink di malam hari, ungu tua di tema terang
return pick(dark, brandMagenta, color.NRGBA{R: 0x8E, G: 0x3F, B: 0xA8, A: 0xFF})
case theme.ColorNameBackground:
// langit malam surreal
return pick(dark, color.NRGBA{R: 0x14, G: 0x0E, B: 0x24, A: 0xFF}, color.NRGBA{R: 0xF5, G: 0xEF, B: 0xF9, A: 0xFF})
case colorNameCard:
return pick(dark, color.NRGBA{R: 0x1E, G: 0x16, B: 0x36, A: 0xFF}, color.NRGBA{R: 0xFF, G: 0xFF, B: 0xFF, A: 0xFF})
case colorNameCardHover:
return withAlpha(brandAmber, pick[uint8](dark, 0x1F, 0x18))
case theme.ColorNameInputBackground:
return pick(dark, color.NRGBA{R: 0x19, G: 0x11, B: 0x35, A: 0xFF}, color.NRGBA{R: 0xFF, G: 0xFF, B: 0xFF, A: 0xFF})
case theme.ColorNameButton, theme.ColorNameMenuBackground:
return pick(dark, color.NRGBA{R: 0x26, G: 0x1B, B: 0x45, A: 0xFF}, color.NRGBA{R: 0xED, G: 0xE3, B: 0xF5, A: 0xFF})
case theme.ColorNameOverlayBackground:
return pick(dark, color.NRGBA{R: 0x1B, G: 0x13, B: 0x33, A: 0xFF}, color.NRGBA{R: 0xFF, G: 0xFF, B: 0xFF, A: 0xFF})
case theme.ColorNameInputBorder, theme.ColorNameSeparator:
return pick(dark, color.NRGBA{R: 0x3A, G: 0x2A, B: 0x63, A: 0xFF}, color.NRGBA{R: 0xDC, G: 0xCF, B: 0xE9, A: 0xFF})
case colorNameMuted:
return pick(dark, color.NRGBA{R: 0xA7, G: 0x9A, B: 0xC8, A: 0xFF}, color.NRGBA{R: 0x6E, G: 0x61, B: 0x83, A: 0xFF})
case colorNameChipMenu:
return withAlpha(brandPurple, pick[uint8](dark, 0x66, 0x2E))
case colorNameChipDesk:
return withAlpha(brandMagenta, pick[uint8](dark, 0x4E, 0x30))
case colorNameChipKind:
return withAlpha(color.NRGBA{R: 0xFF, G: 0xD1, B: 0x66, A: 0xFF}, pick[uint8](dark, 0x24, 0x30))
case colorNameChipBroken:
// merah senja: peringatan yang tetap terasa "seram" tapi terbaca
return withAlpha(color.NRGBA{R: 0xD9, G: 0x46, B: 0x3C, A: 0xFF}, pick[uint8](dark, 0x50, 0x30))
}
return b.Theme.Color(name, variant)
}
// Size membuat sudut tombol/kartu lebih membulat dari tema bawaan.
func (b brand) Size(name fyne.ThemeSizeName) float32 {
switch name {
case theme.SizeNameButtonRadius, theme.SizeNameInputRadius:
return 8
case theme.SizeNameCardRadius, theme.SizeNamePopupRadius:
return 14
case theme.SizeNamePadding:
return 5
}
return b.Theme.Size(name)
}
func pick[T any](cond bool, yes, no T) T {
if cond {
return yes
}
return no
}
func withAlpha(c color.NRGBA, a uint8) color.Color {
c.A = a
return c
}