Skip to content
Merged
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
12 changes: 6 additions & 6 deletions PCL2.Neo/Helpers/ThemeHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -55,17 +55,17 @@ public void Refresh(ThemeVariant themeVariant)
brushTitle.GradientStops.Add(new GradientStop
{
Offset = 0,
Color = new MyColor().FromHsl2(_colorHue - _colorHueTopbarDelta, _colorSat, 48 + _colorLightAdjust)
Color = MyColor.FromHsl2(_colorHue - _colorHueTopbarDelta, _colorSat, 48 + _colorLightAdjust)
});
brushTitle.GradientStops.Add(new GradientStop
{
Offset = 0.5,
Color = new MyColor().FromHsl2(_colorHue, _colorSat, 54 + _colorLightAdjust)
Color = MyColor.FromHsl2(_colorHue, _colorSat, 54 + _colorLightAdjust)
});
brushTitle.GradientStops.Add(new GradientStop
{
Offset = 1,
Color = new MyColor().FromHsl2(_colorHue + _colorHueTopbarDelta, _colorSat, 48 + _colorLightAdjust)
Color = MyColor.FromHsl2(_colorHue + _colorHueTopbarDelta, _colorSat, 48 + _colorLightAdjust)
});

_mainWindow.NavBackgroundBorder.Background = brushTitle;
Expand All @@ -90,17 +90,17 @@ public void Refresh(ThemeVariant themeVariant)
brushBackground.GradientStops.Add(new GradientStop
{
Offset = -0.1,
Color = new MyColor().FromHsl2(_colorHue - 20, Math.Min(60, _colorSat) * 0.5, 80 * lightAdjust)
Color = MyColor.FromHsl2(_colorHue - 20, Math.Min(60, _colorSat) * 0.5, 80 * lightAdjust)
});
brushBackground.GradientStops.Add(new GradientStop
{
Offset = 0.4,
Color = new MyColor().FromHsl2(_colorHue, _colorSat * 0.9, 90 * lightAdjust)
Color = MyColor.FromHsl2(_colorHue, _colorSat * 0.9, 90 * lightAdjust)
});
brushBackground.GradientStops.Add(new GradientStop
{
Offset = 1.1,
Color = new MyColor().FromHsl2(_colorHue + 20, Math.Min(60, _colorSat) * 0.5, 80 * lightAdjust)
Color = MyColor.FromHsl2(_colorHue + 20, Math.Min(60, _colorSat) * 0.5, 80 * lightAdjust)
});

_mainWindow.MainBorder.Background = brushBackground;
Expand Down
90 changes: 69 additions & 21 deletions PCL2.Neo/Models/MyColor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
namespace PCL2.Neo.Models;


public class MyColor
public class MyColor : IEquatable<MyColor>
{
private Vector4 _color;

Expand Down Expand Up @@ -161,9 +161,51 @@ public MyColor(SolidColorBrush brush)
this._color = new Vector4(color.A, color.R, color.G, color.B);
}

// IEquatable

public bool Equals(MyColor? other)
{
if (other is null)
{
return false;
}

if (ReferenceEquals(this, other))
{
return true;
}

return _color.Equals(other._color);
}

public override bool Equals(object? obj)
{
if (obj is null)
{
return false;
}

if (ReferenceEquals(this, obj))
{
return true;
}

if (obj.GetType() != GetType())
{
return false;
}

return Equals((MyColor)obj);
}

public override int GetHashCode()
{
return _color.GetHashCode();
}

// HSL

public double Hue(double v1, double v2, double vH)
public static double Hue(double v1, double v2, double vH)
{
if (vH < 0) vH += 1;
if (vH > 1) vH -= 1;
Expand All @@ -173,13 +215,14 @@ public double Hue(double v1, double v2, double vH)
return v1;
}

public MyColor FromHsl(double sH, double sS, double sL)
public static MyColor FromHsl(double sH, double sS, double sL)
{
var color = new MyColor();
if (sS == 0)
{
R = (float)(sL * 2.55);
G = R;
B = R;
color.R = (float)(sL * 2.55);
color.G = color.R;
color.B = color.R;
}
else
{
Expand All @@ -188,42 +231,47 @@ public MyColor FromHsl(double sH, double sS, double sL)
double l = sL / 100;
s = l < 0.5 ? s * l + l : s * (1.0 - l) + l;
l = 2 * l - s;
R = (float)(255 * Hue(l, s, h + 1 / 3.0));
G = (float)(255 * Hue(l, s, h));
B = (float)(255 * Hue(l, s, h - 1 / 3.0));
color.R = (float)(255 * Hue(l, s, h + 1 / 3.0));
color.G = (float)(255 * Hue(l, s, h));
color.B = (float)(255 * Hue(l, s, h - 1 / 3.0));
}
A = 255;
return this;

color.A = 255;
return color;
}

public MyColor FromHsl2(double sH, double sS, double sL)
public static MyColor FromHsl2(double sH, double sS, double sL)
{
var color = new MyColor();
if (sS == 0)
{
R = (float)(sL * 2.55);
G = R;
B = R;
color.R = (float)(sL * 2.55);
color.G = color.R;
color.B = color.R;
}
else
{
sH = (sH + 3600000) % 360;
double[] cent = [
double[] cent =
[
+0.1, -0.06, -0.3, // 0, 30, 60
-0.19, -0.15, -0.24, // 90, 120, 150
-0.32, -0.09, +0.18, // 180, 210, 240
+0.05, -0.12, -0.02, // 270, 300, 330
+0.1, -0.06]; // 最后两位与前两位一致,加是变亮,减是变暗
+0.1, -0.06
]; // 最后两位与前两位一致,加是变亮,减是变暗
double center = sH / 30.0;
int intCenter = (int)Math.Floor(center); // 亮度片区编号
int intCenter = (int)Math.Floor(center); // 亮度片区编号
center = 50 - (
(1 - center + intCenter) * cent[intCenter] + (center - intCenter) * cent[intCenter + 1]
) * sS;

sL = sL < center ? sL / center : 1 + (sL - center) / (100 - center);
sL *= 50;
FromHsl(sH, sS, sL);
color = FromHsl(sH, sS, sL);
}
A = 255;
return this;

color.A = 255;
return color;
}
}
Loading