diff --git a/DarkUI/DarkUI.WPF/Converters/HtmlToUIColorConverter.cs b/DarkUI/DarkUI.WPF/Converters/HtmlToUIColorConverter.cs new file mode 100644 index 0000000000..34bfd05355 --- /dev/null +++ b/DarkUI/DarkUI.WPF/Converters/HtmlToUIColorConverter.cs @@ -0,0 +1,22 @@ +using System; +using System.Drawing; +using System.Globalization; +using System.Windows.Data; + +namespace DarkUI.WPF.Converters; + +public class HtmlToUIColorConverter : IValueConverter +{ + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + var colString = (string)value; + var col = ColorTranslator.FromHtml(colString); + return System.Windows.Media.Color.FromArgb(col.A, col.R, col.G, col.B); + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + var col = (System.Windows.Media.Color)value; + return ColorTranslator.ToHtml(Color.FromArgb(col.A, col.R, col.G, col.B)); + } +} diff --git a/DarkUI/DarkUI.WPF/Converters/VectorToBrushConverter.cs b/DarkUI/DarkUI.WPF/Converters/VectorToBrushConverter.cs new file mode 100644 index 0000000000..ec9b768123 --- /dev/null +++ b/DarkUI/DarkUI.WPF/Converters/VectorToBrushConverter.cs @@ -0,0 +1,27 @@ +using System; +using System.Globalization; +using System.Numerics; +using System.Windows.Data; +using System.Windows.Media; + +namespace DarkUI.WPF.Converters; + +public class VectorToBrushConverter : IValueConverter +{ + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + var vec = (Vector4)value; + byte r = (byte)(Math.Clamp(vec.X, 0.0f, 1.0f) * 255.0f); + byte g = (byte)(Math.Clamp(vec.Y, 0.0f, 1.0f) * 255.0f); + byte b = (byte)(Math.Clamp(vec.Z, 0.0f, 1.0f) * 255.0f); + byte a = (byte)(Math.Clamp(vec.W, 0.0f, 1.0f) * 255.0f); + + return new SolidColorBrush(Color.FromArgb(a, r, g, b)); + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + Color col = ((SolidColorBrush)value).Color; + return new Vector4(col.R / 255.0f, col.G / 255.0f, col.B / 255.0f, col.A / 255.0f); + } +} diff --git a/DarkUI/DarkUI.WPF/Converters/VectorToUIColorConverter.cs b/DarkUI/DarkUI.WPF/Converters/VectorToUIColorConverter.cs new file mode 100644 index 0000000000..4359d20679 --- /dev/null +++ b/DarkUI/DarkUI.WPF/Converters/VectorToUIColorConverter.cs @@ -0,0 +1,26 @@ +using System; +using System.Globalization; +using System.Numerics; +using System.Windows.Data; +using System.Windows.Media; + +namespace DarkUI.WPF.Converters; + +public class VectorToUIColorConverter : IValueConverter +{ + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) + { + var vec = (Vector4)value; + byte r = (byte)(Math.Clamp(vec.X, 0.0f, 1.0f) * 255.0f); + byte g = (byte)(Math.Clamp(vec.Y, 0.0f, 1.0f) * 255.0f); + byte b = (byte)(Math.Clamp(vec.Z, 0.0f, 1.0f) * 255.0f); + byte a = (byte)(Math.Clamp(vec.W, 0.0f, 1.0f) * 255.0f); + return Color.FromArgb(a, r, g, b); + } + + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) + { + var col = (Color)value; + return new Vector4(col.R / 255.0f, col.G / 255.0f, col.B / 255.0f, col.A / 255.0f); + } +} diff --git a/DarkUI/DarkUI.WPF/DarkUI.WPF.csproj b/DarkUI/DarkUI.WPF/DarkUI.WPF.csproj index 054b6f2730..14535c8bf4 100644 --- a/DarkUI/DarkUI.WPF/DarkUI.WPF.csproj +++ b/DarkUI/DarkUI.WPF/DarkUI.WPF.csproj @@ -34,6 +34,10 @@ + + + + diff --git a/DarkUI/DarkUI.WPF/Dictionaries/BlackColors.xaml b/DarkUI/DarkUI.WPF/Dictionaries/BlackColors.xaml index 9fd8a7550e..d7f076dbc6 100644 --- a/DarkUI/DarkUI.WPF/Dictionaries/BlackColors.xaml +++ b/DarkUI/DarkUI.WPF/Dictionaries/BlackColors.xaml @@ -32,6 +32,7 @@ 0.5 0.25 0.5 + 1.0 0.3 3 diff --git a/DarkUI/DarkUI.WPF/Dictionaries/DarkColors.xaml b/DarkUI/DarkUI.WPF/Dictionaries/DarkColors.xaml index 542f15f518..3c85524c27 100644 --- a/DarkUI/DarkUI.WPF/Dictionaries/DarkColors.xaml +++ b/DarkUI/DarkUI.WPF/Dictionaries/DarkColors.xaml @@ -1,4 +1,5 @@  @@ -34,6 +35,7 @@ 0.5 0.25 0.5 + 1.0 0.3 3 diff --git a/DarkUI/DarkUI.WPF/Dictionaries/DarkColors.xaml.cs b/DarkUI/DarkUI.WPF/Dictionaries/DarkColors.xaml.cs new file mode 100644 index 0000000000..2f804e145e --- /dev/null +++ b/DarkUI/DarkUI.WPF/Dictionaries/DarkColors.xaml.cs @@ -0,0 +1,47 @@ +using DarkUI.Config; + +using System.Windows; + +namespace DarkUI.WPF.Dictionaries; + +public partial class DarkColors : ResourceDictionary +{ + public DarkColors() + { + InitializeComponent(); + + if (!Colors.HasBrightnessChanged) + return; + + ApplyDarkUiColors(); + } + + private void ApplyDarkUiColors() + { + // Keep the XAML palette as the fallback and overwrite it only when DarkUI brightness has changed. + SetColor("Color_Text", Colors.LightText); + SetColor("Color_Background", Colors.GreyBackground); + SetColor("Color_Background_Alternative", Colors.HeaderBackground); + SetColor("Color_Background_Control", Colors.LightBackground); + SetColor("Color_Background_Defaulted", Colors.DarkBlueBackground); + SetColor("Color_Background_Disabled", Colors.DarkGreySelection); + SetColor("Color_Background_High", Colors.LighterBackground); + SetColor("Color_Background_Low", Colors.MediumBackground); + + SetColor("Color_Border", Colors.GreySelection); + SetColor("Color_Border_High", Colors.LightestBackground); + SetColor("Color_Border_Low", Colors.MediumBackground); + + SetColor("Color_Highlight", Colors.BlueHighlight); + SetColor("Color_Selection", Colors.BlueSelection); + SetColor("Color_Selection_LostFocus", Colors.GreySelection); + SetColor("Color_WindowBorder", Colors.BlueBackground); + + this["Opacity_Icon"] = (double)Colors.Brightness; + } + + private void SetColor(string key, System.Drawing.Color color) + { + this[key] = System.Windows.Media.Color.FromArgb(color.A, color.R, color.G, color.B); + } +} diff --git a/DarkUI/DarkUI.WPF/Dictionaries/LightColors.xaml b/DarkUI/DarkUI.WPF/Dictionaries/LightColors.xaml index b6e6eaa2f6..455ae2fa91 100644 --- a/DarkUI/DarkUI.WPF/Dictionaries/LightColors.xaml +++ b/DarkUI/DarkUI.WPF/Dictionaries/LightColors.xaml @@ -32,6 +32,7 @@ 0.25 0.2 0.5 + 1.0 0.3 3 diff --git a/DarkUI/DarkUI.WPF/Styles/ColorPickerButton.xaml b/DarkUI/DarkUI.WPF/Styles/ColorPickerButton.xaml index 2ff27cde8a..da77e83f0b 100644 --- a/DarkUI/DarkUI.WPF/Styles/ColorPickerButton.xaml +++ b/DarkUI/DarkUI.WPF/Styles/ColorPickerButton.xaml @@ -17,7 +17,7 @@ - + diff --git a/DarkUI/DarkUI.WPF/Styles/Icon.xaml b/DarkUI/DarkUI.WPF/Styles/Icon.xaml index 1938c78b32..23dcc9ed4d 100644 --- a/DarkUI/DarkUI.WPF/Styles/Icon.xaml +++ b/DarkUI/DarkUI.WPF/Styles/Icon.xaml @@ -7,6 +7,7 @@