Forge
csharpdeeb25a2
1#nullable enable
2using Avalonia;
3using Avalonia.Media;
4using Avalonia.Styling;
5using SkiaSharp;
6
7namespace CascadeIDE.Views.SkiaKit;
8
9internal static class SkiaKitColor
10{
11 public static SKColor Blend(SKColor a, SKColor b, float t)
12 {
13 t = Math.Clamp(t, 0, 1);
14 return new SKColor(
15 (byte)(a.Red + (b.Red - a.Red) * t),
16 (byte)(a.Green + (b.Green - a.Green) * t),
17 (byte)(a.Blue + (b.Blue - a.Blue) * t),
18 (byte)(a.Alpha + (b.Alpha - a.Alpha) * t));
19 }
20
21 public static SKColor Darken(SKColor color, float amount)
22 {
23 amount = Math.Clamp(amount, 0, 1);
24 return new SKColor(
25 (byte)(color.Red * amount),
26 (byte)(color.Green * amount),
27 (byte)(color.Blue * amount),
28 color.Alpha);
29 }
30
31 public static bool TrySkColor(StyledElement element, string key, out SKColor color)
32 {
33 if (element.TryGetResource(key, element.ActualThemeVariant, out var resource) && resource is IBrush brush)
34 {
35 color = BrushToSkColor(brush);
36 return true;
37 }
38
39 color = default;
40 return false;
41 }
42
43 public static SKColor BrushToSkColor(IBrush brush) =>
44 brush is SolidColorBrush solid
45 ? new SKColor(solid.Color.R, solid.Color.G, solid.Color.B, solid.Color.A)
46 : new SKColor(45, 45, 48);
47}
48
View only · write via MCP/CIDE