Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion OpenUtau.Core/Classic/VoicebankConfig.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,14 @@ public class Subbank {
public string[] ToneRanges { get; set; }
}

public class TrackColor {
public string ColorName { get; set; } = string.Empty;
public string AccentColor { get; set; } = string.Empty;
public string AccentColorDark { get; set; } = string.Empty; // Pressed
public string AccentColorLight { get; set; } = string.Empty; // PointerOver
public string AccentColorCenterKey { get; set; } = string.Empty; // Keyboard
}

public class VoicebankConfig {
public string Name;
public Dictionary<string, string> LocalizedNames;
Expand All @@ -53,7 +61,7 @@ public class VoicebankConfig {
public SymbolSet SymbolSet { get; set; }
public Subbank[] Subbanks { get; set; }
public bool? UseFilenameAsAlias = null;

public TrackColor[] TrackColor;
public void Save(Stream stream) {
using (var writer = new StreamWriter(stream, Encoding.UTF8)) {
Yaml.DefaultSerializer.Serialize(writer, this);
Expand Down
37 changes: 34 additions & 3 deletions OpenUtau/ThemeManager.cs
Original file line number Diff line number Diff line change
@@ -1,17 +1,24 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Media;
using Avalonia.Styling;
using OpenUtau.App;
using OpenUtau.App.Controls;
using OpenUtau.Classic;
using OpenUtau.Core.Ustx;
using OpenUtau.Core.Util;
using ReactiveUI;
using Serilog;

namespace OpenUtau.App {

class ThemeChangedEvent { }

class ThemeManager {
public class ThemeManager {
public static bool IsDarkMode = false;
public static IBrush ForegroundBrush = Brushes.Black;
public static IBrush BackgroundBrush = Brushes.White;
Expand Down Expand Up @@ -54,7 +61,7 @@ class ThemeManager {
public static IBrush ExpActiveBrush = Brushes.Black;
public static IBrush ExpActiveNameBrush = Brushes.White;

public static List<TrackColor> TrackColors = new List<TrackColor>(){
private static readonly List<TrackColor> DefaultTrackColors = new List<TrackColor>(){
new TrackColor("Pink", "#F06292", "#EC407A", "#F48FB1", "#FAC7D8"),
new TrackColor("Red", "#EF5350", "#E53935", "#E57373", "#F2B9B9"),
new TrackColor("Orange", "#FF8A65", "#FF7043", "#FFAB91", "#FFD5C8"),
Expand All @@ -74,6 +81,30 @@ class ThemeManager {
new TrackColor("Blue2", "#3949AB", "#283593", "#5C6BC0", "#AEB5E0"),
new TrackColor("Purple2", "#7B1FA2", "#4A148C", "#AB47BC", "#D5A3DE"),
};
public static List<TrackColor> TrackColors = DefaultTrackColors;
public static void LoadSingerTrackColor(USinger singer) {
try {
var yamlFile = Path.Combine(singer.Location, "character.yaml");
if (File.Exists(yamlFile)) {
using var stream = File.OpenRead(yamlFile);
var config = VoicebankConfig.Load(stream);
var Colors = config.TrackColor;
for (int i = 0; i < Colors.Length; i++) {
if (TrackColors[i].Name != (Colors[i].ColorName)) {
var appTrackColor = new TrackColor(Colors[i].ColorName,
Colors[i].AccentColor,
Colors[i].AccentColorDark,
Colors[i].AccentColorLight,
Colors[i].AccentColorCenterKey);
TrackColors.Add(appTrackColor);
}

}
}
} catch (Exception e) {
Log.Error($"{e}");}
}


public static void LoadTheme() {
if (Application.Current == null) {
Expand Down
8 changes: 8 additions & 0 deletions OpenUtau/ViewModels/MainWindowViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,10 @@ public void NewProject() {

public void OpenProject(string[] files) {
if (files == null) {
var Project = DocManager.Inst.Project;
for (int i = 0; i < Project.tracks.Count; i++) {
ThemeManager.LoadSingerTrackColor(Project.tracks[i].Singer);
}
return;
}
DocManager.Inst.ExecuteCmd(new LoadingNotification(typeof(MainWindow), true, "project"));
Expand All @@ -196,6 +200,10 @@ public void OpenProject(string[] files) {
DocManager.Inst.ExecuteCmd(new LoadingNotification(typeof(MainWindow), false, "project"));
}
DocManager.Inst.Recovered = false;
var project = DocManager.Inst.Project;
for (int i = 0; i < project.tracks.Count; i++) {
ThemeManager.LoadSingerTrackColor(project.tracks[i].Singer);
}
}

public void OpenRecent(string file) {
Expand Down
1 change: 1 addition & 0 deletions OpenUtau/ViewModels/TrackHeaderViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -507,6 +507,7 @@ public void Rename() {
}

public async void SelectTrackColor() {
ThemeManager.LoadSingerTrackColor(Singer);
var dialog = new TrackColorDialog();
dialog.DataContext = new TrackColorViewModel(track);

Expand Down
Loading