Files @ 6919080271d5
Branch filter:

Location: ATITD-Tools/Desert-Paint-Codex/Converters/PaintToBrushConverter.cs - annotation

Malkyne
Implemented a system that will allow ingredients to be safely renamed, in the
future, without invalidating profiles. Standardized to PP's "FalconBait."
using System;
using System.Collections.Generic;
using System.Globalization;
using Avalonia.Data.Converters;
using Avalonia.Media;
using DesertPaintCodex.Models;

namespace DesertPaintCodex.Converters
{
    /// <summary>
    /// Converts PaintColor to a SolidColorBrush.
    /// </summary>
    public class PaintToBrushConverter : IValueConverter
    {
        private static readonly SolidColorBrush NoColor = new();
        private static readonly Dictionary<PaintColor, SolidColorBrush> BrushPool = new();

        /// <inheritdoc/>
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value is not PaintColor paintColor) return NoColor;
            
            if (BrushPool.TryGetValue(paintColor, out SolidColorBrush? brush)) return brush;
            
            brush = new SolidColorBrush(new Color(0xFF, paintColor.Red, paintColor.Green, paintColor.Blue));
            BrushPool.Add(paintColor, brush);

            return brush;
        }

        /// <inheritdoc/>
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value is not SolidColorBrush brush) return new PaintColor(0, 0, 0);
            Color color = brush.Color;
            return new PaintColor(color.R, color.G, color.B);
        }
    }
}