From b9017066e5608bfe81a616effa94f28eab743d4c Mon Sep 17 00:00:00 2001 From: timunie Date: Thu, 11 Dec 2025 11:54:46 +0100 Subject: [PATCH 1/6] Feat: Trimming friendly JsonConverter at this point we shouldn't worry about netstandard too much, since Avalonia v12 will remove support for it and we don't have to maintain it at this point. --- .../IconJsonContext.cs | 14 +++++++++++++ .../IconPacks.Avalonia.Core.csproj | 7 +++++++ .../PackIconDataFactory.cs | 20 ++++++++++++------- 3 files changed, 34 insertions(+), 7 deletions(-) create mode 100644 src/IconPacks.Avalonia.Core/IconJsonContext.cs 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/PackIconDataFactory.cs b/src/IconPacks.Avalonia.Core/PackIconDataFactory.cs index 50778c3..6c32401 100644 --- a/src/IconPacks.Avalonia.Core/PackIconDataFactory.cs +++ b/src/IconPacks.Avalonia.Core/PackIconDataFactory.cs @@ -2,7 +2,6 @@ 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 @@ -19,13 +18,20 @@ static PackIconDataFactory() public static IDictionary Create() { using var iconJsonStream = AssetLoader.Open(new Uri($"avares://{typeof(TEnum).Assembly.GetName().Name}/Resources/Icons.json")); -#pragma warning disable IL2026 - var options = new JsonSerializerOptions + 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 + if (Enum.TryParse(kvp.Key, out var enumKey)) + { + result[enumKey] = kvp.Value; + } + } + + return result; } } } \ No newline at end of file From 2c82dacce3fb9bf6ecd01bad412afeedb36c025f Mon Sep 17 00:00:00 2001 From: timunie Date: Thu, 11 Dec 2025 11:57:53 +0100 Subject: [PATCH 2/6] Remove unused pseudoclasses /!\ technically this is a breaking change for anyone having a custom style. But since the flipped icon would be wrong anyways, this should be acceptable. --- .../PackIconBootstrapIcons.cs | 5 - .../PackIconBoxIcons.cs | 5 - .../PackIconBoxIcons2.cs | 5 - .../PackIconCircumIcons.cs | 5 - .../PackIconCodicons.cs | 5 - .../PackIconCoolicons.cs | 5 - .../PackIconControlBase.axaml | 22 +- .../PackIconControlBase.cs | 28 --- .../PackIconEntypo.cs | 5 - .../PackIconEvaIcons.cs | 5 - .../PackIconFeatherIcons.cs | 5 - .../PackIconFileIcons.cs | 5 - .../PackIconFontAwesome.cs | 5 - .../PackIconFontAwesome5.cs | 5 - .../PackIconFontAwesome6.cs | 5 - .../PackIconFontaudio.cs | 5 - .../PackIconFontisto.cs | 5 - .../PackIconForkAwesome.cs | 5 - .../PackIconGameIcons.cs | 5 - .../PackIconIonicons.cs | 5 - .../PackIconJamIcons.cs | 5 - .../PackIconKeyruneIcons.cs | 5 - .../PackIconLucide.cs | 5 - .../PackIconMaterial.cs | 5 - .../PackIconMaterialDesign.cs | 5 - .../PackIconMaterialLight.cs | 5 - .../PackIconMemoryIcons.cs | 5 - .../PackIconMicrons.cs | 5 - .../PackIconMingCuteIcons.cs | 5 - .../PackIconModern.cs | 5 - .../PackIconMynaUIIcons.cs | 5 - .../PackIconOcticons.cs | 5 - .../PackIconPhosphorIcons.cs | 5 - .../PackIconPicolIcons.cs | 5 - .../PackIconPixelartIcons.cs | 5 - .../PackIconRPGAwesome.cs | 5 - .../PackIconRadixIcons.cs | 5 - .../PackIconRemixIcon.cs | 5 - .../PackIconSimpleIcons.cs | 5 - .../PackIconTypicons.cs | 5 - .../PackIconUnicons.cs | 5 - .../PackIconVaadinIcons.cs | 5 - .../PackIconWeatherIcons.cs | 5 - .../PackIconZondicons.cs | 5 - src/IconPacks.Avalonia/PackIconControl.cs | 217 ------------------ 45 files changed, 1 insertion(+), 476 deletions(-) diff --git a/src/IconPacks.Avalonia.BootstrapIcons/PackIconBootstrapIcons.cs b/src/IconPacks.Avalonia.BootstrapIcons/PackIconBootstrapIcons.cs index 9d9a3f9..f792b23 100644 --- a/src/IconPacks.Avalonia.BootstrapIcons/PackIconBootstrapIcons.cs +++ b/src/IconPacks.Avalonia.BootstrapIcons/PackIconBootstrapIcons.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.BoxIcons/PackIconBoxIcons.cs b/src/IconPacks.Avalonia.BoxIcons/PackIconBoxIcons.cs index 62e7ba6..44e107e 100644 --- a/src/IconPacks.Avalonia.BoxIcons/PackIconBoxIcons.cs +++ b/src/IconPacks.Avalonia.BoxIcons/PackIconBoxIcons.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.BoxIcons2/PackIconBoxIcons2.cs b/src/IconPacks.Avalonia.BoxIcons2/PackIconBoxIcons2.cs index 09ed5bf..646d544 100644 --- a/src/IconPacks.Avalonia.BoxIcons2/PackIconBoxIcons2.cs +++ b/src/IconPacks.Avalonia.BoxIcons2/PackIconBoxIcons2.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.CircumIcons/PackIconCircumIcons.cs b/src/IconPacks.Avalonia.CircumIcons/PackIconCircumIcons.cs index 0209434..3bd6b6e 100644 --- a/src/IconPacks.Avalonia.CircumIcons/PackIconCircumIcons.cs +++ b/src/IconPacks.Avalonia.CircumIcons/PackIconCircumIcons.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.Codicons/PackIconCodicons.cs b/src/IconPacks.Avalonia.Codicons/PackIconCodicons.cs index 7b51986..1c0a838 100644 --- a/src/IconPacks.Avalonia.Codicons/PackIconCodicons.cs +++ b/src/IconPacks.Avalonia.Codicons/PackIconCodicons.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.Coolicons/PackIconCoolicons.cs b/src/IconPacks.Avalonia.Coolicons/PackIconCoolicons.cs index f7c972f..fa186ab 100644 --- a/src/IconPacks.Avalonia.Coolicons/PackIconCoolicons.cs +++ b/src/IconPacks.Avalonia.Coolicons/PackIconCoolicons.cs @@ -12,11 +12,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)); 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); @@ -300,12 +279,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.Entypo/PackIconEntypo.cs b/src/IconPacks.Avalonia.Entypo/PackIconEntypo.cs index c46caa7..2cae59a 100644 --- a/src/IconPacks.Avalonia.Entypo/PackIconEntypo.cs +++ b/src/IconPacks.Avalonia.Entypo/PackIconEntypo.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.EvaIcons/PackIconEvaIcons.cs b/src/IconPacks.Avalonia.EvaIcons/PackIconEvaIcons.cs index c1d7dab..ac2ff67 100644 --- a/src/IconPacks.Avalonia.EvaIcons/PackIconEvaIcons.cs +++ b/src/IconPacks.Avalonia.EvaIcons/PackIconEvaIcons.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.FeatherIcons/PackIconFeatherIcons.cs b/src/IconPacks.Avalonia.FeatherIcons/PackIconFeatherIcons.cs index 45e2d80..ed03762 100644 --- a/src/IconPacks.Avalonia.FeatherIcons/PackIconFeatherIcons.cs +++ b/src/IconPacks.Avalonia.FeatherIcons/PackIconFeatherIcons.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.FileIcons/PackIconFileIcons.cs b/src/IconPacks.Avalonia.FileIcons/PackIconFileIcons.cs index 5a0d4cd..bbc03d5 100644 --- a/src/IconPacks.Avalonia.FileIcons/PackIconFileIcons.cs +++ b/src/IconPacks.Avalonia.FileIcons/PackIconFileIcons.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.FontAwesome/PackIconFontAwesome.cs b/src/IconPacks.Avalonia.FontAwesome/PackIconFontAwesome.cs index 8972dc5..baf144f 100644 --- a/src/IconPacks.Avalonia.FontAwesome/PackIconFontAwesome.cs +++ b/src/IconPacks.Avalonia.FontAwesome/PackIconFontAwesome.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.FontAwesome5/PackIconFontAwesome5.cs b/src/IconPacks.Avalonia.FontAwesome5/PackIconFontAwesome5.cs index c95577a..56a6b17 100644 --- a/src/IconPacks.Avalonia.FontAwesome5/PackIconFontAwesome5.cs +++ b/src/IconPacks.Avalonia.FontAwesome5/PackIconFontAwesome5.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.FontAwesome6/PackIconFontAwesome6.cs b/src/IconPacks.Avalonia.FontAwesome6/PackIconFontAwesome6.cs index f5bb424..a878a21 100644 --- a/src/IconPacks.Avalonia.FontAwesome6/PackIconFontAwesome6.cs +++ b/src/IconPacks.Avalonia.FontAwesome6/PackIconFontAwesome6.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.Fontaudio/PackIconFontaudio.cs b/src/IconPacks.Avalonia.Fontaudio/PackIconFontaudio.cs index 697bbd1..16ae57e 100644 --- a/src/IconPacks.Avalonia.Fontaudio/PackIconFontaudio.cs +++ b/src/IconPacks.Avalonia.Fontaudio/PackIconFontaudio.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.Fontisto/PackIconFontisto.cs b/src/IconPacks.Avalonia.Fontisto/PackIconFontisto.cs index 98da774..559dd69 100644 --- a/src/IconPacks.Avalonia.Fontisto/PackIconFontisto.cs +++ b/src/IconPacks.Avalonia.Fontisto/PackIconFontisto.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.ForkAwesome/PackIconForkAwesome.cs b/src/IconPacks.Avalonia.ForkAwesome/PackIconForkAwesome.cs index 7bc34a9..66f6b6f 100644 --- a/src/IconPacks.Avalonia.ForkAwesome/PackIconForkAwesome.cs +++ b/src/IconPacks.Avalonia.ForkAwesome/PackIconForkAwesome.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.GameIcons/PackIconGameIcons.cs b/src/IconPacks.Avalonia.GameIcons/PackIconGameIcons.cs index a425022..e4cef7c 100644 --- a/src/IconPacks.Avalonia.GameIcons/PackIconGameIcons.cs +++ b/src/IconPacks.Avalonia.GameIcons/PackIconGameIcons.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.Ionicons/PackIconIonicons.cs b/src/IconPacks.Avalonia.Ionicons/PackIconIonicons.cs index 9363139..b6f1168 100644 --- a/src/IconPacks.Avalonia.Ionicons/PackIconIonicons.cs +++ b/src/IconPacks.Avalonia.Ionicons/PackIconIonicons.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.JamIcons/PackIconJamIcons.cs b/src/IconPacks.Avalonia.JamIcons/PackIconJamIcons.cs index 0ca3cda..ab31578 100644 --- a/src/IconPacks.Avalonia.JamIcons/PackIconJamIcons.cs +++ b/src/IconPacks.Avalonia.JamIcons/PackIconJamIcons.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.KeyruneIcons/PackIconKeyruneIcons.cs b/src/IconPacks.Avalonia.KeyruneIcons/PackIconKeyruneIcons.cs index d4807b5..6224f74 100644 --- a/src/IconPacks.Avalonia.KeyruneIcons/PackIconKeyruneIcons.cs +++ b/src/IconPacks.Avalonia.KeyruneIcons/PackIconKeyruneIcons.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.Lucide/PackIconLucide.cs b/src/IconPacks.Avalonia.Lucide/PackIconLucide.cs index 8d1e68b..7dd560d 100644 --- a/src/IconPacks.Avalonia.Lucide/PackIconLucide.cs +++ b/src/IconPacks.Avalonia.Lucide/PackIconLucide.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.Material/PackIconMaterial.cs b/src/IconPacks.Avalonia.Material/PackIconMaterial.cs index 8c358f2..8f31b37 100644 --- a/src/IconPacks.Avalonia.Material/PackIconMaterial.cs +++ b/src/IconPacks.Avalonia.Material/PackIconMaterial.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.MaterialDesign/PackIconMaterialDesign.cs b/src/IconPacks.Avalonia.MaterialDesign/PackIconMaterialDesign.cs index 74646e4..5f5eda1 100644 --- a/src/IconPacks.Avalonia.MaterialDesign/PackIconMaterialDesign.cs +++ b/src/IconPacks.Avalonia.MaterialDesign/PackIconMaterialDesign.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.MaterialLight/PackIconMaterialLight.cs b/src/IconPacks.Avalonia.MaterialLight/PackIconMaterialLight.cs index 4183916..7d3f2ba 100644 --- a/src/IconPacks.Avalonia.MaterialLight/PackIconMaterialLight.cs +++ b/src/IconPacks.Avalonia.MaterialLight/PackIconMaterialLight.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.MemoryIcons/PackIconMemoryIcons.cs b/src/IconPacks.Avalonia.MemoryIcons/PackIconMemoryIcons.cs index 4d40f9e..4197ba9 100644 --- a/src/IconPacks.Avalonia.MemoryIcons/PackIconMemoryIcons.cs +++ b/src/IconPacks.Avalonia.MemoryIcons/PackIconMemoryIcons.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.Microns/PackIconMicrons.cs b/src/IconPacks.Avalonia.Microns/PackIconMicrons.cs index e8afe27..70800f8 100644 --- a/src/IconPacks.Avalonia.Microns/PackIconMicrons.cs +++ b/src/IconPacks.Avalonia.Microns/PackIconMicrons.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.MingCuteIcons/PackIconMingCuteIcons.cs b/src/IconPacks.Avalonia.MingCuteIcons/PackIconMingCuteIcons.cs index 0af2ddb..5fc3e90 100644 --- a/src/IconPacks.Avalonia.MingCuteIcons/PackIconMingCuteIcons.cs +++ b/src/IconPacks.Avalonia.MingCuteIcons/PackIconMingCuteIcons.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.Modern/PackIconModern.cs b/src/IconPacks.Avalonia.Modern/PackIconModern.cs index 3d1e45e..da3f51a 100644 --- a/src/IconPacks.Avalonia.Modern/PackIconModern.cs +++ b/src/IconPacks.Avalonia.Modern/PackIconModern.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.MynaUIIcons/PackIconMynaUIIcons.cs b/src/IconPacks.Avalonia.MynaUIIcons/PackIconMynaUIIcons.cs index 09dfcc7..555476b 100644 --- a/src/IconPacks.Avalonia.MynaUIIcons/PackIconMynaUIIcons.cs +++ b/src/IconPacks.Avalonia.MynaUIIcons/PackIconMynaUIIcons.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.Octicons/PackIconOcticons.cs b/src/IconPacks.Avalonia.Octicons/PackIconOcticons.cs index 10df441..4c3029b 100644 --- a/src/IconPacks.Avalonia.Octicons/PackIconOcticons.cs +++ b/src/IconPacks.Avalonia.Octicons/PackIconOcticons.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.PhosphorIcons/PackIconPhosphorIcons.cs b/src/IconPacks.Avalonia.PhosphorIcons/PackIconPhosphorIcons.cs index 76200de..a355adf 100644 --- a/src/IconPacks.Avalonia.PhosphorIcons/PackIconPhosphorIcons.cs +++ b/src/IconPacks.Avalonia.PhosphorIcons/PackIconPhosphorIcons.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.PicolIcons/PackIconPicolIcons.cs b/src/IconPacks.Avalonia.PicolIcons/PackIconPicolIcons.cs index 5d408b3..a406140 100644 --- a/src/IconPacks.Avalonia.PicolIcons/PackIconPicolIcons.cs +++ b/src/IconPacks.Avalonia.PicolIcons/PackIconPicolIcons.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.PixelartIcons/PackIconPixelartIcons.cs b/src/IconPacks.Avalonia.PixelartIcons/PackIconPixelartIcons.cs index a0e21fd..290f2b6 100644 --- a/src/IconPacks.Avalonia.PixelartIcons/PackIconPixelartIcons.cs +++ b/src/IconPacks.Avalonia.PixelartIcons/PackIconPixelartIcons.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.RPGAwesome/PackIconRPGAwesome.cs b/src/IconPacks.Avalonia.RPGAwesome/PackIconRPGAwesome.cs index b6036ea..5085cf0 100644 --- a/src/IconPacks.Avalonia.RPGAwesome/PackIconRPGAwesome.cs +++ b/src/IconPacks.Avalonia.RPGAwesome/PackIconRPGAwesome.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.RadixIcons/PackIconRadixIcons.cs b/src/IconPacks.Avalonia.RadixIcons/PackIconRadixIcons.cs index 8450962..cdfdab5 100644 --- a/src/IconPacks.Avalonia.RadixIcons/PackIconRadixIcons.cs +++ b/src/IconPacks.Avalonia.RadixIcons/PackIconRadixIcons.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.RemixIcon/PackIconRemixIcon.cs b/src/IconPacks.Avalonia.RemixIcon/PackIconRemixIcon.cs index 645f2c0..ce1c0aa 100644 --- a/src/IconPacks.Avalonia.RemixIcon/PackIconRemixIcon.cs +++ b/src/IconPacks.Avalonia.RemixIcon/PackIconRemixIcon.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.SimpleIcons/PackIconSimpleIcons.cs b/src/IconPacks.Avalonia.SimpleIcons/PackIconSimpleIcons.cs index 9bc3210..78f9e24 100644 --- a/src/IconPacks.Avalonia.SimpleIcons/PackIconSimpleIcons.cs +++ b/src/IconPacks.Avalonia.SimpleIcons/PackIconSimpleIcons.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.Typicons/PackIconTypicons.cs b/src/IconPacks.Avalonia.Typicons/PackIconTypicons.cs index b85d18f..1f9e824 100644 --- a/src/IconPacks.Avalonia.Typicons/PackIconTypicons.cs +++ b/src/IconPacks.Avalonia.Typicons/PackIconTypicons.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.Unicons/PackIconUnicons.cs b/src/IconPacks.Avalonia.Unicons/PackIconUnicons.cs index f8cf0ce..f0a9409 100644 --- a/src/IconPacks.Avalonia.Unicons/PackIconUnicons.cs +++ b/src/IconPacks.Avalonia.Unicons/PackIconUnicons.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.VaadinIcons/PackIconVaadinIcons.cs b/src/IconPacks.Avalonia.VaadinIcons/PackIconVaadinIcons.cs index 12579b4..6cde0a0 100644 --- a/src/IconPacks.Avalonia.VaadinIcons/PackIconVaadinIcons.cs +++ b/src/IconPacks.Avalonia.VaadinIcons/PackIconVaadinIcons.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.WeatherIcons/PackIconWeatherIcons.cs b/src/IconPacks.Avalonia.WeatherIcons/PackIconWeatherIcons.cs index 7f4e2eb..c645bd5 100644 --- a/src/IconPacks.Avalonia.WeatherIcons/PackIconWeatherIcons.cs +++ b/src/IconPacks.Avalonia.WeatherIcons/PackIconWeatherIcons.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia.Zondicons/PackIconZondicons.cs b/src/IconPacks.Avalonia.Zondicons/PackIconZondicons.cs index a5dc55b..65cdf4b 100644 --- a/src/IconPacks.Avalonia.Zondicons/PackIconZondicons.cs +++ b/src/IconPacks.Avalonia.Zondicons/PackIconZondicons.cs @@ -12,11 +12,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)); diff --git a/src/IconPacks.Avalonia/PackIconControl.cs b/src/IconPacks.Avalonia/PackIconControl.cs index d0ebe34..23a2e0b 100644 --- a/src/IconPacks.Avalonia/PackIconControl.cs +++ b/src/IconPacks.Avalonia/PackIconControl.cs @@ -2,48 +2,6 @@ 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,181 +40,6 @@ protected override void SetKind(TKind iconKind) protected override void UpdateData() { - switch (Kind) - { - 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; - } - if (Kind != default(Enum)) { string data = null; From cbf171ad4492745d4cacfd4160f36d17e7947b12 Mon Sep 17 00:00:00 2001 From: timunie Date: Tue, 16 Dec 2025 17:24:55 +0100 Subject: [PATCH 3/6] Testing StreamGeomCache --- src/IconPacks.Avalonia/IconGeometryCache.cs | 85 +++++++++++++++++++++ src/IconPacks.Avalonia/PackIconControl.cs | 23 ++++-- 2 files changed, 100 insertions(+), 8 deletions(-) create mode 100644 src/IconPacks.Avalonia/IconGeometryCache.cs diff --git a/src/IconPacks.Avalonia/IconGeometryCache.cs b/src/IconPacks.Avalonia/IconGeometryCache.cs new file mode 100644 index 0000000..c38750e --- /dev/null +++ b/src/IconPacks.Avalonia/IconGeometryCache.cs @@ -0,0 +1,85 @@ +#nullable enable +using System; +using System.Collections.Generic; +using Avalonia.Media; + +namespace IconPacks.Avalonia; + +internal static class IconGeometryCache +{ + private sealed record Entry(Enum Key, StreamGeometry 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, Func getPathData) + { + var capacity = PackIconControl.GeometryCache; + + if (capacity <= 0) + return CreateGeometry(getPathData); + + // 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) + var created = CreateGeometry(getPathData); + 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(Func getPathData) + { + var data = getPathData(); + if (string.IsNullOrWhiteSpace(data)) + return null; + + return StreamGeometry.Parse(data); + } + + private static void TrimUnsafe(int capacity) + { + 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/PackIconControl.cs b/src/IconPacks.Avalonia/PackIconControl.cs index 23a2e0b..5a5dc55 100644 --- a/src/IconPacks.Avalonia/PackIconControl.cs +++ b/src/IconPacks.Avalonia/PackIconControl.cs @@ -1,6 +1,5 @@ using System; using Avalonia; -using Avalonia.Media; using IconPacks.Avalonia.Core; namespace IconPacks.Avalonia @@ -9,6 +8,8 @@ namespace IconPacks.Avalonia /// public class PackIconControl : PackIconControlBase { + public static int GeometryCache { get; set; } = 1000; + public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -40,16 +41,22 @@ protected override void SetKind(TKind iconKind) protected override void UpdateData() { - if (Kind != default(Enum)) + var kind = Kind; + + if (kind is null) { - string data = null; - PackIconControlDataFactory.DataIndex.Value?.TryGetValue(Kind, out data); - this.Data = data != null ? StreamGeometry.Parse(data) : null; + Data = null; + return; } - else + + var geometry = IconGeometryCache.GetOrAdd(kind, () => { - this.Data = null; - } + var value = (PackIconControlDataFactory.DataIndex.Value?.TryGetValue(kind, out var data) ?? false) + ? data : null; + return value; + }); + + Data = geometry; } } } \ No newline at end of file From a3eaefe3a54b188af28bacc4a83765358191ae9e Mon Sep 17 00:00:00 2001 From: timunie Date: Wed, 17 Dec 2025 09:07:13 +0100 Subject: [PATCH 4/6] Lazy loading per type This should help for Apps that references the all icon pack but only uses a handful of items. The parallel-foraech didn't gain much because of it's own overhead. --- src/IconPacks.Avalonia/IconGeometryCache.cs | 12 +- src/IconPacks.Avalonia/PackIconControl.cs | 4 +- .../PackIconControlDataFactory.cs | 112 -------------- src/IconPacks.Avalonia/PackIconDataIndex.cs | 142 ++++++++++++++++++ 4 files changed, 154 insertions(+), 116 deletions(-) delete mode 100644 src/IconPacks.Avalonia/PackIconControlDataFactory.cs create mode 100644 src/IconPacks.Avalonia/PackIconDataIndex.cs diff --git a/src/IconPacks.Avalonia/IconGeometryCache.cs b/src/IconPacks.Avalonia/IconGeometryCache.cs index c38750e..236887a 100644 --- a/src/IconPacks.Avalonia/IconGeometryCache.cs +++ b/src/IconPacks.Avalonia/IconGeometryCache.cs @@ -7,7 +7,17 @@ namespace IconPacks.Avalonia; internal static class IconGeometryCache { - private sealed record Entry(Enum Key, StreamGeometry Geometry); + 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(); diff --git a/src/IconPacks.Avalonia/PackIconControl.cs b/src/IconPacks.Avalonia/PackIconControl.cs index 5a5dc55..d8bc53f 100644 --- a/src/IconPacks.Avalonia/PackIconControl.cs +++ b/src/IconPacks.Avalonia/PackIconControl.cs @@ -51,9 +51,7 @@ protected override void UpdateData() var geometry = IconGeometryCache.GetOrAdd(kind, () => { - var value = (PackIconControlDataFactory.DataIndex.Value?.TryGetValue(kind, out var data) ?? false) - ? data : null; - return value; + return PackIconDataIndex.TryGetPath(kind, out var data) ? data : null; }); Data = geometry; 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/PackIconDataIndex.cs b/src/IconPacks.Avalonia/PackIconDataIndex.cs new file mode 100644 index 0000000..49f7f16 --- /dev/null +++ b/src/IconPacks.Avalonia/PackIconDataIndex.cs @@ -0,0 +1,142 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +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.Core; +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; + +public static class PackIconDataIndex +{ + private static readonly object Gate = new(); + private static readonly Dictionary>> Packs = new(); + + static PackIconDataIndex() + { + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + Register(); + } + + private static void Register() where TKind : struct, Enum + { + var type = typeof(TKind); + lock (Gate) + { + if (!Packs.ContainsKey(type)) + { + Packs[type] = new Lazy>( + () => + { + // Convert IDictionary to IDictionary + var src = PackIconDataFactory.Create(); + var dst = new Dictionary(src.Count); + foreach (var kv in src) + { + dst[kv.Key] = kv.Value; // box TKind to Enum + } + return new ReadOnlyDictionary(dst); + }); + } + } + } + + public static bool TryGetPath(Enum kind, out string path) + { + var type = kind.GetType(); + Lazy> lazyPack; + lock (Gate) + { + Packs.TryGetValue(type, out lazyPack); + } + + if (lazyPack is null) + { + path = null; + return false; + } + + var dict = lazyPack.Value; // triggers per-pack build on first use + return dict.TryGetValue(kind, out path); + } +} \ No newline at end of file From e62f3e5a67e5d8cdec90f3ece41dfdbe80152dc1 Mon Sep 17 00:00:00 2001 From: timunie Date: Sun, 21 Dec 2025 12:15:43 +0100 Subject: [PATCH 5/6] Move GeometryCache to Core. That way we avoid a lot of redundant code. --- ...kIconBootstrapIconsKindToImageConverter.cs | 15 +- .../PackIconBootstrapIcons.cs | 5 +- .../PackIconBootstrapIconsImageExtension.cs | 12 -- .../PackIconBoxIconsKindToImageConverter.cs | 15 +- .../PackIconBoxIcons.cs | 5 +- .../PackIconBoxIconsImageExtension.cs | 12 -- .../PackIconBoxIcons2KindToImageConverter.cs | 15 +- .../PackIconBoxIcons2.cs | 5 +- .../PackIconBoxIcons2ImageExtension.cs | 12 -- ...PackIconCircumIconsKindToImageConverter.cs | 15 +- .../PackIconCircumIcons.cs | 5 +- .../PackIconCircumIconsImageExtension.cs | 12 -- .../PackIconCodiconsKindToImageConverter.cs | 15 +- .../PackIconCodicons.cs | 5 +- .../PackIconCodiconsImageExtension.cs | 12 -- .../PackIconCooliconsKindToImageConverter.cs | 15 +- .../PackIconCoolicons.cs | 5 +- .../PackIconCooliconsImageExtension.cs | 12 -- .../PackIconKindToImageConverterBase.cs | 9 +- .../IconGeometryCache.cs | 49 +++-- .../PackIconControlBase.cs | 3 +- .../PackIconDataFactory.cs | 40 ++-- .../PackIconDataIndex.cs | 49 +++++ .../PackIconImageExtension.cs | 16 +- .../PackIconEntypoKindToImageConverter.cs | 15 +- .../PackIconEntypo.cs | 5 +- .../PackIconEntypoImageExtension.cs | 12 -- .../PackIconEvaIconsKindToImageConverter.cs | 15 +- .../PackIconEvaIcons.cs | 5 +- .../PackIconEvaIconsImageExtension.cs | 12 -- ...ackIconFeatherIconsKindToImageConverter.cs | 15 +- .../PackIconFeatherIcons.cs | 5 +- .../PackIconFeatherIconsImageExtension.cs | 12 -- .../PackIconFileIconsKindToImageConverter.cs | 15 +- .../PackIconFileIcons.cs | 5 +- .../PackIconFileIconsImageExtension.cs | 12 -- ...PackIconFontAwesomeKindToImageConverter.cs | 15 +- .../PackIconFontAwesome.cs | 5 +- .../PackIconFontAwesomeImageExtension.cs | 12 -- ...ackIconFontAwesome5KindToImageConverter.cs | 15 +- .../PackIconFontAwesome5.cs | 5 +- .../PackIconFontAwesome5ImageExtension.cs | 12 -- ...ackIconFontAwesome6KindToImageConverter.cs | 15 +- .../PackIconFontAwesome6.cs | 5 +- .../PackIconFontAwesome6ImageExtension.cs | 12 -- .../PackIconFontaudioKindToImageConverter.cs | 14 +- .../PackIconFontaudio.cs | 5 +- .../PackIconFontaudioImageExtension.cs | 12 -- .../PackIconFontistoKindToImageConverter.cs | 15 +- .../PackIconFontisto.cs | 5 +- .../PackIconFontistoImageExtension.cs | 12 -- ...PackIconForkAwesomeKindToImageConverter.cs | 15 +- .../PackIconForkAwesome.cs | 5 +- .../PackIconForkAwesomeImageExtension.cs | 12 -- .../PackIconGameIconsKindToImageConverter.cs | 15 +- .../PackIconGameIcons.cs | 5 +- .../PackIconGameIconsImageExtension.cs | 12 -- .../PackIconIoniconsKindToImageConverter.cs | 15 +- .../PackIconIonicons.cs | 5 +- .../PackIconIoniconsImageExtension.cs | 12 -- .../PackIconJamIconsKindToImageConverter.cs | 15 +- .../PackIconJamIcons.cs | 5 +- .../PackIconJamIconsImageExtension.cs | 12 -- ...ackIconKeyruneIconsKindToImageConverter.cs | 15 +- .../PackIconKeyruneIcons.cs | 5 +- .../PackIconKeyruneIconsImageExtension.cs | 12 -- .../PackIconLucideKindToImageConverter.cs | 15 +- .../PackIconLucide.cs | 5 +- .../PackIconLucideImageExtension.cs | 12 -- .../PackIconMaterialKindToImageConverter.cs | 15 +- .../PackIconMaterial.cs | 5 +- .../PackIconMaterialImageExtension.cs | 12 -- ...kIconMaterialDesignKindToImageConverter.cs | 15 +- .../PackIconMaterialDesign.cs | 5 +- .../PackIconMaterialDesignImageExtension.cs | 12 -- ...ckIconMaterialLightKindToImageConverter.cs | 15 +- .../PackIconMaterialLight.cs | 5 +- .../PackIconMaterialLightImageExtension.cs | 12 -- ...PackIconMemoryIconsKindToImageConverter.cs | 15 +- .../PackIconMemoryIcons.cs | 5 +- .../PackIconMemoryIconsImageExtension.cs | 12 -- .../PackIconMicronsKindToImageConverter.cs | 15 +- .../PackIconMicrons.cs | 5 +- .../PackIconMicronsImageExtension.cs | 12 -- ...ckIconMingCuteIconsKindToImageConverter.cs | 15 +- .../PackIconMingCuteIcons.cs | 5 +- .../PackIconMingCuteIconsImageExtension.cs | 12 -- .../PackIconModernKindToImageConverter.cs | 15 +- .../PackIconModern.cs | 5 +- .../PackIconModernImageExtension.cs | 12 -- ...PackIconMynaUIIconsKindToImageConverter.cs | 15 +- .../PackIconMynaUIIcons.cs | 5 +- .../PackIconMynaUIIconsImageExtension.cs | 12 -- .../PackIconOcticonsKindToImageConverter.cs | 15 +- .../PackIconOcticons.cs | 5 +- .../PackIconOcticonsImageExtension.cs | 12 -- ...ckIconPhosphorIconsKindToImageConverter.cs | 15 +- .../PackIconPhosphorIcons.cs | 5 +- .../PackIconPhosphorIconsImageExtension.cs | 12 -- .../PackIconPicolIconsKindToImageConverter.cs | 15 +- .../PackIconPicolIcons.cs | 5 +- .../PackIconPicolIconsImageExtension.cs | 12 -- ...ckIconPixelartIconsKindToImageConverter.cs | 15 +- .../PackIconPixelartIcons.cs | 5 +- .../PackIconPixelartIconsImageExtension.cs | 12 -- .../PackIconRPGAwesomeKindToImageConverter.cs | 15 +- .../PackIconRPGAwesome.cs | 5 +- .../PackIconRPGAwesomeImageExtension.cs | 12 -- .../PackIconRadixIconsKindToImageConverter.cs | 15 +- .../PackIconRadixIcons.cs | 5 +- .../PackIconRadixIconsImageExtension.cs | 12 -- .../PackIconRemixIconKindToImageConverter.cs | 15 +- .../PackIconRemixIcon.cs | 5 +- .../PackIconRemixIconImageExtension.cs | 12 -- ...PackIconSimpleIconsKindToImageConverter.cs | 15 +- .../PackIconSimpleIcons.cs | 5 +- .../PackIconSimpleIconsImageExtension.cs | 12 -- .../PackIconTypiconsKindToImageConverter.cs | 15 +- .../PackIconTypicons.cs | 5 +- .../PackIconTypiconsImageExtension.cs | 12 -- .../PackIconUniconsKindToImageConverter.cs | 15 +- .../PackIconUnicons.cs | 5 +- .../PackIconUniconsImageExtension.cs | 12 -- ...PackIconVaadinIconsKindToImageConverter.cs | 15 +- .../PackIconVaadinIcons.cs | 5 +- .../PackIconVaadinIconsImageExtension.cs | 12 -- ...ackIconWeatherIconsKindToImageConverter.cs | 15 +- .../PackIconWeatherIcons.cs | 5 +- .../PackIconWeatherIconsImageExtension.cs | 12 -- .../PackIconZondiconsKindToImageConverter.cs | 15 +- .../PackIconZondicons.cs | 5 +- .../PackIconZondiconsImageExtension.cs | 12 -- .../Converter/PackIconKindToImageConverter.cs | 182 +----------------- src/IconPacks.Avalonia/PackIconControl.cs | 7 +- src/IconPacks.Avalonia/PackIconDataIndex.cs | 142 -------------- .../PackIconImageExtension.cs | 179 ----------------- 136 files changed, 210 insertions(+), 1809 deletions(-) rename src/{IconPacks.Avalonia => IconPacks.Avalonia.Core}/IconGeometryCache.cs (61%) create mode 100644 src/IconPacks.Avalonia.Core/PackIconDataIndex.cs delete mode 100644 src/IconPacks.Avalonia/PackIconDataIndex.cs 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 f792b23..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; @@ -45,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 44e107e..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; @@ -45,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 646d544..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; @@ -45,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 3bd6b6e..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; @@ -45,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 1c0a838..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; @@ -45,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 fa186ab..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; @@ -45,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/IconGeometryCache.cs b/src/IconPacks.Avalonia.Core/IconGeometryCache.cs similarity index 61% rename from src/IconPacks.Avalonia/IconGeometryCache.cs rename to src/IconPacks.Avalonia.Core/IconGeometryCache.cs index 236887a..fb27873 100644 --- a/src/IconPacks.Avalonia/IconGeometryCache.cs +++ b/src/IconPacks.Avalonia.Core/IconGeometryCache.cs @@ -3,10 +3,23 @@ using System.Collections.Generic; using Avalonia.Media; -namespace IconPacks.Avalonia; +namespace IconPacks.Avalonia.Core; -internal static class IconGeometryCache +public static class PackIconGeometryCache { + /// + /// Gets or sets the maximum number of icons to cache. + /// + public static int CacheSize + { + get => field; + set + { + field = value; + TrimUnsafe(field); + } + } = 100; + private sealed class Entry { public Enum Key { get; } @@ -23,12 +36,14 @@ public Entry(Enum key, StreamGeometry geometry) private static readonly Dictionary> _Map = new(); private static readonly LinkedList _Lru = new(); - public static StreamGeometry? GetOrAdd(Enum kind, Func getPathData) + public static StreamGeometry? GetOrAdd(Enum kind) { - var capacity = PackIconControl.GeometryCache; + var capacity = CacheSize; + string? path; if (capacity <= 0) - return CreateGeometry(getPathData); + return PackIconDataIndex.TryGetPath(kind, out path) ? + CreateGeometry(path) : null; // Fast path: try hit lock (_Gate) @@ -42,7 +57,8 @@ public Entry(Enum key, StreamGeometry geometry) } // Parse outside lock (parsing can be expensive) - var created = CreateGeometry(getPathData); + PackIconDataIndex.TryGetPath(kind, out path); + var created = CreateGeometry(path); if (created is null) return null; @@ -65,22 +81,23 @@ public Entry(Enum key, StreamGeometry geometry) } } - private static StreamGeometry? CreateGeometry(Func getPathData) + private static StreamGeometry? CreateGeometry(string? data) { - var data = getPathData(); - if (string.IsNullOrWhiteSpace(data)) - return null; - - return StreamGeometry.Parse(data); + return data is null || string.IsNullOrWhiteSpace(data) + ? null + : StreamGeometry.Parse(data); } private static void TrimUnsafe(int capacity) { - while (_Map.Count > capacity && _Lru.Last is not null) + lock (_Gate) { - var last = _Lru.Last; - _Lru.RemoveLast(); - _Map.Remove(last.Value.Key); + while (_Map.Count > capacity && _Lru.Last is not null) + { + var last = _Lru.Last; + _Lru.RemoveLast(); + _Map.Remove(last.Value.Key); + } } } diff --git a/src/IconPacks.Avalonia.Core/PackIconControlBase.cs b/src/IconPacks.Avalonia.Core/PackIconControlBase.cs index 32a4746..c086746 100644 --- a/src/IconPacks.Avalonia.Core/PackIconControlBase.cs +++ b/src/IconPacks.Avalonia.Core/PackIconControlBase.cs @@ -4,7 +4,6 @@ using Avalonia.Animation; using Avalonia.Animation.Easings; using Avalonia.Controls; -using Avalonia.Controls.Metadata; using Avalonia.Controls.Primitives; using Avalonia.Data; using Avalonia.Media; @@ -147,7 +146,7 @@ public static readonly StyledProperty RotationAngleProperty false, BindingMode.OneWay, null, - (packIcon, value) => + (_, value) => { if (value < 0) { diff --git a/src/IconPacks.Avalonia.Core/PackIconDataFactory.cs b/src/IconPacks.Avalonia.Core/PackIconDataFactory.cs index 6c32401..67e0a92 100644 --- a/src/IconPacks.Avalonia.Core/PackIconDataFactory.cs +++ b/src/IconPacks.Avalonia.Core/PackIconDataFactory.cs @@ -1,25 +1,17 @@ using System; using System.Collections.Generic; -using System.Collections.ObjectModel; using System.Text.Json; 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() - { - DataIndex = new Lazy>(() => new ReadOnlyDictionary(Create())); - } - - public static IDictionary Create() + public static IDictionary Create() where TEnum : struct, Enum { using var iconJsonStream = AssetLoader.Open(new Uri($"avares://{typeof(TEnum).Assembly.GetName().Name}/Resources/Icons.json")); - var stringDict = JsonSerializer.Deserialize>( - iconJsonStream, IconJsonContext.Default.DictionaryStringString) + var stringDict = JsonSerializer.Deserialize( + iconJsonStream, IconJsonContext.Default.DictionaryStringString) ?? new Dictionary(); var result = new Dictionary(stringDict.Count); @@ -33,5 +25,29 @@ public static IDictionary Create() return result; } + + public static IDictionary Create(Type enumType) + { + 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) + { + 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 2cae59a..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; @@ -45,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 ac2ff67..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; @@ -45,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 ed03762..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; @@ -45,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 bbc03d5..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; @@ -45,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 baf144f..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; @@ -45,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 56a6b17..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; @@ -45,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 a878a21..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; @@ -45,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 16ae57e..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; @@ -45,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 559dd69..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; @@ -45,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 66f6b6f..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; @@ -45,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 e4cef7c..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; @@ -45,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 b6f1168..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; @@ -45,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 ab31578..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; @@ -45,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 6224f74..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; @@ -45,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 7dd560d..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; @@ -45,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 8f31b37..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; @@ -45,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 5f5eda1..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; @@ -45,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 7d3f2ba..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; @@ -45,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 4197ba9..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; @@ -45,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 70800f8..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; @@ -45,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 5fc3e90..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; @@ -45,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 da3f51a..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; @@ -45,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 555476b..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; @@ -45,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 4c3029b..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; @@ -45,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 a355adf..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; @@ -45,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 a406140..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; @@ -45,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 290f2b6..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; @@ -45,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 5085cf0..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; @@ -45,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 cdfdab5..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; @@ -45,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 ce1c0aa..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; @@ -45,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 78f9e24..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; @@ -45,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 1f9e824..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; @@ -45,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 f0a9409..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; @@ -45,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 6cde0a0..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; @@ -45,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 c645bd5..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; @@ -45,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 65cdf4b..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; @@ -45,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 d8bc53f..ac8ffbf 100644 --- a/src/IconPacks.Avalonia/PackIconControl.cs +++ b/src/IconPacks.Avalonia/PackIconControl.cs @@ -8,8 +8,6 @@ namespace IconPacks.Avalonia /// public class PackIconControl : PackIconControlBase { - public static int GeometryCache { get; set; } = 1000; - public static readonly StyledProperty KindProperty = AvaloniaProperty.Register(nameof(Kind)); @@ -49,10 +47,7 @@ protected override void UpdateData() return; } - var geometry = IconGeometryCache.GetOrAdd(kind, () => - { - return PackIconDataIndex.TryGetPath(kind, out var data) ? data : null; - }); + var geometry = PackIconGeometryCache.GetOrAdd(Kind); Data = geometry; } diff --git a/src/IconPacks.Avalonia/PackIconDataIndex.cs b/src/IconPacks.Avalonia/PackIconDataIndex.cs deleted file mode 100644 index 49f7f16..0000000 --- a/src/IconPacks.Avalonia/PackIconDataIndex.cs +++ /dev/null @@ -1,142 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -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.Core; -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; - -public static class PackIconDataIndex -{ - private static readonly object Gate = new(); - private static readonly Dictionary>> Packs = new(); - - static PackIconDataIndex() - { - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - Register(); - } - - private static void Register() where TKind : struct, Enum - { - var type = typeof(TKind); - lock (Gate) - { - if (!Packs.ContainsKey(type)) - { - Packs[type] = new Lazy>( - () => - { - // Convert IDictionary to IDictionary - var src = PackIconDataFactory.Create(); - var dst = new Dictionary(src.Count); - foreach (var kv in src) - { - dst[kv.Key] = kv.Value; // box TKind to Enum - } - return new ReadOnlyDictionary(dst); - }); - } - } - } - - public static bool TryGetPath(Enum kind, out string path) - { - var type = kind.GetType(); - Lazy> lazyPack; - lock (Gate) - { - Packs.TryGetValue(type, out lazyPack); - } - - if (lazyPack is null) - { - path = null; - return false; - } - - var dict = lazyPack.Value; // triggers per-pack build on first use - return dict.TryGetValue(kind, out path); - } -} \ 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 From 7c0a56f45c1b8ad5f13d0bfbc5740388117f33ee Mon Sep 17 00:00:00 2001 From: timunie Date: Tue, 13 Jan 2026 12:02:04 +0100 Subject: [PATCH 6/6] Fix: netstandard may fail when using "field" key-word --- src/IconPacks.Avalonia.Core/IconGeometryCache.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/IconPacks.Avalonia.Core/IconGeometryCache.cs b/src/IconPacks.Avalonia.Core/IconGeometryCache.cs index fb27873..b9529fc 100644 --- a/src/IconPacks.Avalonia.Core/IconGeometryCache.cs +++ b/src/IconPacks.Avalonia.Core/IconGeometryCache.cs @@ -7,18 +7,20 @@ 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 => field; + get => _cacheSize; set { - field = value; - TrimUnsafe(field); + _cacheSize = value; + TrimUnsafe(_cacheSize); } - } = 100; + } private sealed class Entry {