public object?Convert(object value, Type targetType, object parameter, CultureInfo culture) { // Convert all colour types to Colour32 var colour = Colour32.Black; switch (value) { case Color col: { colour = col.ToColour32(); break; } case Colour32 col32: { colour = col32; break; } case uint u32: { colour = new Colour32(u32); break; } case int i32: { colour = new Colour32((uint)i32); break; } } if (parameter is string op) { var m = Regex.Match(op, @"lerp:\s*([0-9a-fA-F]{8})\s+(\d\.?\d*)"); if (m.Success && Colour32.TryParse(m.Groups[1].Value) is Colour32 target && double_.TryParse(m.Groups[2].Value) is double frac) { colour = Colour32.Lerp(colour, target, frac); } } return(new SolidColorBrush(colour.ToMediaColor())); }
public object?Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (!(value is bool b)) { return(null); } if (!(parameter is string s)) { return(null); } var c = s.Split('|'); if (c.Length != 2 || !Colour32.TryParse(c[0], out var true_colour) || !Colour32.TryParse(c[1], out var false_colour)) { throw new Exception($"{nameof(BoolToBrush)} parameter has the incorrect format. Expected '<true_colour>|<false_colour>'"); } var colour = b ? true_colour : false_colour; return(new SolidColorBrush(colour.ToMediaColor())); }
public object?ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { if (!(value is string str)) { return(null); } if (targetType.Equals(typeof(Color))) { return(Colour32.TryParse(str)?.ToMediaColor()); } if (targetType.Equals(typeof(Colour32))) { return(Colour32.TryParse(str)); } if (targetType.Equals(typeof(uint))) { return(Colour32.TryParse(str)?.ARGB); } if (targetType.Equals(typeof(int))) { return((int?)Colour32.TryParse(str)?.ARGB); } return(null); }