mirror of
https://gitcode.com/gh_mirrors/se/Semi.Avalonia
synced 2026-03-03 00:00:55 +08:00
Merge pull request #504 from irihitech/icon
extract icon resources & resolve AOT issue
This commit is contained in:
@@ -1,9 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Markup.Xaml;
|
||||
using Avalonia.Media;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
|
||||
@@ -11,8 +9,7 @@ namespace Semi.Avalonia.Demo.ViewModels;
|
||||
|
||||
public partial class IconDemoViewModel : ObservableObject
|
||||
{
|
||||
private readonly IResourceDictionary? _resources =
|
||||
AvaloniaXamlLoader.Load(new Uri("avares://Semi.Avalonia/Themes/Shared/Icon.axaml")) as ResourceDictionary;
|
||||
private readonly IResourceDictionary? _resources = new Icons();
|
||||
|
||||
private readonly Dictionary<string, IconItem> _filledIcons = new();
|
||||
private readonly Dictionary<string, IconItem> _strokedIcons = new();
|
||||
@@ -26,22 +23,27 @@ public partial class IconDemoViewModel : ObservableObject
|
||||
{
|
||||
if (_resources is null) return;
|
||||
|
||||
foreach (var key in _resources.Keys)
|
||||
foreach (var provider in _resources.MergedDictionaries)
|
||||
{
|
||||
if (_resources[key] is not Geometry geometry) continue;
|
||||
var icon = new IconItem { ResourceKey = key.ToString(), Geometry = geometry };
|
||||
if (provider is not ResourceDictionary dic) continue;
|
||||
|
||||
if (key.ToString().EndsWith("Stroked"))
|
||||
foreach (var key in dic.Keys)
|
||||
{
|
||||
_strokedIcons[key.ToString()] = icon;
|
||||
}
|
||||
else
|
||||
{
|
||||
_filledIcons[key.ToString()] = icon;
|
||||
}
|
||||
if (dic[key] is not Geometry geometry) continue;
|
||||
var icon = new IconItem
|
||||
{
|
||||
ResourceKey = key.ToString(),
|
||||
Geometry = geometry
|
||||
};
|
||||
|
||||
OnSearchTextChanged(string.Empty);
|
||||
if (key.ToString().EndsWith("Stroked"))
|
||||
_strokedIcons[key.ToString().ToLowerInvariant()] = icon;
|
||||
else
|
||||
_filledIcons[key.ToString().ToLowerInvariant()] = icon;
|
||||
}
|
||||
}
|
||||
|
||||
OnSearchTextChanged(string.Empty);
|
||||
}
|
||||
|
||||
partial void OnSearchTextChanged(string? value)
|
||||
@@ -49,16 +51,15 @@ public partial class IconDemoViewModel : ObservableObject
|
||||
var search = value?.ToLowerInvariant() ?? string.Empty;
|
||||
|
||||
FilteredFilledIcons.Clear();
|
||||
foreach (var icon in _filledIcons.Values.Where(i => i.ResourceKey?.ToLowerInvariant().Contains(search) == true))
|
||||
foreach (var pair in _filledIcons.Where(i => i.Key.Contains(search)))
|
||||
{
|
||||
FilteredFilledIcons.Add(icon);
|
||||
FilteredFilledIcons.Add(pair.Value);
|
||||
}
|
||||
|
||||
FilteredStrokedIcons.Clear();
|
||||
foreach (var icon in
|
||||
_strokedIcons.Values.Where(i => i.ResourceKey?.ToLowerInvariant().Contains(search) == true))
|
||||
foreach (var pair in _strokedIcons.Where(i => i.Key.Contains(search)))
|
||||
{
|
||||
FilteredStrokedIcons.Add(icon);
|
||||
FilteredStrokedIcons.Add(pair.Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
14
src/Semi.Avalonia/Icons/IconPatch.axaml
Normal file
14
src/Semi.Avalonia/Icons/IconPatch.axaml
Normal file
@@ -0,0 +1,14 @@
|
||||
<ResourceDictionary xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<StreamGeometry x:Key="SemiIconCaretDown">
|
||||
m17.55 15.66-4.8 5.48a1 1 0 0 1-1.5 0l-4.8-5.48A1 1 0 0 1 7.2 14h9.6a1 1 0 0 1 .75 1.66Z
|
||||
</StreamGeometry>
|
||||
<StreamGeometry x:Key="SemiIconCaretUp">
|
||||
m6.45 8.34 4.8-5.48a1 1 0 0 1 1.5 0l4.8 5.48A1 1 0 0 1 16.8 10H7.2a1 1 0 0 1-.75-1.66Z
|
||||
</StreamGeometry>
|
||||
<StreamGeometry x:Key="SemiIconCheckBoxIndeterminate">
|
||||
M5 12.5c0-.83.67-1.5 1.5-1.5h11a1.5 1.5 0 0 1 0 3h-11A1.5 1.5 0 0 1 5 12.5Z
|
||||
</StreamGeometry>
|
||||
<StreamGeometry x:Key="SemiIconCheckBoxTick">
|
||||
M17.41 7.3c.66.51.78 1.45.28 2.11l-6.5 8.5a1.5 1.5 0 0 1-2.37.01l-3.5-4.5a1.5 1.5 0 1 1 2.36-1.84L10 14.54l5.32-6.95a1.5 1.5 0 0 1 2.1-.28Z
|
||||
</StreamGeometry>
|
||||
</ResourceDictionary>
|
||||
6
src/Semi.Avalonia/Icons/_index.axaml
Normal file
6
src/Semi.Avalonia/Icons/_index.axaml
Normal file
@@ -0,0 +1,6 @@
|
||||
<ResourceDictionary x:Class="Semi.Avalonia.Icons" xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<ResourceDictionary.MergedDictionaries>
|
||||
<ResourceInclude Source="avares://Semi.Avalonia/Icons/Icon.axaml" />
|
||||
<ResourceInclude Source="avares://Semi.Avalonia/Icons/IconPatch.axaml" />
|
||||
</ResourceDictionary.MergedDictionaries>
|
||||
</ResourceDictionary>
|
||||
5
src/Semi.Avalonia/Icons/_index.axaml.cs
Normal file
5
src/Semi.Avalonia/Icons/_index.axaml.cs
Normal file
@@ -0,0 +1,5 @@
|
||||
using Avalonia.Controls;
|
||||
|
||||
namespace Semi.Avalonia;
|
||||
|
||||
public class Icons : ResourceDictionary;
|
||||
@@ -10,7 +10,8 @@
|
||||
<ResourceInclude Source="avares://Semi.Avalonia/Themes/Base.axaml" />
|
||||
<ResourceInclude Source="avares://Semi.Avalonia/Themes/Shared/_index.axaml" />
|
||||
<ResourceInclude Source="avares://Semi.Avalonia/Locale/zh-cn.axaml" />
|
||||
<ResourceInclude Source="avares://Semi.Avalonia/Icons/_index.axaml" />
|
||||
</ResourceDictionary.MergedDictionaries>
|
||||
</ResourceDictionary>
|
||||
</Styles.Resources>
|
||||
</Styles>
|
||||
</Styles>
|
||||
@@ -15,6 +15,7 @@
|
||||
<ResourceInclude Source="avares://Semi.Avalonia/Themes/Base.axaml" />
|
||||
<ResourceInclude Source="avares://Semi.Avalonia/Themes/Shared/_index.axaml" />
|
||||
<ResourceInclude Source="avares://Semi.Avalonia/Locale/zh-cn.axaml" />
|
||||
<ResourceInclude Source="avares://Semi.Avalonia/Icons/_index.axaml" />
|
||||
</ResourceDictionary.MergedDictionaries>
|
||||
</ResourceDictionary>
|
||||
</Styles.Resources>
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
<ResourceDictionary xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<StaticResource x:Key="SemiIconCaretDown" ResourceKey="SemiIconCaretdown" />
|
||||
<StaticResource x:Key="SemiIconCaretUp" ResourceKey="SemiIconCaretup" />
|
||||
<StaticResource x:Key="SemiIconCheckBoxIndeterminate" ResourceKey="SemiIconCheckboxIndeterminate" />
|
||||
<StaticResource x:Key="SemiIconCheckBoxTick" ResourceKey="SemiIconCheckboxTick" />
|
||||
</ResourceDictionary>
|
||||
@@ -1,8 +1,6 @@
|
||||
<ResourceDictionary xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
|
||||
<ResourceDictionary.MergedDictionaries>
|
||||
<ResourceInclude Source="avares://Semi.Avalonia/Themes/Shared/Palette.axaml" />
|
||||
<ResourceInclude Source="avares://Semi.Avalonia/Themes/Shared/Icon.axaml" />
|
||||
<ResourceInclude Source="avares://Semi.Avalonia/Themes/Shared/IconPatch.axaml" />
|
||||
<!-- Controls -->
|
||||
<ResourceInclude Source="avares://Semi.Avalonia/Themes/Shared/AdornerLayer.axaml" />
|
||||
<ResourceInclude Source="avares://Semi.Avalonia/Themes/Shared/AutoCompleteBox.axaml" />
|
||||
|
||||
Reference in New Issue
Block a user