diff --git a/src/IconPacks.Avalonia.BootstrapIcons/Converter/PackIconBootstrapIconsKindToImageConverter.cs b/src/IconPacks.Avalonia.BootstrapIcons/Converter/PackIconBootstrapIconsKindToImageConverter.cs index 4b2ee25..7454de5 100644 --- a/src/IconPacks.Avalonia.BootstrapIcons/Converter/PackIconBootstrapIconsKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.BootstrapIcons/Converter/PackIconBootstrapIconsKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.BootstrapIcons.Converter { public class PackIconBootstrapIconsKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconBootstrapIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.BootstrapIcons/PackIconBootstrapIcons.cs b/src/IconPacks.Avalonia.BootstrapIcons/PackIconBootstrapIcons.cs index 9d9a3f9..40609ba 100644 --- a/src/IconPacks.Avalonia.BootstrapIcons/PackIconBootstrapIcons.cs +++ b/src/IconPacks.Avalonia.BootstrapIcons/PackIconBootstrapIcons.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.BootstrapIcons [MetaData("Bootstrap Icons", "https://icons.getbootstrap.com/", "https://github.com/twbs/icons?tab=MIT-1-ov-file#readme")] public class PackIconBootstrapIcons : PackIconControlBase { - public PackIconBootstrapIcons() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.BootstrapIcons/PackIconBootstrapIconsImageExtension.cs b/src/IconPacks.Avalonia.BootstrapIcons/PackIconBootstrapIconsImageExtension.cs index 1425978..3757eaf 100644 --- a/src/IconPacks.Avalonia.BootstrapIcons/PackIconBootstrapIconsImageExtension.cs +++ b/src/IconPacks.Avalonia.BootstrapIcons/PackIconBootstrapIconsImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconBootstrapIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.BoxIcons/Converter/PackIconBoxIconsKindToImageConverter.cs b/src/IconPacks.Avalonia.BoxIcons/Converter/PackIconBoxIconsKindToImageConverter.cs index 293140d..1ef0d34 100644 --- a/src/IconPacks.Avalonia.BoxIcons/Converter/PackIconBoxIconsKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.BoxIcons/Converter/PackIconBoxIconsKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.BoxIcons.Converter { public class PackIconBoxIconsKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconBoxIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.BoxIcons/PackIconBoxIcons.cs b/src/IconPacks.Avalonia.BoxIcons/PackIconBoxIcons.cs index 62e7ba6..2f3986d 100644 --- a/src/IconPacks.Avalonia.BoxIcons/PackIconBoxIcons.cs +++ b/src/IconPacks.Avalonia.BoxIcons/PackIconBoxIcons.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.BoxIcons [MetaData("Boxicons v3", "https://boxicons.com/", "https://docs.boxicons.com/license/free")] public class PackIconBoxIcons : PackIconControlBase { - public PackIconBoxIcons() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.BoxIcons/PackIconBoxIconsImageExtension.cs b/src/IconPacks.Avalonia.BoxIcons/PackIconBoxIconsImageExtension.cs index 07eca25..1ef1dae 100644 --- a/src/IconPacks.Avalonia.BoxIcons/PackIconBoxIconsImageExtension.cs +++ b/src/IconPacks.Avalonia.BoxIcons/PackIconBoxIconsImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconBoxIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.BoxIcons2/Converter/PackIconBoxIcons2KindToImageConverter.cs b/src/IconPacks.Avalonia.BoxIcons2/Converter/PackIconBoxIcons2KindToImageConverter.cs index 47563e5..a11eb0c 100644 --- a/src/IconPacks.Avalonia.BoxIcons2/Converter/PackIconBoxIcons2KindToImageConverter.cs +++ b/src/IconPacks.Avalonia.BoxIcons2/Converter/PackIconBoxIcons2KindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.BoxIcons2.Converter { public class PackIconBoxIcons2KindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconBoxIcons2Kind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.BoxIcons2/PackIconBoxIcons2.cs b/src/IconPacks.Avalonia.BoxIcons2/PackIconBoxIcons2.cs index 09ed5bf..e0779a4 100644 --- a/src/IconPacks.Avalonia.BoxIcons2/PackIconBoxIcons2.cs +++ b/src/IconPacks.Avalonia.BoxIcons2/PackIconBoxIcons2.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.BoxIcons2 [MetaData("Boxicons v2", "https://v2.boxicons.com/", "https://v2.boxicons.com/usage#license")] public class PackIconBoxIcons2 : PackIconControlBase { - public PackIconBoxIcons2() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.BoxIcons2/PackIconBoxIcons2ImageExtension.cs b/src/IconPacks.Avalonia.BoxIcons2/PackIconBoxIcons2ImageExtension.cs index 2aeb570..5ee6c59 100644 --- a/src/IconPacks.Avalonia.BoxIcons2/PackIconBoxIcons2ImageExtension.cs +++ b/src/IconPacks.Avalonia.BoxIcons2/PackIconBoxIcons2ImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconBoxIcons2Kind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.CircumIcons/Converter/PackIconCircumIconsKindToImageConverter.cs b/src/IconPacks.Avalonia.CircumIcons/Converter/PackIconCircumIconsKindToImageConverter.cs index a4ee260..eed55f9 100644 --- a/src/IconPacks.Avalonia.CircumIcons/Converter/PackIconCircumIconsKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.CircumIcons/Converter/PackIconCircumIconsKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.CircumIcons.Converter { public class PackIconCircumIconsKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconCircumIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.CircumIcons/PackIconCircumIcons.cs b/src/IconPacks.Avalonia.CircumIcons/PackIconCircumIcons.cs index 0209434..0370f92 100644 --- a/src/IconPacks.Avalonia.CircumIcons/PackIconCircumIcons.cs +++ b/src/IconPacks.Avalonia.CircumIcons/PackIconCircumIcons.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.CircumIcons [MetaData("Circum Icons Free", "https://github.com/Klarr-Agency/Circum-Icons", "https://github.com/Klarr-Agency/Circum-Icons?tab=MPL-2.0-1-ov-file")] public class PackIconCircumIcons : PackIconControlBase { - public PackIconCircumIcons() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.CircumIcons/PackIconCircumIconsImageExtension.cs b/src/IconPacks.Avalonia.CircumIcons/PackIconCircumIconsImageExtension.cs index 2d8336d..996e408 100644 --- a/src/IconPacks.Avalonia.CircumIcons/PackIconCircumIconsImageExtension.cs +++ b/src/IconPacks.Avalonia.CircumIcons/PackIconCircumIconsImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconCircumIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.Codicons/Converter/PackIconCodiconsKindToImageConverter.cs b/src/IconPacks.Avalonia.Codicons/Converter/PackIconCodiconsKindToImageConverter.cs index 6400d1c..add3642 100644 --- a/src/IconPacks.Avalonia.Codicons/Converter/PackIconCodiconsKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.Codicons/Converter/PackIconCodiconsKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.Codicons.Converter { public class PackIconCodiconsKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconCodiconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.Codicons/PackIconCodicons.cs b/src/IconPacks.Avalonia.Codicons/PackIconCodicons.cs index 7b51986..d882c32 100644 --- a/src/IconPacks.Avalonia.Codicons/PackIconCodicons.cs +++ b/src/IconPacks.Avalonia.Codicons/PackIconCodicons.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.Codicons [MetaData("Codicons", "https://github.com/microsoft/vscode-codicons", "https://github.com/microsoft/vscode-codicons/blob/main/LICENSE")] public class PackIconCodicons : PackIconControlBase { - public PackIconCodicons() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.Codicons/PackIconCodiconsImageExtension.cs b/src/IconPacks.Avalonia.Codicons/PackIconCodiconsImageExtension.cs index 16c7e70..bf106e1 100644 --- a/src/IconPacks.Avalonia.Codicons/PackIconCodiconsImageExtension.cs +++ b/src/IconPacks.Avalonia.Codicons/PackIconCodiconsImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconCodiconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.Coolicons/Converter/PackIconCooliconsKindToImageConverter.cs b/src/IconPacks.Avalonia.Coolicons/Converter/PackIconCooliconsKindToImageConverter.cs index ce668c0..74dcf0d 100644 --- a/src/IconPacks.Avalonia.Coolicons/Converter/PackIconCooliconsKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.Coolicons/Converter/PackIconCooliconsKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.Coolicons.Converter { public class PackIconCooliconsKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconCooliconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.Coolicons/PackIconCoolicons.cs b/src/IconPacks.Avalonia.Coolicons/PackIconCoolicons.cs index f7c972f..a3157e9 100644 --- a/src/IconPacks.Avalonia.Coolicons/PackIconCoolicons.cs +++ b/src/IconPacks.Avalonia.Coolicons/PackIconCoolicons.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.Coolicons [MetaData("Coolicons", "https://github.com/krystonschwarze/coolicons", "https://github.com/krystonschwarze/coolicons/blob/master/README.md#license")] public class PackIconCoolicons : PackIconControlBase { - public PackIconCoolicons() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.Coolicons/PackIconCooliconsImageExtension.cs b/src/IconPacks.Avalonia.Coolicons/PackIconCooliconsImageExtension.cs index 0d47e34..d5a857c 100644 --- a/src/IconPacks.Avalonia.Coolicons/PackIconCooliconsImageExtension.cs +++ b/src/IconPacks.Avalonia.Coolicons/PackIconCooliconsImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconCooliconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.Core/Converter/PackIconKindToImageConverterBase.cs b/src/IconPacks.Avalonia.Core/Converter/PackIconKindToImageConverterBase.cs index ff75d8c..5c42ba3 100644 --- a/src/IconPacks.Avalonia.Core/Converter/PackIconKindToImageConverterBase.cs +++ b/src/IconPacks.Avalonia.Core/Converter/PackIconKindToImageConverterBase.cs @@ -24,7 +24,12 @@ public abstract class PackIconKindToImageConverterBase : MarkupConverter /// /// Gets the path data for the given kind. /// - protected abstract string GetPathData(object iconKind); + protected string GetPathData(object iconKind) + { + return PackIconDataIndex.TryGetPath((Enum)iconKind, out string data) + ? data + : null; + } /// /// Gets the ScaleTransform for the given kind. @@ -53,7 +58,7 @@ protected Transform GetTransformGroup(object iconKind) } /// - /// Gets the object that will be used for the . + /// Gets the object that will be used for the . /// protected virtual DrawingGroup GetDrawingGroup(object iconKind, IBrush foregroundBrush, string path) { diff --git a/src/IconPacks.Avalonia.Core/IconGeometryCache.cs b/src/IconPacks.Avalonia.Core/IconGeometryCache.cs new file mode 100644 index 0000000..b9529fc --- /dev/null +++ b/src/IconPacks.Avalonia.Core/IconGeometryCache.cs @@ -0,0 +1,114 @@ +#nullable enable +using System; +using System.Collections.Generic; +using Avalonia.Media; + +namespace IconPacks.Avalonia.Core; + +public static class PackIconGeometryCache +{ + private static int _cacheSize = 100; + + /// + /// Gets or sets the maximum number of icons to cache. + /// + public static int CacheSize + { + get => _cacheSize; + set + { + _cacheSize = value; + TrimUnsafe(_cacheSize); + } + } + + private sealed class Entry + { + public Enum Key { get; } + public StreamGeometry Geometry { get; } + + public Entry(Enum key, StreamGeometry geometry) + { + Key = key; + Geometry = geometry; + } + } + + private static readonly object _Gate = new(); + private static readonly Dictionary> _Map = new(); + private static readonly LinkedList _Lru = new(); + + public static StreamGeometry? GetOrAdd(Enum kind) + { + var capacity = CacheSize; + string? path; + + if (capacity <= 0) + return PackIconDataIndex.TryGetPath(kind, out path) ? + CreateGeometry(path) : null; + + // Fast path: try hit + lock (_Gate) + { + if (_Map.TryGetValue(kind, out var node)) + { + _Lru.Remove(node); + _Lru.AddFirst(node); + return node.Value.Geometry; + } + } + + // Parse outside lock (parsing can be expensive) + PackIconDataIndex.TryGetPath(kind, out path); + var created = CreateGeometry(path); + if (created is null) + return null; + + lock (_Gate) + { + // Re-check in case it was added while we parsed + if (_Map.TryGetValue(kind, out var existing)) + { + _Lru.Remove(existing); + _Lru.AddFirst(existing); + return existing.Value.Geometry; + } + + var newNode = new LinkedListNode(new Entry(kind, created)); + _Lru.AddFirst(newNode); + _Map[kind] = newNode; + + TrimUnsafe(capacity); + return created; + } + } + + private static StreamGeometry? CreateGeometry(string? data) + { + return data is null || string.IsNullOrWhiteSpace(data) + ? null + : StreamGeometry.Parse(data); + } + + private static void TrimUnsafe(int capacity) + { + lock (_Gate) + { + while (_Map.Count > capacity && _Lru.Last is not null) + { + var last = _Lru.Last; + _Lru.RemoveLast(); + _Map.Remove(last.Value.Key); + } + } + } + + public static void Clear() + { + lock (_Gate) + { + _Map.Clear(); + _Lru.Clear(); + } + } +} \ No newline at end of file diff --git a/src/IconPacks.Avalonia.Core/IconJsonContext.cs b/src/IconPacks.Avalonia.Core/IconJsonContext.cs new file mode 100644 index 0000000..a8738e6 --- /dev/null +++ b/src/IconPacks.Avalonia.Core/IconJsonContext.cs @@ -0,0 +1,14 @@ +using System.Collections.Generic; +using System.Text.Json.Serialization; + +namespace IconPacks.Avalonia.Core; + +[JsonSourceGenerationOptions( + GenerationMode = JsonSourceGenerationMode.Metadata, // works for trimming; use Serialization for NativeAOT if you want write support too + PropertyNamingPolicy = JsonKnownNamingPolicy.Unspecified, + PropertyNameCaseInsensitive = true +)] +[JsonSerializable(typeof(Dictionary))] +internal partial class IconJsonContext : JsonSerializerContext +{ +} \ No newline at end of file diff --git a/src/IconPacks.Avalonia.Core/IconPacks.Avalonia.Core.csproj b/src/IconPacks.Avalonia.Core/IconPacks.Avalonia.Core.csproj index bcaed3c..496db40 100644 --- a/src/IconPacks.Avalonia.Core/IconPacks.Avalonia.Core.csproj +++ b/src/IconPacks.Avalonia.Core/IconPacks.Avalonia.Core.csproj @@ -3,8 +3,15 @@ IconPacks.Avalonia.Core IconPacks.Avalonia.Core + true + + true + true + true + + diff --git a/src/IconPacks.Avalonia.Core/PackIconControlBase.axaml b/src/IconPacks.Avalonia.Core/PackIconControlBase.axaml index db63065..11f392e 100644 --- a/src/IconPacks.Avalonia.Core/PackIconControlBase.axaml +++ b/src/IconPacks.Avalonia.Core/PackIconControlBase.axaml @@ -15,6 +15,7 @@ @@ -31,27 +32,6 @@ - - - - - - - - - /// Class PackIconControlBase which is the base class for any PackIcon control. /// - [PseudoClasses(IconDataFlippedVerticallyPseudoClass)] - [PseudoClasses(IconFilledPseudoClass)] - [PseudoClasses(IconOutlinedPseudoClass)] public abstract class PackIconControlBase : PackIconBase { - /// - /// A string representing the pseudo-class when the icon data is flipped vertically - /// - /// ":icon-data-flipped-vertically" - public const string IconDataFlippedVerticallyPseudoClass = ":icon-data-flipped-vertically"; - - /// - /// A string representing the pseudo-class when the icon data is drawn filled - /// - /// ":icon-filled" - public const string IconFilledPseudoClass = ":icon-filled"; - - /// - /// A string representing the pseudo-class when the icon data is drawn outlined - /// - /// ":icon-outlined" - public const string IconOutlinedPseudoClass = ":icon-outlined"; - protected PackIconControlBase() { AffectsRender(SpinProperty, SpinDurationProperty, OpacityProperty, SpinEasingFunctionProperty, FlipProperty, RotationAngleProperty); @@ -168,7 +146,7 @@ public static readonly StyledProperty RotationAngleProperty false, BindingMode.OneWay, null, - (packIcon, value) => + (_, value) => { if (value < 0) { @@ -300,12 +278,5 @@ public bool SpinAutoReverse get { return this.GetValue(SpinAutoReverseProperty); } set { this.SetValue(SpinAutoReverseProperty, value); } } - - protected void UpdateIconPseudoClasses(bool filled, bool outlined, bool flipped) - { - PseudoClasses.Set(IconFilledPseudoClass, filled); - PseudoClasses.Set(IconOutlinedPseudoClass, outlined); - PseudoClasses.Set(IconDataFlippedVerticallyPseudoClass, flipped); - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.Core/PackIconDataFactory.cs b/src/IconPacks.Avalonia.Core/PackIconDataFactory.cs index 50778c3..67e0a92 100644 --- a/src/IconPacks.Avalonia.Core/PackIconDataFactory.cs +++ b/src/IconPacks.Avalonia.Core/PackIconDataFactory.cs @@ -1,31 +1,53 @@ using System; using System.Collections.Generic; -using System.Collections.ObjectModel; using System.Text.Json; -using System.Text.Json.Serialization.Metadata; using Avalonia.Platform; namespace IconPacks.Avalonia.Core { - public static class PackIconDataFactory where TEnum : struct, Enum + public static class PackIconDataFactory { - public static Lazy> DataIndex { get; } - - static PackIconDataFactory() + public static IDictionary Create() where TEnum : struct, Enum { - DataIndex = new Lazy>(() => new ReadOnlyDictionary(Create())); - } + using var iconJsonStream = AssetLoader.Open(new Uri($"avares://{typeof(TEnum).Assembly.GetName().Name}/Resources/Icons.json")); + var stringDict = JsonSerializer.Deserialize( + iconJsonStream, IconJsonContext.Default.DictionaryStringString) + ?? new Dictionary(); + + var result = new Dictionary(stringDict.Count); + foreach (var kvp in stringDict) + { + if (Enum.TryParse(kvp.Key, out var enumKey)) + { + result[enumKey] = kvp.Value; + } + } - public static IDictionary Create() + return result; + } + + public static IDictionary Create(Type enumType) { - using var iconJsonStream = AssetLoader.Open(new Uri($"avares://{typeof(TEnum).Assembly.GetName().Name}/Resources/Icons.json")); -#pragma warning disable IL2026 - var options = new JsonSerializerOptions + using var iconJsonStream = AssetLoader.Open(new Uri($"avares://{enumType.Assembly.GetName().Name}/Resources/Icons.json")); + var stringDict = JsonSerializer.Deserialize>( + iconJsonStream, IconJsonContext.Default.DictionaryStringString) + ?? new Dictionary(); + + var result = new Dictionary(stringDict.Count); + foreach (var kvp in stringDict) { - TypeInfoResolver = new DefaultJsonTypeInfoResolver() - }; - return System.Text.Json.JsonSerializer.Deserialize>(iconJsonStream, options) ?? []; -#pragma warning restore IL2026 + try + { + var enumKey = Enum.Parse(enumType, kvp.Key); + result[(Enum)enumKey] = kvp.Value; + } + catch + { + // ignored + } + } + + return result; } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.Core/PackIconDataIndex.cs b/src/IconPacks.Avalonia.Core/PackIconDataIndex.cs new file mode 100644 index 0000000..68addf3 --- /dev/null +++ b/src/IconPacks.Avalonia.Core/PackIconDataIndex.cs @@ -0,0 +1,49 @@ +#nullable enable + +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; + +namespace IconPacks.Avalonia.Core; + +public static class PackIconDataIndex +{ + private static readonly object Gate = new(); + private static readonly Dictionary> Packs = new(); + + public static ReadOnlyDictionary Register(Type enumType, IDictionary? icons = null) + { + lock (Gate) + { + if (!Packs.TryGetValue(enumType, out ReadOnlyDictionary? value)) + { + // Convert IDictionary to IDictionary + var src = icons ?? PackIconDataFactory.Create(enumType); + var dst = new Dictionary(src.Count); + foreach (var kv in src) + { + dst[kv.Key] = kv.Value; // box TKind to Enum + } + + value = new ReadOnlyDictionary(dst); + Packs[enumType] = value; + } + return value; + } + } + + public static bool TryGetPath(Enum kind, out string? path) + { + var type = kind.GetType(); + ReadOnlyDictionary? packDictionary; + lock (Gate) + { + if (!Packs.TryGetValue(type, out packDictionary)) + { + packDictionary = Register(kind.GetType()); + } + } + + return packDictionary.TryGetValue(kind, out path); + } +} \ No newline at end of file diff --git a/src/IconPacks.Avalonia.Core/PackIconImageExtension.cs b/src/IconPacks.Avalonia.Core/PackIconImageExtension.cs index e0c52ed..eda8ece 100644 --- a/src/IconPacks.Avalonia.Core/PackIconImageExtension.cs +++ b/src/IconPacks.Avalonia.Core/PackIconImageExtension.cs @@ -1,4 +1,5 @@ -using Avalonia.Markup.Xaml; +using System; +using Avalonia.Markup.Xaml; using Avalonia.Media; namespace IconPacks.Avalonia.Core @@ -20,11 +21,6 @@ public abstract class BasePackIconImageExtension : MarkupExtension /// public double RotationAngle { get; set; } = 0d; - /// - /// Gets the path data for the given kind. - /// - protected abstract string GetPathData(object iconKind); - /// /// Gets the ScaleTransform for the given kind. /// @@ -54,11 +50,11 @@ protected Transform GetTransformGroup(object iconKind) /// /// Gets the object that will be used for the . /// - protected virtual DrawingGroup GetDrawingGroup(object iconKind, IBrush foregroundBrush, string path) + protected virtual DrawingGroup GetDrawingGroup(object iconKind, IBrush foregroundBrush, StreamGeometry path) { var geometryDrawing = new GeometryDrawing { - Geometry = StreamGeometry.Parse(path), + Geometry = path, Brush = foregroundBrush }; @@ -76,9 +72,9 @@ protected virtual DrawingGroup GetDrawingGroup(object iconKind, IBrush foregroun /// protected IImage CreateImageSource(object iconKind, IBrush foregroundBrush) { - var path = this.GetPathData(iconKind); + var path = PackIconGeometryCache.GetOrAdd((Enum)iconKind); - if (string.IsNullOrEmpty(path)) + if (path is null) { return null; } diff --git a/src/IconPacks.Avalonia.Entypo/Converter/PackIconEntypoKindToImageConverter.cs b/src/IconPacks.Avalonia.Entypo/Converter/PackIconEntypoKindToImageConverter.cs index a7ff2db..745f234 100644 --- a/src/IconPacks.Avalonia.Entypo/Converter/PackIconEntypoKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.Entypo/Converter/PackIconEntypoKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.Entypo.Converter { public class PackIconEntypoKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconEntypoKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.Entypo/PackIconEntypo.cs b/src/IconPacks.Avalonia.Entypo/PackIconEntypo.cs index c46caa7..820af6f 100644 --- a/src/IconPacks.Avalonia.Entypo/PackIconEntypo.cs +++ b/src/IconPacks.Avalonia.Entypo/PackIconEntypo.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.Entypo [MetaData("Entypo+", "http://www.entypo.com/", "https://creativecommons.org/licenses/by-sa/4.0/")] public class PackIconEntypo : PackIconControlBase { - public PackIconEntypo() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.Entypo/PackIconEntypoImageExtension.cs b/src/IconPacks.Avalonia.Entypo/PackIconEntypoImageExtension.cs index 8359e8d..aabaf25 100644 --- a/src/IconPacks.Avalonia.Entypo/PackIconEntypoImageExtension.cs +++ b/src/IconPacks.Avalonia.Entypo/PackIconEntypoImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconEntypoKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.EvaIcons/Converter/PackIconEvaIconsKindToImageConverter.cs b/src/IconPacks.Avalonia.EvaIcons/Converter/PackIconEvaIconsKindToImageConverter.cs index c38defc..f4fccba 100644 --- a/src/IconPacks.Avalonia.EvaIcons/Converter/PackIconEvaIconsKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.EvaIcons/Converter/PackIconEvaIconsKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.EvaIcons.Converter { public class PackIconEvaIconsKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconEvaIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.EvaIcons/PackIconEvaIcons.cs b/src/IconPacks.Avalonia.EvaIcons/PackIconEvaIcons.cs index c1d7dab..3e507b3 100644 --- a/src/IconPacks.Avalonia.EvaIcons/PackIconEvaIcons.cs +++ b/src/IconPacks.Avalonia.EvaIcons/PackIconEvaIcons.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.EvaIcons [MetaData("Eva Icons", "https://akveo.github.io/eva-icons/", "https://github.com/akveo/eva-icons/blob/master/LICENSE.txt")] public class PackIconEvaIcons : PackIconControlBase { - public PackIconEvaIcons() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.EvaIcons/PackIconEvaIconsImageExtension.cs b/src/IconPacks.Avalonia.EvaIcons/PackIconEvaIconsImageExtension.cs index 0280785..2919cd2 100644 --- a/src/IconPacks.Avalonia.EvaIcons/PackIconEvaIconsImageExtension.cs +++ b/src/IconPacks.Avalonia.EvaIcons/PackIconEvaIconsImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconEvaIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.FeatherIcons/Converter/PackIconFeatherIconsKindToImageConverter.cs b/src/IconPacks.Avalonia.FeatherIcons/Converter/PackIconFeatherIconsKindToImageConverter.cs index d39d3c9..84e9740 100644 --- a/src/IconPacks.Avalonia.FeatherIcons/Converter/PackIconFeatherIconsKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.FeatherIcons/Converter/PackIconFeatherIconsKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.FeatherIcons.Converter { public class PackIconFeatherIconsKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconFeatherIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.FeatherIcons/PackIconFeatherIcons.cs b/src/IconPacks.Avalonia.FeatherIcons/PackIconFeatherIcons.cs index 45e2d80..9a2e233 100644 --- a/src/IconPacks.Avalonia.FeatherIcons/PackIconFeatherIcons.cs +++ b/src/IconPacks.Avalonia.FeatherIcons/PackIconFeatherIcons.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.FeatherIcons [MetaData("Feather Icons", "https://feathericons.com/", "https://github.com/feathericons/feather?tab=MIT-1-ov-file#readme")] public class PackIconFeatherIcons : PackIconControlBase { - public PackIconFeatherIcons() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.FeatherIcons/PackIconFeatherIconsImageExtension.cs b/src/IconPacks.Avalonia.FeatherIcons/PackIconFeatherIconsImageExtension.cs index bfdbfbd..793de7c 100644 --- a/src/IconPacks.Avalonia.FeatherIcons/PackIconFeatherIconsImageExtension.cs +++ b/src/IconPacks.Avalonia.FeatherIcons/PackIconFeatherIconsImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconFeatherIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.FileIcons/Converter/PackIconFileIconsKindToImageConverter.cs b/src/IconPacks.Avalonia.FileIcons/Converter/PackIconFileIconsKindToImageConverter.cs index 5d814d4..961aca3 100644 --- a/src/IconPacks.Avalonia.FileIcons/Converter/PackIconFileIconsKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.FileIcons/Converter/PackIconFileIconsKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.FileIcons.Converter { public class PackIconFileIconsKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconFileIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.FileIcons/PackIconFileIcons.cs b/src/IconPacks.Avalonia.FileIcons/PackIconFileIcons.cs index 5a0d4cd..54cb6c2 100644 --- a/src/IconPacks.Avalonia.FileIcons/PackIconFileIcons.cs +++ b/src/IconPacks.Avalonia.FileIcons/PackIconFileIcons.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.FileIcons [MetaData("File Icons", "https://github.com/file-icons/icons", "https://github.com/file-icons/atom/blob/master/LICENSE.md")] public class PackIconFileIcons : PackIconControlBase { - public PackIconFileIcons() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.FileIcons/PackIconFileIconsImageExtension.cs b/src/IconPacks.Avalonia.FileIcons/PackIconFileIconsImageExtension.cs index cadc066..443bf3c 100644 --- a/src/IconPacks.Avalonia.FileIcons/PackIconFileIconsImageExtension.cs +++ b/src/IconPacks.Avalonia.FileIcons/PackIconFileIconsImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconFileIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.FontAwesome/Converter/PackIconFontAwesomeKindToImageConverter.cs b/src/IconPacks.Avalonia.FontAwesome/Converter/PackIconFontAwesomeKindToImageConverter.cs index a36036f..33722bd 100644 --- a/src/IconPacks.Avalonia.FontAwesome/Converter/PackIconFontAwesomeKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.FontAwesome/Converter/PackIconFontAwesomeKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.FontAwesome.Converter { public class PackIconFontAwesomeKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconFontAwesomeKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.FontAwesome/PackIconFontAwesome.cs b/src/IconPacks.Avalonia.FontAwesome/PackIconFontAwesome.cs index 8972dc5..c915c2e 100644 --- a/src/IconPacks.Avalonia.FontAwesome/PackIconFontAwesome.cs +++ b/src/IconPacks.Avalonia.FontAwesome/PackIconFontAwesome.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.FontAwesome [MetaData("Font Awesome Free v7", "https://fontawesome.com/", "https://fontawesome.com/license/free")] public class PackIconFontAwesome : PackIconControlBase { - public PackIconFontAwesome() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.FontAwesome/PackIconFontAwesomeImageExtension.cs b/src/IconPacks.Avalonia.FontAwesome/PackIconFontAwesomeImageExtension.cs index 03eb75e..409e8af 100644 --- a/src/IconPacks.Avalonia.FontAwesome/PackIconFontAwesomeImageExtension.cs +++ b/src/IconPacks.Avalonia.FontAwesome/PackIconFontAwesomeImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconFontAwesomeKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.FontAwesome5/Converter/PackIconFontAwesome5KindToImageConverter.cs b/src/IconPacks.Avalonia.FontAwesome5/Converter/PackIconFontAwesome5KindToImageConverter.cs index e40b3c1..fcdeb93 100644 --- a/src/IconPacks.Avalonia.FontAwesome5/Converter/PackIconFontAwesome5KindToImageConverter.cs +++ b/src/IconPacks.Avalonia.FontAwesome5/Converter/PackIconFontAwesome5KindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.FontAwesome5.Converter { public class PackIconFontAwesome5KindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconFontAwesome5Kind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.FontAwesome5/PackIconFontAwesome5.cs b/src/IconPacks.Avalonia.FontAwesome5/PackIconFontAwesome5.cs index c95577a..c99463e 100644 --- a/src/IconPacks.Avalonia.FontAwesome5/PackIconFontAwesome5.cs +++ b/src/IconPacks.Avalonia.FontAwesome5/PackIconFontAwesome5.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.FontAwesome5 [MetaData("Font Awesome Free v5", "https://fontawesome.com/", "https://fontawesome.com/license/free")] public class PackIconFontAwesome5 : PackIconControlBase { - public PackIconFontAwesome5() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.FontAwesome5/PackIconFontAwesome5ImageExtension.cs b/src/IconPacks.Avalonia.FontAwesome5/PackIconFontAwesome5ImageExtension.cs index 9e5d8da..a4f8bd6 100644 --- a/src/IconPacks.Avalonia.FontAwesome5/PackIconFontAwesome5ImageExtension.cs +++ b/src/IconPacks.Avalonia.FontAwesome5/PackIconFontAwesome5ImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconFontAwesome5Kind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.FontAwesome6/Converter/PackIconFontAwesome6KindToImageConverter.cs b/src/IconPacks.Avalonia.FontAwesome6/Converter/PackIconFontAwesome6KindToImageConverter.cs index 0173d2d..aa4cedc 100644 --- a/src/IconPacks.Avalonia.FontAwesome6/Converter/PackIconFontAwesome6KindToImageConverter.cs +++ b/src/IconPacks.Avalonia.FontAwesome6/Converter/PackIconFontAwesome6KindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.FontAwesome6.Converter { public class PackIconFontAwesome6KindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconFontAwesome6Kind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.FontAwesome6/PackIconFontAwesome6.cs b/src/IconPacks.Avalonia.FontAwesome6/PackIconFontAwesome6.cs index f5bb424..87401bb 100644 --- a/src/IconPacks.Avalonia.FontAwesome6/PackIconFontAwesome6.cs +++ b/src/IconPacks.Avalonia.FontAwesome6/PackIconFontAwesome6.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.FontAwesome6 [MetaData("Font Awesome Free v6", "https://fontawesome.com/", "https://fontawesome.com/license/free")] public class PackIconFontAwesome6 : PackIconControlBase { - public PackIconFontAwesome6() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.FontAwesome6/PackIconFontAwesome6ImageExtension.cs b/src/IconPacks.Avalonia.FontAwesome6/PackIconFontAwesome6ImageExtension.cs index 95b8a71..0349aef 100644 --- a/src/IconPacks.Avalonia.FontAwesome6/PackIconFontAwesome6ImageExtension.cs +++ b/src/IconPacks.Avalonia.FontAwesome6/PackIconFontAwesome6ImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconFontAwesome6Kind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.Fontaudio/Converter/PackIconFontaudioKindToImageConverter.cs b/src/IconPacks.Avalonia.Fontaudio/Converter/PackIconFontaudioKindToImageConverter.cs index 063162e..fb97a5d 100644 --- a/src/IconPacks.Avalonia.Fontaudio/Converter/PackIconFontaudioKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.Fontaudio/Converter/PackIconFontaudioKindToImageConverter.cs @@ -1,21 +1,9 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.Fontaudio.Converter { public class PackIconFontaudioKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconFontaudioKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.Fontaudio/PackIconFontaudio.cs b/src/IconPacks.Avalonia.Fontaudio/PackIconFontaudio.cs index 697bbd1..668f1c9 100644 --- a/src/IconPacks.Avalonia.Fontaudio/PackIconFontaudio.cs +++ b/src/IconPacks.Avalonia.Fontaudio/PackIconFontaudio.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.Fontaudio [MetaData("Fontaudio", "https://github.com/fefanto/fontaudio", "https://github.com/fefanto/fontaudio#license")] public class PackIconFontaudio : PackIconControlBase { - public PackIconFontaudio() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.Fontaudio/PackIconFontaudioImageExtension.cs b/src/IconPacks.Avalonia.Fontaudio/PackIconFontaudioImageExtension.cs index 2c135c8..a23ca5c 100644 --- a/src/IconPacks.Avalonia.Fontaudio/PackIconFontaudioImageExtension.cs +++ b/src/IconPacks.Avalonia.Fontaudio/PackIconFontaudioImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconFontaudioKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.Fontisto/Converter/PackIconFontistoKindToImageConverter.cs b/src/IconPacks.Avalonia.Fontisto/Converter/PackIconFontistoKindToImageConverter.cs index c4401c3..ba51465 100644 --- a/src/IconPacks.Avalonia.Fontisto/Converter/PackIconFontistoKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.Fontisto/Converter/PackIconFontistoKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.Fontisto.Converter { public class PackIconFontistoKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconFontistoKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.Fontisto/PackIconFontisto.cs b/src/IconPacks.Avalonia.Fontisto/PackIconFontisto.cs index 98da774..7e034e3 100644 --- a/src/IconPacks.Avalonia.Fontisto/PackIconFontisto.cs +++ b/src/IconPacks.Avalonia.Fontisto/PackIconFontisto.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.Fontisto [MetaData("Fontisto", "https://github.com/kenangundogan/fontisto", "https://github.com/kenangundogan/fontisto?tab=readme-ov-file#license")] public class PackIconFontisto : PackIconControlBase { - public PackIconFontisto() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.Fontisto/PackIconFontistoImageExtension.cs b/src/IconPacks.Avalonia.Fontisto/PackIconFontistoImageExtension.cs index 185022c..482685b 100644 --- a/src/IconPacks.Avalonia.Fontisto/PackIconFontistoImageExtension.cs +++ b/src/IconPacks.Avalonia.Fontisto/PackIconFontistoImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconFontistoKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.ForkAwesome/Converter/PackIconForkAwesomeKindToImageConverter.cs b/src/IconPacks.Avalonia.ForkAwesome/Converter/PackIconForkAwesomeKindToImageConverter.cs index 70ec763..06a6417 100644 --- a/src/IconPacks.Avalonia.ForkAwesome/Converter/PackIconForkAwesomeKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.ForkAwesome/Converter/PackIconForkAwesomeKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.ForkAwesome.Converter { public class PackIconForkAwesomeKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconForkAwesomeKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.ForkAwesome/PackIconForkAwesome.cs b/src/IconPacks.Avalonia.ForkAwesome/PackIconForkAwesome.cs index 7bc34a9..5186a62 100644 --- a/src/IconPacks.Avalonia.ForkAwesome/PackIconForkAwesome.cs +++ b/src/IconPacks.Avalonia.ForkAwesome/PackIconForkAwesome.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.ForkAwesome [MetaData("Fork Awesome", "https://forkaweso.me/", "https://github.com/ForkAwesome/Fork-Awesome/blob/master/LICENSES")] public class PackIconForkAwesome : PackIconControlBase { - public PackIconForkAwesome() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.ForkAwesome/PackIconForkAwesomeImageExtension.cs b/src/IconPacks.Avalonia.ForkAwesome/PackIconForkAwesomeImageExtension.cs index 2b6f889..f6294b2 100644 --- a/src/IconPacks.Avalonia.ForkAwesome/PackIconForkAwesomeImageExtension.cs +++ b/src/IconPacks.Avalonia.ForkAwesome/PackIconForkAwesomeImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconForkAwesomeKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.GameIcons/Converter/PackIconGameIconsKindToImageConverter.cs b/src/IconPacks.Avalonia.GameIcons/Converter/PackIconGameIconsKindToImageConverter.cs index a3eaf44..0d2a317 100644 --- a/src/IconPacks.Avalonia.GameIcons/Converter/PackIconGameIconsKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.GameIcons/Converter/PackIconGameIconsKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.GameIcons.Converter { public class PackIconGameIconsKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconGameIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.GameIcons/PackIconGameIcons.cs b/src/IconPacks.Avalonia.GameIcons/PackIconGameIcons.cs index a425022..170cf0b 100644 --- a/src/IconPacks.Avalonia.GameIcons/PackIconGameIcons.cs +++ b/src/IconPacks.Avalonia.GameIcons/PackIconGameIcons.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.GameIcons [MetaData("Game Icons", "https://github.com/game-icons/icons", "https://github.com/game-icons/icons?tab=License-1-ov-file")] public class PackIconGameIcons : PackIconControlBase { - public PackIconGameIcons() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.GameIcons/PackIconGameIconsImageExtension.cs b/src/IconPacks.Avalonia.GameIcons/PackIconGameIconsImageExtension.cs index d688a3c..9c2b3dd 100644 --- a/src/IconPacks.Avalonia.GameIcons/PackIconGameIconsImageExtension.cs +++ b/src/IconPacks.Avalonia.GameIcons/PackIconGameIconsImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconGameIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.Ionicons/Converter/PackIconIoniconsKindToImageConverter.cs b/src/IconPacks.Avalonia.Ionicons/Converter/PackIconIoniconsKindToImageConverter.cs index 1df0a9f..16063ac 100644 --- a/src/IconPacks.Avalonia.Ionicons/Converter/PackIconIoniconsKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.Ionicons/Converter/PackIconIoniconsKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.Ionicons.Converter { public class PackIconIoniconsKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconIoniconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.Ionicons/PackIconIonicons.cs b/src/IconPacks.Avalonia.Ionicons/PackIconIonicons.cs index 9363139..fe5406b 100644 --- a/src/IconPacks.Avalonia.Ionicons/PackIconIonicons.cs +++ b/src/IconPacks.Avalonia.Ionicons/PackIconIonicons.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.Ionicons [MetaData("Ionicons", "https://ionicons.com/", "https://github.com/ionic-team/ionicons/blob/master/LICENSE")] public class PackIconIonicons : PackIconControlBase { - public PackIconIonicons() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.Ionicons/PackIconIoniconsImageExtension.cs b/src/IconPacks.Avalonia.Ionicons/PackIconIoniconsImageExtension.cs index c211f86..09fcca4 100644 --- a/src/IconPacks.Avalonia.Ionicons/PackIconIoniconsImageExtension.cs +++ b/src/IconPacks.Avalonia.Ionicons/PackIconIoniconsImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconIoniconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.JamIcons/Converter/PackIconJamIconsKindToImageConverter.cs b/src/IconPacks.Avalonia.JamIcons/Converter/PackIconJamIconsKindToImageConverter.cs index 5ab883a..9810142 100644 --- a/src/IconPacks.Avalonia.JamIcons/Converter/PackIconJamIconsKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.JamIcons/Converter/PackIconJamIconsKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.JamIcons.Converter { public class PackIconJamIconsKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconJamIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.JamIcons/PackIconJamIcons.cs b/src/IconPacks.Avalonia.JamIcons/PackIconJamIcons.cs index 0ca3cda..b9bd155 100644 --- a/src/IconPacks.Avalonia.JamIcons/PackIconJamIcons.cs +++ b/src/IconPacks.Avalonia.JamIcons/PackIconJamIcons.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.JamIcons [MetaData("Jam Icons", "https://jam-icons.com/", "https://github.com/michaelampr/jam/blob/master/LICENSE")] public class PackIconJamIcons : PackIconControlBase { - public PackIconJamIcons() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.JamIcons/PackIconJamIconsImageExtension.cs b/src/IconPacks.Avalonia.JamIcons/PackIconJamIconsImageExtension.cs index 8452fed..5339d82 100644 --- a/src/IconPacks.Avalonia.JamIcons/PackIconJamIconsImageExtension.cs +++ b/src/IconPacks.Avalonia.JamIcons/PackIconJamIconsImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconJamIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.KeyruneIcons/Converter/PackIconKeyruneIconsKindToImageConverter.cs b/src/IconPacks.Avalonia.KeyruneIcons/Converter/PackIconKeyruneIconsKindToImageConverter.cs index 1ea141f..8b668d1 100644 --- a/src/IconPacks.Avalonia.KeyruneIcons/Converter/PackIconKeyruneIconsKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.KeyruneIcons/Converter/PackIconKeyruneIconsKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.KeyruneIcons.Converter { public class PackIconKeyruneIconsKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconKeyruneIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.KeyruneIcons/PackIconKeyruneIcons.cs b/src/IconPacks.Avalonia.KeyruneIcons/PackIconKeyruneIcons.cs index d4807b5..a4661a1 100644 --- a/src/IconPacks.Avalonia.KeyruneIcons/PackIconKeyruneIcons.cs +++ b/src/IconPacks.Avalonia.KeyruneIcons/PackIconKeyruneIcons.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.KeyruneIcons [MetaData("Keyrune Icons", "https://github.com/andrewgioia/keyrune", "https://github.com/andrewgioia/keyrune?tab=License-1-ov-file")] public class PackIconKeyruneIcons : PackIconControlBase { - public PackIconKeyruneIcons() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.KeyruneIcons/PackIconKeyruneIconsImageExtension.cs b/src/IconPacks.Avalonia.KeyruneIcons/PackIconKeyruneIconsImageExtension.cs index 05fa55c..6b937bd 100644 --- a/src/IconPacks.Avalonia.KeyruneIcons/PackIconKeyruneIconsImageExtension.cs +++ b/src/IconPacks.Avalonia.KeyruneIcons/PackIconKeyruneIconsImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconKeyruneIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.Lucide/Converter/PackIconLucideKindToImageConverter.cs b/src/IconPacks.Avalonia.Lucide/Converter/PackIconLucideKindToImageConverter.cs index 907ace6..4694390 100644 --- a/src/IconPacks.Avalonia.Lucide/Converter/PackIconLucideKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.Lucide/Converter/PackIconLucideKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.Lucide.Converter { public class PackIconLucideKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconLucideKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.Lucide/PackIconLucide.cs b/src/IconPacks.Avalonia.Lucide/PackIconLucide.cs index 8d1e68b..749e383 100644 --- a/src/IconPacks.Avalonia.Lucide/PackIconLucide.cs +++ b/src/IconPacks.Avalonia.Lucide/PackIconLucide.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.Lucide [MetaData("Lucide Icons", "https://github.com/lucide-icons/lucide", "https://github.com/lucide-icons/lucide?tab=ISC-1-ov-file#readme")] public class PackIconLucide : PackIconControlBase { - public PackIconLucide() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.Lucide/PackIconLucideImageExtension.cs b/src/IconPacks.Avalonia.Lucide/PackIconLucideImageExtension.cs index 6f927ef..f6427a4 100644 --- a/src/IconPacks.Avalonia.Lucide/PackIconLucideImageExtension.cs +++ b/src/IconPacks.Avalonia.Lucide/PackIconLucideImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconLucideKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.Material/Converter/PackIconMaterialKindToImageConverter.cs b/src/IconPacks.Avalonia.Material/Converter/PackIconMaterialKindToImageConverter.cs index c412c61..3d782a7 100644 --- a/src/IconPacks.Avalonia.Material/Converter/PackIconMaterialKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.Material/Converter/PackIconMaterialKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.Material.Converter { public class PackIconMaterialKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconMaterialKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.Material/PackIconMaterial.cs b/src/IconPacks.Avalonia.Material/PackIconMaterial.cs index 8c358f2..5fca1ed 100644 --- a/src/IconPacks.Avalonia.Material/PackIconMaterial.cs +++ b/src/IconPacks.Avalonia.Material/PackIconMaterial.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.Material [MetaData("Material Design Icons", "https://pictogrammers.com/library/mdi/", "https://github.com/Templarian/MaterialDesign?tab=License-1-ov-file#readme")] public class PackIconMaterial : PackIconControlBase { - public PackIconMaterial() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.Material/PackIconMaterialImageExtension.cs b/src/IconPacks.Avalonia.Material/PackIconMaterialImageExtension.cs index 7efc64c..b7a50f2 100644 --- a/src/IconPacks.Avalonia.Material/PackIconMaterialImageExtension.cs +++ b/src/IconPacks.Avalonia.Material/PackIconMaterialImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconMaterialKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.MaterialDesign/Converter/PackIconMaterialDesignKindToImageConverter.cs b/src/IconPacks.Avalonia.MaterialDesign/Converter/PackIconMaterialDesignKindToImageConverter.cs index ab00b08..111e5e2 100644 --- a/src/IconPacks.Avalonia.MaterialDesign/Converter/PackIconMaterialDesignKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.MaterialDesign/Converter/PackIconMaterialDesignKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.MaterialDesign.Converter { public class PackIconMaterialDesignKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconMaterialDesignKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.MaterialDesign/PackIconMaterialDesign.cs b/src/IconPacks.Avalonia.MaterialDesign/PackIconMaterialDesign.cs index 74646e4..d41a17a 100644 --- a/src/IconPacks.Avalonia.MaterialDesign/PackIconMaterialDesign.cs +++ b/src/IconPacks.Avalonia.MaterialDesign/PackIconMaterialDesign.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.MaterialDesign [MetaData("Material Icons (Google)", "https://github.com/marella/material-icons", "https://github.com/marella/material-icons?tab=Apache-2.0-1-ov-file")] public class PackIconMaterialDesign : PackIconControlBase { - public PackIconMaterialDesign() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.MaterialDesign/PackIconMaterialDesignImageExtension.cs b/src/IconPacks.Avalonia.MaterialDesign/PackIconMaterialDesignImageExtension.cs index 7c9fba0..7007953 100644 --- a/src/IconPacks.Avalonia.MaterialDesign/PackIconMaterialDesignImageExtension.cs +++ b/src/IconPacks.Avalonia.MaterialDesign/PackIconMaterialDesignImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconMaterialDesignKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.MaterialLight/Converter/PackIconMaterialLightKindToImageConverter.cs b/src/IconPacks.Avalonia.MaterialLight/Converter/PackIconMaterialLightKindToImageConverter.cs index 3b65c98..bc9b901 100644 --- a/src/IconPacks.Avalonia.MaterialLight/Converter/PackIconMaterialLightKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.MaterialLight/Converter/PackIconMaterialLightKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.MaterialLight.Converter { public class PackIconMaterialLightKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconMaterialLightKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.MaterialLight/PackIconMaterialLight.cs b/src/IconPacks.Avalonia.MaterialLight/PackIconMaterialLight.cs index 4183916..7c71b45 100644 --- a/src/IconPacks.Avalonia.MaterialLight/PackIconMaterialLight.cs +++ b/src/IconPacks.Avalonia.MaterialLight/PackIconMaterialLight.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.MaterialLight [MetaData("Material Design Icons Light", "https://github.com/Templarian/MaterialDesignLight", "https://github.com/Templarian/MaterialDesignLight/blob/master/LICENSE.md")] public class PackIconMaterialLight : PackIconControlBase { - public PackIconMaterialLight() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.MaterialLight/PackIconMaterialLightImageExtension.cs b/src/IconPacks.Avalonia.MaterialLight/PackIconMaterialLightImageExtension.cs index 0bebda8..c5d133b 100644 --- a/src/IconPacks.Avalonia.MaterialLight/PackIconMaterialLightImageExtension.cs +++ b/src/IconPacks.Avalonia.MaterialLight/PackIconMaterialLightImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconMaterialLightKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.MemoryIcons/Converter/PackIconMemoryIconsKindToImageConverter.cs b/src/IconPacks.Avalonia.MemoryIcons/Converter/PackIconMemoryIconsKindToImageConverter.cs index 9734555..380fbfe 100644 --- a/src/IconPacks.Avalonia.MemoryIcons/Converter/PackIconMemoryIconsKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.MemoryIcons/Converter/PackIconMemoryIconsKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.MemoryIcons.Converter { public class PackIconMemoryIconsKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconMemoryIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.MemoryIcons/PackIconMemoryIcons.cs b/src/IconPacks.Avalonia.MemoryIcons/PackIconMemoryIcons.cs index 4d40f9e..36c690c 100644 --- a/src/IconPacks.Avalonia.MemoryIcons/PackIconMemoryIcons.cs +++ b/src/IconPacks.Avalonia.MemoryIcons/PackIconMemoryIcons.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.MemoryIcons [MetaData("Memory Icons", "https://pictogrammers.com/library/memory/", "https://github.com/Pictogrammers/Memory?tab=License-1-ov-file#readme")] public class PackIconMemoryIcons : PackIconControlBase { - public PackIconMemoryIcons() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.MemoryIcons/PackIconMemoryIconsImageExtension.cs b/src/IconPacks.Avalonia.MemoryIcons/PackIconMemoryIconsImageExtension.cs index 426c8e6..1a90cf2 100644 --- a/src/IconPacks.Avalonia.MemoryIcons/PackIconMemoryIconsImageExtension.cs +++ b/src/IconPacks.Avalonia.MemoryIcons/PackIconMemoryIconsImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconMemoryIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.Microns/Converter/PackIconMicronsKindToImageConverter.cs b/src/IconPacks.Avalonia.Microns/Converter/PackIconMicronsKindToImageConverter.cs index 121d742..f42a610 100644 --- a/src/IconPacks.Avalonia.Microns/Converter/PackIconMicronsKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.Microns/Converter/PackIconMicronsKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.Microns.Converter { public class PackIconMicronsKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconMicronsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.Microns/PackIconMicrons.cs b/src/IconPacks.Avalonia.Microns/PackIconMicrons.cs index e8afe27..1a5b08e 100644 --- a/src/IconPacks.Avalonia.Microns/PackIconMicrons.cs +++ b/src/IconPacks.Avalonia.Microns/PackIconMicrons.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.Microns [MetaData("Microns", "https://github.com/stephenhutchings/microns", "https://github.com/stephenhutchings/microns?tab=License-1-ov-file#readme")] public class PackIconMicrons : PackIconControlBase { - public PackIconMicrons() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.Microns/PackIconMicronsImageExtension.cs b/src/IconPacks.Avalonia.Microns/PackIconMicronsImageExtension.cs index ade945d..d049f53 100644 --- a/src/IconPacks.Avalonia.Microns/PackIconMicronsImageExtension.cs +++ b/src/IconPacks.Avalonia.Microns/PackIconMicronsImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconMicronsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.MingCuteIcons/Converter/PackIconMingCuteIconsKindToImageConverter.cs b/src/IconPacks.Avalonia.MingCuteIcons/Converter/PackIconMingCuteIconsKindToImageConverter.cs index b6199f3..e1b50a4 100644 --- a/src/IconPacks.Avalonia.MingCuteIcons/Converter/PackIconMingCuteIconsKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.MingCuteIcons/Converter/PackIconMingCuteIconsKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.MingCuteIcons.Converter { public class PackIconMingCuteIconsKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconMingCuteIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.MingCuteIcons/PackIconMingCuteIcons.cs b/src/IconPacks.Avalonia.MingCuteIcons/PackIconMingCuteIcons.cs index 0af2ddb..11d3e69 100644 --- a/src/IconPacks.Avalonia.MingCuteIcons/PackIconMingCuteIcons.cs +++ b/src/IconPacks.Avalonia.MingCuteIcons/PackIconMingCuteIcons.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.MingCuteIcons [MetaData("MingCute Icon", "https://github.com/Richard9394/MingCute", "https://github.com/Richard9394/MingCute?tab=Apache-2.0-1-ov-file")] public class PackIconMingCuteIcons : PackIconControlBase { - public PackIconMingCuteIcons() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.MingCuteIcons/PackIconMingCuteIconsImageExtension.cs b/src/IconPacks.Avalonia.MingCuteIcons/PackIconMingCuteIconsImageExtension.cs index 2b0d4a8..9011e56 100644 --- a/src/IconPacks.Avalonia.MingCuteIcons/PackIconMingCuteIconsImageExtension.cs +++ b/src/IconPacks.Avalonia.MingCuteIcons/PackIconMingCuteIconsImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconMingCuteIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.Modern/Converter/PackIconModernKindToImageConverter.cs b/src/IconPacks.Avalonia.Modern/Converter/PackIconModernKindToImageConverter.cs index 479bb1b..b141ff4 100644 --- a/src/IconPacks.Avalonia.Modern/Converter/PackIconModernKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.Modern/Converter/PackIconModernKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.Modern.Converter { public class PackIconModernKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconModernKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.Modern/PackIconModern.cs b/src/IconPacks.Avalonia.Modern/PackIconModern.cs index 3d1e45e..1cf01f6 100644 --- a/src/IconPacks.Avalonia.Modern/PackIconModern.cs +++ b/src/IconPacks.Avalonia.Modern/PackIconModern.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.Modern [MetaData("Modern UI Icons", "https://github.com/Templarian/WindowsIcons", "https://github.com/Templarian/WindowsIcons/blob/master/WindowsPhone/license.txt")] public class PackIconModern : PackIconControlBase { - public PackIconModern() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.Modern/PackIconModernImageExtension.cs b/src/IconPacks.Avalonia.Modern/PackIconModernImageExtension.cs index 06bedfc..5f3abca 100644 --- a/src/IconPacks.Avalonia.Modern/PackIconModernImageExtension.cs +++ b/src/IconPacks.Avalonia.Modern/PackIconModernImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconModernKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.MynaUIIcons/Converter/PackIconMynaUIIconsKindToImageConverter.cs b/src/IconPacks.Avalonia.MynaUIIcons/Converter/PackIconMynaUIIconsKindToImageConverter.cs index 0d25d60..a24f5cc 100644 --- a/src/IconPacks.Avalonia.MynaUIIcons/Converter/PackIconMynaUIIconsKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.MynaUIIcons/Converter/PackIconMynaUIIconsKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.MynaUIIcons.Converter { public class PackIconMynaUIIconsKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconMynaUIIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.MynaUIIcons/PackIconMynaUIIcons.cs b/src/IconPacks.Avalonia.MynaUIIcons/PackIconMynaUIIcons.cs index 09dfcc7..892a8b0 100644 --- a/src/IconPacks.Avalonia.MynaUIIcons/PackIconMynaUIIcons.cs +++ b/src/IconPacks.Avalonia.MynaUIIcons/PackIconMynaUIIcons.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.MynaUIIcons [MetaData("MynaUI Icons", "https://github.com/praveenjuge/mynaui-icons", "https://github.com/praveenjuge/mynaui-icons?tab=MIT-1-ov-file")] public class PackIconMynaUIIcons : PackIconControlBase { - public PackIconMynaUIIcons() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.MynaUIIcons/PackIconMynaUIIconsImageExtension.cs b/src/IconPacks.Avalonia.MynaUIIcons/PackIconMynaUIIconsImageExtension.cs index 99c45dc..fda8950 100644 --- a/src/IconPacks.Avalonia.MynaUIIcons/PackIconMynaUIIconsImageExtension.cs +++ b/src/IconPacks.Avalonia.MynaUIIcons/PackIconMynaUIIconsImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconMynaUIIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.Octicons/Converter/PackIconOcticonsKindToImageConverter.cs b/src/IconPacks.Avalonia.Octicons/Converter/PackIconOcticonsKindToImageConverter.cs index 082c731..be15827 100644 --- a/src/IconPacks.Avalonia.Octicons/Converter/PackIconOcticonsKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.Octicons/Converter/PackIconOcticonsKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.Octicons.Converter { public class PackIconOcticonsKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconOcticonsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.Octicons/PackIconOcticons.cs b/src/IconPacks.Avalonia.Octicons/PackIconOcticons.cs index 10df441..863e439 100644 --- a/src/IconPacks.Avalonia.Octicons/PackIconOcticons.cs +++ b/src/IconPacks.Avalonia.Octicons/PackIconOcticons.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.Octicons [MetaData("Primer Octicons (GitHub)", "https://github.com/primer/octicons", "https://github.com/primer/octicons?tab=MIT-1-ov-file#readme")] public class PackIconOcticons : PackIconControlBase { - public PackIconOcticons() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.Octicons/PackIconOcticonsImageExtension.cs b/src/IconPacks.Avalonia.Octicons/PackIconOcticonsImageExtension.cs index f5f1463..11a3a58 100644 --- a/src/IconPacks.Avalonia.Octicons/PackIconOcticonsImageExtension.cs +++ b/src/IconPacks.Avalonia.Octicons/PackIconOcticonsImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconOcticonsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.PhosphorIcons/Converter/PackIconPhosphorIconsKindToImageConverter.cs b/src/IconPacks.Avalonia.PhosphorIcons/Converter/PackIconPhosphorIconsKindToImageConverter.cs index 642112f..c3d2df9 100644 --- a/src/IconPacks.Avalonia.PhosphorIcons/Converter/PackIconPhosphorIconsKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.PhosphorIcons/Converter/PackIconPhosphorIconsKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.PhosphorIcons.Converter { public class PackIconPhosphorIconsKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconPhosphorIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.PhosphorIcons/PackIconPhosphorIcons.cs b/src/IconPacks.Avalonia.PhosphorIcons/PackIconPhosphorIcons.cs index 76200de..42de03b 100644 --- a/src/IconPacks.Avalonia.PhosphorIcons/PackIconPhosphorIcons.cs +++ b/src/IconPacks.Avalonia.PhosphorIcons/PackIconPhosphorIcons.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.PhosphorIcons [MetaData("Phosphor Icons", "https://phosphoricons.com/", "https://github.com/phosphor-icons/core?tab=MIT-1-ov-file#readme")] public class PackIconPhosphorIcons : PackIconControlBase { - public PackIconPhosphorIcons() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.PhosphorIcons/PackIconPhosphorIconsImageExtension.cs b/src/IconPacks.Avalonia.PhosphorIcons/PackIconPhosphorIconsImageExtension.cs index 91e6bad..781e889 100644 --- a/src/IconPacks.Avalonia.PhosphorIcons/PackIconPhosphorIconsImageExtension.cs +++ b/src/IconPacks.Avalonia.PhosphorIcons/PackIconPhosphorIconsImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconPhosphorIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.PicolIcons/Converter/PackIconPicolIconsKindToImageConverter.cs b/src/IconPacks.Avalonia.PicolIcons/Converter/PackIconPicolIconsKindToImageConverter.cs index fe6da36..6f7b5d4 100644 --- a/src/IconPacks.Avalonia.PicolIcons/Converter/PackIconPicolIconsKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.PicolIcons/Converter/PackIconPicolIconsKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.PicolIcons.Converter { public class PackIconPicolIconsKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconPicolIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.PicolIcons/PackIconPicolIcons.cs b/src/IconPacks.Avalonia.PicolIcons/PackIconPicolIcons.cs index 5d408b3..b21d05a 100644 --- a/src/IconPacks.Avalonia.PicolIcons/PackIconPicolIcons.cs +++ b/src/IconPacks.Avalonia.PicolIcons/PackIconPicolIcons.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.PicolIcons [MetaData("PICOL Icons", "https://github.com/PicolSigns/Icons", "https://github.com/PicolSigns/Icons/blob/master/LICENSE")] public class PackIconPicolIcons : PackIconControlBase { - public PackIconPicolIcons() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.PicolIcons/PackIconPicolIconsImageExtension.cs b/src/IconPacks.Avalonia.PicolIcons/PackIconPicolIconsImageExtension.cs index e303eca..6ffe1ba 100644 --- a/src/IconPacks.Avalonia.PicolIcons/PackIconPicolIconsImageExtension.cs +++ b/src/IconPacks.Avalonia.PicolIcons/PackIconPicolIconsImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconPicolIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.PixelartIcons/Converter/PackIconPixelartIconsKindToImageConverter.cs b/src/IconPacks.Avalonia.PixelartIcons/Converter/PackIconPixelartIconsKindToImageConverter.cs index 927fd01..9b74cc4 100644 --- a/src/IconPacks.Avalonia.PixelartIcons/Converter/PackIconPixelartIconsKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.PixelartIcons/Converter/PackIconPixelartIconsKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.PixelartIcons.Converter { public class PackIconPixelartIconsKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconPixelartIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.PixelartIcons/PackIconPixelartIcons.cs b/src/IconPacks.Avalonia.PixelartIcons/PackIconPixelartIcons.cs index a0e21fd..265bfb5 100644 --- a/src/IconPacks.Avalonia.PixelartIcons/PackIconPixelartIcons.cs +++ b/src/IconPacks.Avalonia.PixelartIcons/PackIconPixelartIcons.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.PixelartIcons [MetaData("Pixelarticons", "https://pixelarticons.com/", "https://github.com/halfmage/pixelarticons?tab=MIT-1-ov-file#readme")] public class PackIconPixelartIcons : PackIconControlBase { - public PackIconPixelartIcons() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.PixelartIcons/PackIconPixelartIconsImageExtension.cs b/src/IconPacks.Avalonia.PixelartIcons/PackIconPixelartIconsImageExtension.cs index 1f47f18..51de9ce 100644 --- a/src/IconPacks.Avalonia.PixelartIcons/PackIconPixelartIconsImageExtension.cs +++ b/src/IconPacks.Avalonia.PixelartIcons/PackIconPixelartIconsImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconPixelartIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.RPGAwesome/Converter/PackIconRPGAwesomeKindToImageConverter.cs b/src/IconPacks.Avalonia.RPGAwesome/Converter/PackIconRPGAwesomeKindToImageConverter.cs index 0b08d8b..ecf5fb2 100644 --- a/src/IconPacks.Avalonia.RPGAwesome/Converter/PackIconRPGAwesomeKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.RPGAwesome/Converter/PackIconRPGAwesomeKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.RPGAwesome.Converter { public class PackIconRPGAwesomeKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconRPGAwesomeKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.RPGAwesome/PackIconRPGAwesome.cs b/src/IconPacks.Avalonia.RPGAwesome/PackIconRPGAwesome.cs index b6036ea..60107de 100644 --- a/src/IconPacks.Avalonia.RPGAwesome/PackIconRPGAwesome.cs +++ b/src/IconPacks.Avalonia.RPGAwesome/PackIconRPGAwesome.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.RPGAwesome [MetaData("RPG Awesome", "http://nagoshiashumari.github.io/Rpg-Awesome/", "https://github.com/nagoshiashumari/Rpg-Awesome/blob/master/LICENSE.md")] public class PackIconRPGAwesome : PackIconControlBase { - public PackIconRPGAwesome() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.RPGAwesome/PackIconRPGAwesomeImageExtension.cs b/src/IconPacks.Avalonia.RPGAwesome/PackIconRPGAwesomeImageExtension.cs index 4ed7b94..7f0469d 100644 --- a/src/IconPacks.Avalonia.RPGAwesome/PackIconRPGAwesomeImageExtension.cs +++ b/src/IconPacks.Avalonia.RPGAwesome/PackIconRPGAwesomeImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconRPGAwesomeKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.RadixIcons/Converter/PackIconRadixIconsKindToImageConverter.cs b/src/IconPacks.Avalonia.RadixIcons/Converter/PackIconRadixIconsKindToImageConverter.cs index 18d1497..8446eba 100644 --- a/src/IconPacks.Avalonia.RadixIcons/Converter/PackIconRadixIconsKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.RadixIcons/Converter/PackIconRadixIconsKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.RadixIcons.Converter { public class PackIconRadixIconsKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconRadixIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.RadixIcons/PackIconRadixIcons.cs b/src/IconPacks.Avalonia.RadixIcons/PackIconRadixIcons.cs index 8450962..e30909a 100644 --- a/src/IconPacks.Avalonia.RadixIcons/PackIconRadixIcons.cs +++ b/src/IconPacks.Avalonia.RadixIcons/PackIconRadixIcons.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.RadixIcons [MetaData("Radix Icons", "https://github.com/radix-ui/icons", "https://github.com/radix-ui/icons?tab=MIT-1-ov-file#readme")] public class PackIconRadixIcons : PackIconControlBase { - public PackIconRadixIcons() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.RadixIcons/PackIconRadixIconsImageExtension.cs b/src/IconPacks.Avalonia.RadixIcons/PackIconRadixIconsImageExtension.cs index bf09560..4a72e64 100644 --- a/src/IconPacks.Avalonia.RadixIcons/PackIconRadixIconsImageExtension.cs +++ b/src/IconPacks.Avalonia.RadixIcons/PackIconRadixIconsImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconRadixIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.RemixIcon/Converter/PackIconRemixIconKindToImageConverter.cs b/src/IconPacks.Avalonia.RemixIcon/Converter/PackIconRemixIconKindToImageConverter.cs index 93814cf..322abfe 100644 --- a/src/IconPacks.Avalonia.RemixIcon/Converter/PackIconRemixIconKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.RemixIcon/Converter/PackIconRemixIconKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.RemixIcon.Converter { public class PackIconRemixIconKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconRemixIconKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.RemixIcon/PackIconRemixIcon.cs b/src/IconPacks.Avalonia.RemixIcon/PackIconRemixIcon.cs index 645f2c0..4ba67fb 100644 --- a/src/IconPacks.Avalonia.RemixIcon/PackIconRemixIcon.cs +++ b/src/IconPacks.Avalonia.RemixIcon/PackIconRemixIcon.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.RemixIcon [MetaData("Remix Icon", "https://remixicon.com/", "https://github.com/Remix-Design/RemixIcon/blob/master/License")] public class PackIconRemixIcon : PackIconControlBase { - public PackIconRemixIcon() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.RemixIcon/PackIconRemixIconImageExtension.cs b/src/IconPacks.Avalonia.RemixIcon/PackIconRemixIconImageExtension.cs index 20861c9..44dd68f 100644 --- a/src/IconPacks.Avalonia.RemixIcon/PackIconRemixIconImageExtension.cs +++ b/src/IconPacks.Avalonia.RemixIcon/PackIconRemixIconImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconRemixIconKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.SimpleIcons/Converter/PackIconSimpleIconsKindToImageConverter.cs b/src/IconPacks.Avalonia.SimpleIcons/Converter/PackIconSimpleIconsKindToImageConverter.cs index 93b331a..923b691 100644 --- a/src/IconPacks.Avalonia.SimpleIcons/Converter/PackIconSimpleIconsKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.SimpleIcons/Converter/PackIconSimpleIconsKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.SimpleIcons.Converter { public class PackIconSimpleIconsKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconSimpleIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.SimpleIcons/PackIconSimpleIcons.cs b/src/IconPacks.Avalonia.SimpleIcons/PackIconSimpleIcons.cs index 9bc3210..d403078 100644 --- a/src/IconPacks.Avalonia.SimpleIcons/PackIconSimpleIcons.cs +++ b/src/IconPacks.Avalonia.SimpleIcons/PackIconSimpleIcons.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.SimpleIcons [MetaData("Simple Icons", "https://github.com/simple-icons/simple-icons", "https://github.com/simple-icons/simple-icons?tab=CC0-1.0-1-ov-file#readme")] public class PackIconSimpleIcons : PackIconControlBase { - public PackIconSimpleIcons() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.SimpleIcons/PackIconSimpleIconsImageExtension.cs b/src/IconPacks.Avalonia.SimpleIcons/PackIconSimpleIconsImageExtension.cs index 0872106..4d7d539 100644 --- a/src/IconPacks.Avalonia.SimpleIcons/PackIconSimpleIconsImageExtension.cs +++ b/src/IconPacks.Avalonia.SimpleIcons/PackIconSimpleIconsImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconSimpleIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.Typicons/Converter/PackIconTypiconsKindToImageConverter.cs b/src/IconPacks.Avalonia.Typicons/Converter/PackIconTypiconsKindToImageConverter.cs index 84377b4..a7e6341 100644 --- a/src/IconPacks.Avalonia.Typicons/Converter/PackIconTypiconsKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.Typicons/Converter/PackIconTypiconsKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.Typicons.Converter { public class PackIconTypiconsKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconTypiconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.Typicons/PackIconTypicons.cs b/src/IconPacks.Avalonia.Typicons/PackIconTypicons.cs index b85d18f..2bd40b8 100644 --- a/src/IconPacks.Avalonia.Typicons/PackIconTypicons.cs +++ b/src/IconPacks.Avalonia.Typicons/PackIconTypicons.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.Typicons [MetaData("Typicons", "https://www.s-ings.com/typicons/", "https://github.com/stephenhutchings/typicons.font/blob/master/LICENCE.md")] public class PackIconTypicons : PackIconControlBase { - public PackIconTypicons() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.Typicons/PackIconTypiconsImageExtension.cs b/src/IconPacks.Avalonia.Typicons/PackIconTypiconsImageExtension.cs index 09bdc6a..2af2fca 100644 --- a/src/IconPacks.Avalonia.Typicons/PackIconTypiconsImageExtension.cs +++ b/src/IconPacks.Avalonia.Typicons/PackIconTypiconsImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconTypiconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.Unicons/Converter/PackIconUniconsKindToImageConverter.cs b/src/IconPacks.Avalonia.Unicons/Converter/PackIconUniconsKindToImageConverter.cs index 938e1d7..8815282 100644 --- a/src/IconPacks.Avalonia.Unicons/Converter/PackIconUniconsKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.Unicons/Converter/PackIconUniconsKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.Unicons.Converter { public class PackIconUniconsKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconUniconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.Unicons/PackIconUnicons.cs b/src/IconPacks.Avalonia.Unicons/PackIconUnicons.cs index f8cf0ce..bff4d97 100644 --- a/src/IconPacks.Avalonia.Unicons/PackIconUnicons.cs +++ b/src/IconPacks.Avalonia.Unicons/PackIconUnicons.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.Unicons [MetaData("Unicons", "https://github.com/Iconscout/unicons", "https://github.com/Iconscout/unicons?tab=readme-ov-file#license")] public class PackIconUnicons : PackIconControlBase { - public PackIconUnicons() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.Unicons/PackIconUniconsImageExtension.cs b/src/IconPacks.Avalonia.Unicons/PackIconUniconsImageExtension.cs index 9320c61..588af6a 100644 --- a/src/IconPacks.Avalonia.Unicons/PackIconUniconsImageExtension.cs +++ b/src/IconPacks.Avalonia.Unicons/PackIconUniconsImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconUniconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.VaadinIcons/Converter/PackIconVaadinIconsKindToImageConverter.cs b/src/IconPacks.Avalonia.VaadinIcons/Converter/PackIconVaadinIconsKindToImageConverter.cs index 8d4fe1c..ff3b0e9 100644 --- a/src/IconPacks.Avalonia.VaadinIcons/Converter/PackIconVaadinIconsKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.VaadinIcons/Converter/PackIconVaadinIconsKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.VaadinIcons.Converter { public class PackIconVaadinIconsKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconVaadinIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.VaadinIcons/PackIconVaadinIcons.cs b/src/IconPacks.Avalonia.VaadinIcons/PackIconVaadinIcons.cs index 12579b4..34201d1 100644 --- a/src/IconPacks.Avalonia.VaadinIcons/PackIconVaadinIcons.cs +++ b/src/IconPacks.Avalonia.VaadinIcons/PackIconVaadinIcons.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.VaadinIcons [MetaData("Vaadin Icons", "https://vaadin.com/icons", "https://github.com/vaadin/web-components/tree/main/packages/icons#license")] public class PackIconVaadinIcons : PackIconControlBase { - public PackIconVaadinIcons() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.VaadinIcons/PackIconVaadinIconsImageExtension.cs b/src/IconPacks.Avalonia.VaadinIcons/PackIconVaadinIconsImageExtension.cs index b1fc2e6..05c5084 100644 --- a/src/IconPacks.Avalonia.VaadinIcons/PackIconVaadinIconsImageExtension.cs +++ b/src/IconPacks.Avalonia.VaadinIcons/PackIconVaadinIconsImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconVaadinIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.WeatherIcons/Converter/PackIconWeatherIconsKindToImageConverter.cs b/src/IconPacks.Avalonia.WeatherIcons/Converter/PackIconWeatherIconsKindToImageConverter.cs index bc0319e..f94f8f6 100644 --- a/src/IconPacks.Avalonia.WeatherIcons/Converter/PackIconWeatherIconsKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.WeatherIcons/Converter/PackIconWeatherIconsKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.WeatherIcons.Converter { public class PackIconWeatherIconsKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconWeatherIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.WeatherIcons/PackIconWeatherIcons.cs b/src/IconPacks.Avalonia.WeatherIcons/PackIconWeatherIcons.cs index 7f4e2eb..8318b82 100644 --- a/src/IconPacks.Avalonia.WeatherIcons/PackIconWeatherIcons.cs +++ b/src/IconPacks.Avalonia.WeatherIcons/PackIconWeatherIcons.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.WeatherIcons [MetaData("Weather Icons", "https://github.com/erikflowers/weather-icons", "https://github.com/erikflowers/weather-icons?tab=readme-ov-file#licensing")] public class PackIconWeatherIcons : PackIconControlBase { - public PackIconWeatherIcons() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.WeatherIcons/PackIconWeatherIconsImageExtension.cs b/src/IconPacks.Avalonia.WeatherIcons/PackIconWeatherIconsImageExtension.cs index 62b6284..a70cf96 100644 --- a/src/IconPacks.Avalonia.WeatherIcons/PackIconWeatherIconsImageExtension.cs +++ b/src/IconPacks.Avalonia.WeatherIcons/PackIconWeatherIconsImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconWeatherIconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.Zondicons/Converter/PackIconZondiconsKindToImageConverter.cs b/src/IconPacks.Avalonia.Zondicons/Converter/PackIconZondiconsKindToImageConverter.cs index caaee8f..d579345 100644 --- a/src/IconPacks.Avalonia.Zondicons/Converter/PackIconZondiconsKindToImageConverter.cs +++ b/src/IconPacks.Avalonia.Zondicons/Converter/PackIconZondiconsKindToImageConverter.cs @@ -1,21 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.Zondicons.Converter { public class PackIconZondiconsKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconZondiconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia.Zondicons/PackIconZondicons.cs b/src/IconPacks.Avalonia.Zondicons/PackIconZondicons.cs index a5dc55b..06fd00d 100644 --- a/src/IconPacks.Avalonia.Zondicons/PackIconZondicons.cs +++ b/src/IconPacks.Avalonia.Zondicons/PackIconZondicons.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; using IconPacks.Avalonia.Core.Attributes; @@ -12,11 +11,6 @@ namespace IconPacks.Avalonia.Zondicons [MetaData("Zondicons", "https://www.zondicons.com/", "https://creativecommons.org/licenses/by/4.0/")] public class PackIconZondicons : PackIconControlBase { - public PackIconZondicons() - { - UpdateIconPseudoClasses(true, false, false); - } - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -50,9 +44,7 @@ protected override void UpdateData() { if (Kind != default) { - string data = null; - PackIconDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + this.Data = PackIconGeometryCache.GetOrAdd(Kind); } else { diff --git a/src/IconPacks.Avalonia.Zondicons/PackIconZondiconsImageExtension.cs b/src/IconPacks.Avalonia.Zondicons/PackIconZondiconsImageExtension.cs index a2f715b..5eb4329 100644 --- a/src/IconPacks.Avalonia.Zondicons/PackIconZondiconsImageExtension.cs +++ b/src/IconPacks.Avalonia.Zondicons/PackIconZondiconsImageExtension.cs @@ -22,17 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - if (iconKind is PackIconZondiconsKind kind) - { - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - } - - return data; - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia/Converter/PackIconKindToImageConverter.cs b/src/IconPacks.Avalonia/Converter/PackIconKindToImageConverter.cs index 73bbd5b..38f4ddc 100644 --- a/src/IconPacks.Avalonia/Converter/PackIconKindToImageConverter.cs +++ b/src/IconPacks.Avalonia/Converter/PackIconKindToImageConverter.cs @@ -1,188 +1,8 @@ -using Avalonia.Media; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.Core.Converter; -using IconPacks.Avalonia.BootstrapIcons; -using IconPacks.Avalonia.BoxIcons2; -using IconPacks.Avalonia.BoxIcons; -using IconPacks.Avalonia.CircumIcons; -using IconPacks.Avalonia.Codicons; -using IconPacks.Avalonia.Coolicons; -using IconPacks.Avalonia.Entypo; -using IconPacks.Avalonia.EvaIcons; -using IconPacks.Avalonia.FeatherIcons; -using IconPacks.Avalonia.FileIcons; -using IconPacks.Avalonia.Fontaudio; -using IconPacks.Avalonia.FontAwesome5; -using IconPacks.Avalonia.FontAwesome6; -using IconPacks.Avalonia.FontAwesome; -using IconPacks.Avalonia.Fontisto; -using IconPacks.Avalonia.ForkAwesome; -using IconPacks.Avalonia.GameIcons; -using IconPacks.Avalonia.Ionicons; -using IconPacks.Avalonia.JamIcons; -using IconPacks.Avalonia.KeyruneIcons; -using IconPacks.Avalonia.Lucide; -using IconPacks.Avalonia.Material; -using IconPacks.Avalonia.MaterialLight; -using IconPacks.Avalonia.MaterialDesign; -using IconPacks.Avalonia.MemoryIcons; -using IconPacks.Avalonia.Microns; -using IconPacks.Avalonia.MingCuteIcons; -using IconPacks.Avalonia.Modern; -using IconPacks.Avalonia.MynaUIIcons; -using IconPacks.Avalonia.Octicons; -using IconPacks.Avalonia.PhosphorIcons; -using IconPacks.Avalonia.PicolIcons; -using IconPacks.Avalonia.PixelartIcons; -using IconPacks.Avalonia.RadixIcons; -using IconPacks.Avalonia.RemixIcon; -using IconPacks.Avalonia.RPGAwesome; -using IconPacks.Avalonia.SimpleIcons; -using IconPacks.Avalonia.Typicons; -using IconPacks.Avalonia.Unicons; -using IconPacks.Avalonia.VaadinIcons; -using IconPacks.Avalonia.WeatherIcons; -using IconPacks.Avalonia.Zondicons; +using IconPacks.Avalonia.Core.Converter; namespace IconPacks.Avalonia.Converter { public class PackIconKindToImageConverter : PackIconKindToImageConverterBase { - /// - protected override string GetPathData(object iconKind) - { - string data = null; - switch (iconKind) - { - case PackIconBootstrapIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconBoxIcons2Kind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconBoxIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconCircumIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconCodiconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconCooliconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconEntypoKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconEvaIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconFeatherIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconFileIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconFontaudioKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconFontAwesome5Kind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconFontAwesome6Kind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconFontAwesomeKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconFontistoKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconForkAwesomeKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconGameIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconIoniconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconJamIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconKeyruneIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconLucideKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconMaterialKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconMaterialLightKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconMaterialDesignKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconMemoryIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconMicronsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconMingCuteIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconModernKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconMynaUIIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconOcticonsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconPhosphorIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconPicolIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconPixelartIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconRadixIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconRemixIconKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconRPGAwesomeKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconSimpleIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconTypiconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconUniconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconVaadinIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconWeatherIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconZondiconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - default: - return null; - } - } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia/PackIconControl.cs b/src/IconPacks.Avalonia/PackIconControl.cs index d0ebe34..ac8ffbf 100644 --- a/src/IconPacks.Avalonia/PackIconControl.cs +++ b/src/IconPacks.Avalonia/PackIconControl.cs @@ -1,49 +1,6 @@ using System; using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.BootstrapIcons; -using IconPacks.Avalonia.BoxIcons2; -using IconPacks.Avalonia.BoxIcons; -using IconPacks.Avalonia.CircumIcons; -using IconPacks.Avalonia.Codicons; -using IconPacks.Avalonia.Coolicons; -using IconPacks.Avalonia.Entypo; -using IconPacks.Avalonia.EvaIcons; -using IconPacks.Avalonia.FeatherIcons; -using IconPacks.Avalonia.FileIcons; -using IconPacks.Avalonia.Fontaudio; -using IconPacks.Avalonia.FontAwesome5; -using IconPacks.Avalonia.FontAwesome6; -using IconPacks.Avalonia.FontAwesome; -using IconPacks.Avalonia.Fontisto; -using IconPacks.Avalonia.ForkAwesome; -using IconPacks.Avalonia.GameIcons; -using IconPacks.Avalonia.Ionicons; -using IconPacks.Avalonia.JamIcons; -using IconPacks.Avalonia.KeyruneIcons; -using IconPacks.Avalonia.Lucide; -using IconPacks.Avalonia.Material; -using IconPacks.Avalonia.MaterialLight; -using IconPacks.Avalonia.MaterialDesign; -using IconPacks.Avalonia.MemoryIcons; -using IconPacks.Avalonia.Microns; -using IconPacks.Avalonia.MingCuteIcons; -using IconPacks.Avalonia.Modern; -using IconPacks.Avalonia.MynaUIIcons; -using IconPacks.Avalonia.Octicons; -using IconPacks.Avalonia.PhosphorIcons; -using IconPacks.Avalonia.PicolIcons; -using IconPacks.Avalonia.PixelartIcons; -using IconPacks.Avalonia.RadixIcons; -using IconPacks.Avalonia.RemixIcon; -using IconPacks.Avalonia.RPGAwesome; -using IconPacks.Avalonia.SimpleIcons; -using IconPacks.Avalonia.Typicons; -using IconPacks.Avalonia.Unicons; -using IconPacks.Avalonia.VaadinIcons; -using IconPacks.Avalonia.WeatherIcons; -using IconPacks.Avalonia.Zondicons; namespace IconPacks.Avalonia { @@ -82,191 +39,17 @@ protected override void SetKind(TKind iconKind) protected override void UpdateData() { - switch (Kind) + var kind = Kind; + + if (kind is null) { - case PackIconBootstrapIconsKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconBoxIcons2Kind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconBoxIconsKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconCircumIconsKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconCodiconsKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconCooliconsKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconEntypoKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconEvaIconsKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconFeatherIconsKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconFileIconsKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconFontaudioKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconFontAwesome5Kind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconFontAwesome6Kind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconFontAwesomeKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconFontistoKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconForkAwesomeKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconGameIconsKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconIoniconsKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconJamIconsKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconKeyruneIconsKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconLucideKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconMaterialKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconMaterialLightKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconMaterialDesignKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconMemoryIconsKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconMicronsKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconMingCuteIconsKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconModernKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconMynaUIIconsKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconOcticonsKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconPhosphorIconsKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconPicolIconsKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconPixelartIconsKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconRadixIconsKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconRemixIconKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconRPGAwesomeKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconSimpleIconsKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconTypiconsKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconUniconsKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconVaadinIconsKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconWeatherIconsKind: - UpdateIconPseudoClasses(true, false, false); - break; - - case PackIconZondiconsKind: - UpdateIconPseudoClasses(true, false, false); - break; - - default: - UpdateIconPseudoClasses(true, false, false); - break; + Data = null; + return; } - if (Kind != default(Enum)) - { - string data = null; - PackIconControlDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; - } - else - { - this.Data = null; - } + var geometry = PackIconGeometryCache.GetOrAdd(Kind); + + Data = geometry; } } } \ No newline at end of file diff --git a/src/IconPacks.Avalonia/PackIconControlDataFactory.cs b/src/IconPacks.Avalonia/PackIconControlDataFactory.cs deleted file mode 100644 index 86ee5aa..0000000 --- a/src/IconPacks.Avalonia/PackIconControlDataFactory.cs +++ /dev/null @@ -1,112 +0,0 @@ -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Threading.Tasks; -using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.BootstrapIcons; -using IconPacks.Avalonia.BoxIcons2; -using IconPacks.Avalonia.BoxIcons; -using IconPacks.Avalonia.CircumIcons; -using IconPacks.Avalonia.Codicons; -using IconPacks.Avalonia.Coolicons; -using IconPacks.Avalonia.Entypo; -using IconPacks.Avalonia.EvaIcons; -using IconPacks.Avalonia.FeatherIcons; -using IconPacks.Avalonia.FileIcons; -using IconPacks.Avalonia.Fontaudio; -using IconPacks.Avalonia.FontAwesome5; -using IconPacks.Avalonia.FontAwesome6; -using IconPacks.Avalonia.FontAwesome; -using IconPacks.Avalonia.Fontisto; -using IconPacks.Avalonia.ForkAwesome; -using IconPacks.Avalonia.GameIcons; -using IconPacks.Avalonia.Ionicons; -using IconPacks.Avalonia.JamIcons; -using IconPacks.Avalonia.KeyruneIcons; -using IconPacks.Avalonia.Lucide; -using IconPacks.Avalonia.Material; -using IconPacks.Avalonia.MaterialLight; -using IconPacks.Avalonia.MaterialDesign; -using IconPacks.Avalonia.MemoryIcons; -using IconPacks.Avalonia.Microns; -using IconPacks.Avalonia.MingCuteIcons; -using IconPacks.Avalonia.Modern; -using IconPacks.Avalonia.MynaUIIcons; -using IconPacks.Avalonia.Octicons; -using IconPacks.Avalonia.PhosphorIcons; -using IconPacks.Avalonia.PicolIcons; -using IconPacks.Avalonia.PixelartIcons; -using IconPacks.Avalonia.RadixIcons; -using IconPacks.Avalonia.RemixIcon; -using IconPacks.Avalonia.RPGAwesome; -using IconPacks.Avalonia.SimpleIcons; -using IconPacks.Avalonia.Typicons; -using IconPacks.Avalonia.Unicons; -using IconPacks.Avalonia.VaadinIcons; -using IconPacks.Avalonia.WeatherIcons; -using IconPacks.Avalonia.Zondicons; - -namespace IconPacks.Avalonia -{ - /// ****************************************** - /// This code is auto generated. Do not amend. - /// ****************************************** - public static class PackIconControlDataFactory - { - public static Lazy> DataIndex { get; } - - static PackIconControlDataFactory() - { - DataIndex = new Lazy>(() => new ReadOnlyDictionary(GetAllIcons())); - } - - internal static IDictionary GetAllIcons() - { - var allIcons = new ConcurrentDictionary(); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - Parallel.ForEach(PackIconDataFactory.Create(), icon => { allIcons.TryAdd(icon.Key, icon.Value); }); - return allIcons; - } - } -} \ No newline at end of file diff --git a/src/IconPacks.Avalonia/PackIconImageExtension.cs b/src/IconPacks.Avalonia/PackIconImageExtension.cs index 787ee94..1b8b2f4 100644 --- a/src/IconPacks.Avalonia/PackIconImageExtension.cs +++ b/src/IconPacks.Avalonia/PackIconImageExtension.cs @@ -2,48 +2,6 @@ using Avalonia.Markup.Xaml; using Avalonia.Media; using IconPacks.Avalonia.Core; -using IconPacks.Avalonia.BootstrapIcons; -using IconPacks.Avalonia.BoxIcons2; -using IconPacks.Avalonia.BoxIcons; -using IconPacks.Avalonia.CircumIcons; -using IconPacks.Avalonia.Codicons; -using IconPacks.Avalonia.Coolicons; -using IconPacks.Avalonia.Entypo; -using IconPacks.Avalonia.EvaIcons; -using IconPacks.Avalonia.FeatherIcons; -using IconPacks.Avalonia.FileIcons; -using IconPacks.Avalonia.Fontaudio; -using IconPacks.Avalonia.FontAwesome5; -using IconPacks.Avalonia.FontAwesome6; -using IconPacks.Avalonia.FontAwesome; -using IconPacks.Avalonia.Fontisto; -using IconPacks.Avalonia.ForkAwesome; -using IconPacks.Avalonia.GameIcons; -using IconPacks.Avalonia.Ionicons; -using IconPacks.Avalonia.JamIcons; -using IconPacks.Avalonia.KeyruneIcons; -using IconPacks.Avalonia.Lucide; -using IconPacks.Avalonia.Material; -using IconPacks.Avalonia.MaterialLight; -using IconPacks.Avalonia.MaterialDesign; -using IconPacks.Avalonia.MemoryIcons; -using IconPacks.Avalonia.Microns; -using IconPacks.Avalonia.MingCuteIcons; -using IconPacks.Avalonia.Modern; -using IconPacks.Avalonia.MynaUIIcons; -using IconPacks.Avalonia.Octicons; -using IconPacks.Avalonia.PhosphorIcons; -using IconPacks.Avalonia.PicolIcons; -using IconPacks.Avalonia.PixelartIcons; -using IconPacks.Avalonia.RadixIcons; -using IconPacks.Avalonia.RemixIcon; -using IconPacks.Avalonia.RPGAwesome; -using IconPacks.Avalonia.SimpleIcons; -using IconPacks.Avalonia.Typicons; -using IconPacks.Avalonia.Unicons; -using IconPacks.Avalonia.VaadinIcons; -using IconPacks.Avalonia.WeatherIcons; -using IconPacks.Avalonia.Zondicons; namespace IconPacks.Avalonia { @@ -64,142 +22,5 @@ public override object ProvideValue(IServiceProvider serviceProvider) { return CreateImageSource(this.Kind, this.Brush ?? Brushes.Black); } - - /// - protected override string GetPathData(object iconKind) - { - string data = null; - switch (iconKind) - { - case PackIconBootstrapIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconBoxIcons2Kind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconBoxIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconCircumIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconCodiconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconCooliconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconEntypoKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconEvaIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconFeatherIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconFileIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconFontaudioKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconFontAwesome5Kind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconFontAwesome6Kind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconFontAwesomeKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconFontistoKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconForkAwesomeKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconGameIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconIoniconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconJamIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconKeyruneIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconLucideKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconMaterialKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconMaterialLightKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconMaterialDesignKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconMemoryIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconMicronsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconMingCuteIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconModernKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconMynaUIIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconOcticonsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconPhosphorIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconPicolIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconPixelartIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconRadixIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconRemixIconKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconRPGAwesomeKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconSimpleIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconTypiconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconUniconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconVaadinIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconWeatherIconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - case PackIconZondiconsKind kind: - PackIconDataFactory.DataIndex.Value?.TryGetValue(kind, out data); - return data; - default: - return null; - } - } } } \ No newline at end of file