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
This commit is contained in:
1 parent
25a979f24c
commit
c1aed1e286
13 files changed
+120
-26
No files matched your search
@@ -11,8 +11,9 @@ import (
|
||||
"github.com/srwiley/rasterx"
|
||||
)
|
||||
|
||||
// currentColor diisi ke SVG yang memakai fill="currentColor".
|
||||
const currentColor = "#4f46e5"
|
||||
// currentColor diisi ke SVG yang memakai fill="currentColor"
|
||||
// (warna brand: dusk pink, terlihat di background terang maupun gelap).
|
||||
const currentColor = "#c25c9e"
|
||||
|
||||
// Rasterize mengubah SVG menjadi PNG persegi `size`x`size`.
|
||||
//
|
||||
|
||||
@@ -76,9 +76,9 @@ func TestRasterizeColorsCurrentColorIcons(t *testing.T) {
|
||||
if a == 0 {
|
||||
t.Fatal("ikon currentColor tidak terwarnai (transparan)")
|
||||
}
|
||||
// brand indigo #4F46E5: biru > merah > hijau
|
||||
if !(b > r && r > g) {
|
||||
t.Errorf("warna pengganti bukan brand indigo: r=%d g=%d b=%d", r>>8, g>>8, b>>8)
|
||||
// brand dusk pink #C25C9E: merah > biru > hijau
|
||||
if !(r > b && b > g) {
|
||||
t.Errorf("warna pengganti bukan warna brand: r=%d g=%d b=%d", r>>8, g>>8, b>>8)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ import (
|
||||
|
||||
// pulseGradient membuat garis aksen bergerak bolak-balik antara indigo dan cyan.
|
||||
func pulseGradient(bar *canvas.LinearGradient) {
|
||||
anim := canvas.NewColorRGBAAnimation(brandIndigo, brandCyan, 3*time.Second, func(c color.Color) {
|
||||
anim := canvas.NewColorRGBAAnimation(brandAmber, brandMagenta, 3*time.Second, func(c color.Color) {
|
||||
bar.EndColor = c
|
||||
canvas.Refresh(bar)
|
||||
})
|
||||
|
||||
@@ -32,6 +32,7 @@ type app struct {
|
||||
icons *iconCache
|
||||
count *canvas.Text // angka jumlah shortcut di header daftar
|
||||
versionText *canvas.Text // versi di footer; berubah kalau ada update
|
||||
accent *canvas.LinearGradient
|
||||
version string
|
||||
}
|
||||
|
||||
@@ -87,9 +88,9 @@ func build(a fyne.App, version string) (*app, error) {
|
||||
ui.versionText,
|
||||
)
|
||||
|
||||
accent := accentBar()
|
||||
pulseGradient(accent)
|
||||
top := container.NewVBox(header, accent,
|
||||
ui.accent = accentBar()
|
||||
pulseGradient(ui.accent)
|
||||
top := container.NewVBox(header, ui.accent,
|
||||
container.NewHBox(sectionLabel(T("installed")), countChip))
|
||||
body := container.NewBorder(
|
||||
top,
|
||||
|
||||
@@ -78,7 +78,7 @@ func chipLabel(text string, bg fyne.ThemeColorName) (fyne.CanvasObject, *canvas.
|
||||
|
||||
// accentBar adalah garis gradien brand di bawah header.
|
||||
func accentBar() *canvas.LinearGradient {
|
||||
bar := canvas.NewLinearGradient(brandIndigo, brandCyan, 90)
|
||||
bar := canvas.NewLinearGradient(brandAmber, brandMagenta, 90)
|
||||
bar.SetMinSize(fyne.NewSize(0, 3))
|
||||
return bar
|
||||
}
|
||||
|
||||
+20
-16
@@ -7,10 +7,11 @@ import (
|
||||
"fyne.io/fyne/v2/theme"
|
||||
)
|
||||
|
||||
// Palet brand LazyRun, diambil dari ikon aplikasi.
|
||||
// Palet brand LazyRun, diambil dari logo (dream sky: ungu malam, senja pink, bulan amber).
|
||||
var (
|
||||
brandIndigo = color.NRGBA{R: 0x4F, G: 0x46, B: 0xE5, A: 0xFF}
|
||||
brandCyan = color.NRGBA{R: 0x06, G: 0xB6, B: 0xD4, A: 0xFF}
|
||||
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.
|
||||
@@ -31,31 +32,34 @@ func (b brand) Color(name fyne.ThemeColorName, variant fyne.ThemeVariant) color.
|
||||
dark := variant == theme.VariantDark
|
||||
switch name {
|
||||
case theme.ColorNamePrimary:
|
||||
return pick(dark, color.NRGBA{R: 0x7C, G: 0x7A, B: 0xFF, A: 0xFF}, brandIndigo)
|
||||
// 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:
|
||||
return pick(dark, color.NRGBA{R: 0x13, G: 0x13, B: 0x1B, A: 0xFF}, color.NRGBA{R: 0xF5, G: 0xF5, B: 0xFA, A: 0xFF})
|
||||
// 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: 0x1D, G: 0x1D, B: 0x28, A: 0xFF}, color.NRGBA{R: 0xFF, G: 0xFF, B: 0xFF, A: 0xFF})
|
||||
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(brandIndigo, pick[uint8](dark, 0x2E, 0x14))
|
||||
return withAlpha(brandAmber, pick[uint8](dark, 0x1F, 0x18))
|
||||
case theme.ColorNameInputBackground:
|
||||
return pick(dark, color.NRGBA{R: 0x1A, G: 0x1A, B: 0x24, A: 0xFF}, color.NRGBA{R: 0xFF, G: 0xFF, B: 0xFF, A: 0xFF})
|
||||
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: 0x22, G: 0x22, B: 0x2E, A: 0xFF}, color.NRGBA{R: 0xEC, G: 0xEC, B: 0xF4, A: 0xFF})
|
||||
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: 0x1B, B: 0x25, A: 0xFF}, color.NRGBA{R: 0xFF, G: 0xFF, B: 0xFF, A: 0xFF})
|
||||
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: 0x32, G: 0x32, B: 0x44, A: 0xFF}, color.NRGBA{R: 0xDC, G: 0xDC, B: 0xE8, A: 0xFF})
|
||||
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: 0x9C, G: 0x9C, B: 0xB4, A: 0xFF}, color.NRGBA{R: 0x6B, G: 0x6B, B: 0x80, A: 0xFF})
|
||||
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(brandIndigo, pick[uint8](dark, 0x44, 0x26))
|
||||
return withAlpha(brandPurple, pick[uint8](dark, 0x66, 0x2E))
|
||||
case colorNameChipDesk:
|
||||
return withAlpha(brandCyan, pick[uint8](dark, 0x3D, 0x2C))
|
||||
return withAlpha(brandMagenta, pick[uint8](dark, 0x4E, 0x30))
|
||||
case colorNameChipKind:
|
||||
return pick(dark, color.NRGBA{R: 0xFF, G: 0xFF, B: 0xFF, A: 0x1C}, color.NRGBA{R: 0x00, G: 0x00, B: 0x00, A: 0x12})
|
||||
return withAlpha(color.NRGBA{R: 0xFF, G: 0xD1, B: 0x66, A: 0xFF}, pick[uint8](dark, 0x24, 0x30))
|
||||
case colorNameChipBroken:
|
||||
return withAlpha(color.NRGBA{R: 0xE0, G: 0x4F, B: 0x4F, A: 0xFF}, pick[uint8](dark, 0x4A, 0x2E))
|
||||
// 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)
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user