mirror of
https://github.com/vsariola/sointu.git
synced 2025-05-28 03:10:24 -04:00
172 lines
5.1 KiB
Go
172 lines
5.1 KiB
Go
package gioui
|
|
|
|
import (
|
|
_ "embed"
|
|
"fmt"
|
|
"image/color"
|
|
|
|
"gioui.org/font/gofont"
|
|
"gioui.org/text"
|
|
"gioui.org/unit"
|
|
"gioui.org/widget"
|
|
"gioui.org/widget/material"
|
|
"golang.org/x/exp/shiny/materialdesign/icons"
|
|
"gopkg.in/yaml.v2"
|
|
)
|
|
|
|
type Theme struct {
|
|
Material material.Theme
|
|
FilledButton ButtonStyle
|
|
TextButton ButtonStyle
|
|
DisabledButton ButtonStyle
|
|
MenuButton ButtonStyle
|
|
Oscilloscope OscilloscopeStyle
|
|
NumericUpDown NumericUpDownStyle
|
|
DialogTitle LabelStyle
|
|
DialogText LabelStyle
|
|
SongPanel struct {
|
|
RowHeader LabelStyle
|
|
RowValue LabelStyle
|
|
Expander LabelStyle
|
|
Version LabelStyle
|
|
ErrorColor color.NRGBA
|
|
}
|
|
Alert struct {
|
|
Warning PopupAlertStyle
|
|
Error PopupAlertStyle
|
|
Info PopupAlertStyle
|
|
}
|
|
NoteEditor struct {
|
|
TrackTitle LabelStyle
|
|
Header LabelStyle
|
|
}
|
|
Dialog struct {
|
|
Title LabelStyle
|
|
Text LabelStyle
|
|
}
|
|
OrderEditor struct {
|
|
TrackTitle LabelStyle
|
|
}
|
|
Menu struct {
|
|
Text LabelStyle
|
|
ShortCut LabelStyle
|
|
}
|
|
InstrumentEditor struct {
|
|
Octave LabelStyle
|
|
Voices LabelStyle
|
|
InstrumentList struct {
|
|
Number LabelStyle
|
|
Name LabelStyle
|
|
NameMuted LabelStyle
|
|
}
|
|
UnitList struct {
|
|
Name LabelStyle
|
|
Comment LabelStyle
|
|
Stack LabelStyle
|
|
Disabled LabelStyle
|
|
}
|
|
}
|
|
UnitEditor struct {
|
|
Hint LabelStyle
|
|
Chooser LabelStyle
|
|
ParameterName LabelStyle
|
|
}
|
|
}
|
|
|
|
//go:embed theme.yml
|
|
var defaultTheme []byte
|
|
|
|
func NewTheme() *Theme {
|
|
var theme Theme
|
|
err := yaml.Unmarshal(defaultTheme, &theme)
|
|
if err != nil {
|
|
panic(fmt.Errorf("failed to default theme: %w", err))
|
|
}
|
|
str, _ := yaml.Marshal(theme)
|
|
fmt.Printf(string(str))
|
|
ReadCustomConfigYml("theme.yml", &theme)
|
|
theme.Material.Shaper = &text.Shaper{}
|
|
theme.Material.Icon.CheckBoxChecked = mustIcon(widget.NewIcon(icons.ToggleCheckBox))
|
|
theme.Material.Icon.CheckBoxUnchecked = mustIcon(widget.NewIcon(icons.ToggleCheckBoxOutlineBlank))
|
|
theme.Material.Icon.RadioChecked = mustIcon(widget.NewIcon(icons.ToggleRadioButtonChecked))
|
|
theme.Material.Icon.RadioUnchecked = mustIcon(widget.NewIcon(icons.ToggleRadioButtonUnchecked))
|
|
return &theme
|
|
}
|
|
|
|
func mustIcon(ic *widget.Icon, err error) *widget.Icon {
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return ic
|
|
}
|
|
|
|
var fontCollection []text.FontFace = gofont.Collection()
|
|
|
|
var white = color.NRGBA{R: 255, G: 255, B: 255, A: 255}
|
|
var black = color.NRGBA{R: 0, G: 0, B: 0, A: 255}
|
|
var transparent = color.NRGBA{A: 0}
|
|
|
|
var primaryColor = color.NRGBA{R: 206, G: 147, B: 216, A: 255}
|
|
var secondaryColor = color.NRGBA{R: 128, G: 222, B: 234, A: 255}
|
|
|
|
var highEmphasisTextColor = color.NRGBA{R: 222, G: 222, B: 222, A: 222}
|
|
var mediumEmphasisTextColor = color.NRGBA{R: 153, G: 153, B: 153, A: 153}
|
|
var disabledTextColor = color.NRGBA{R: 255, G: 255, B: 255, A: 97}
|
|
|
|
var backgroundColor = color.NRGBA{R: 18, G: 18, B: 18, A: 255}
|
|
|
|
var labelDefaultFont = fontCollection[6].Font
|
|
var labelDefaultFontSize = unit.Sp(18)
|
|
|
|
var rowMarkerPatternTextColor = secondaryColor
|
|
var rowMarkerRowTextColor = mediumEmphasisTextColor
|
|
|
|
var trackerFont = fontCollection[6].Font
|
|
var trackerFontSize = unit.Sp(16)
|
|
var trackerInactiveTextColor = highEmphasisTextColor
|
|
var trackerActiveTextColor = color.NRGBA{R: 255, G: 255, B: 130, A: 255}
|
|
var trackerPlayColor = color.NRGBA{R: 55, G: 55, B: 61, A: 255}
|
|
var trackerPatMarker = primaryColor
|
|
var oneBeatHighlight = color.NRGBA{R: 31, G: 37, B: 38, A: 255}
|
|
var twoBeatHighlight = color.NRGBA{R: 31, G: 51, B: 53, A: 255}
|
|
|
|
var patternPlayColor = color.NRGBA{R: 55, G: 55, B: 61, A: 255}
|
|
var patternTextColor = primaryColor
|
|
var patternCellColor = color.NRGBA{R: 255, G: 255, B: 255, A: 3}
|
|
var loopMarkerColor = color.NRGBA{R: 252, G: 186, B: 3, A: 255}
|
|
|
|
var instrumentHoverColor = color.NRGBA{R: 30, G: 31, B: 38, A: 255}
|
|
var instrumentNameHintColor = color.NRGBA{R: 200, G: 200, B: 200, A: 255}
|
|
|
|
var songSurfaceColor = color.NRGBA{R: 24, G: 24, B: 24, A: 255}
|
|
|
|
var popupSurfaceColor = color.NRGBA{R: 50, G: 50, B: 51, A: 255}
|
|
var popupShadowColor = color.NRGBA{R: 0, G: 0, B: 0, A: 192}
|
|
|
|
var dragListSelectedColor = color.NRGBA{R: 55, G: 55, B: 61, A: 255}
|
|
var dragListHoverColor = color.NRGBA{R: 42, G: 45, B: 61, A: 255}
|
|
|
|
var inactiveLightSurfaceColor = color.NRGBA{R: 37, G: 37, B: 38, A: 255}
|
|
var activeLightSurfaceColor = color.NRGBA{R: 45, G: 45, B: 45, A: 255}
|
|
|
|
var numberInputBgColor = color.NRGBA{R: 255, G: 255, B: 255, A: 3}
|
|
|
|
var cursorColor = color.NRGBA{R: 100, G: 140, B: 255, A: 48}
|
|
var selectionColor = color.NRGBA{R: 100, G: 140, B: 255, A: 12}
|
|
var inactiveSelectionColor = color.NRGBA{R: 140, G: 140, B: 140, A: 16}
|
|
var cursorForTrackMidiInColor = color.NRGBA{R: 255, G: 100, B: 140, A: 48}
|
|
var cursorNeighborForTrackMidiInColor = color.NRGBA{R: 255, G: 100, B: 140, A: 24}
|
|
|
|
var errorColor = color.NRGBA{R: 207, G: 102, B: 121, A: 255}
|
|
|
|
var menuHoverColor = color.NRGBA{R: 30, G: 31, B: 38, A: 255}
|
|
|
|
var scrollBarColor = color.NRGBA{R: 255, G: 255, B: 255, A: 32}
|
|
|
|
var warningColor = color.NRGBA{R: 251, G: 192, B: 45, A: 255}
|
|
|
|
var dialogBgColor = color.NRGBA{R: 0, G: 0, B: 0, A: 224}
|
|
|
|
var paramIsSendTargetColor = color.NRGBA{R: 120, G: 120, B: 210, A: 255}
|
|
var paramValueInvalidColor = color.NRGBA{R: 120, G: 120, B: 120, A: 190}
|