AvaloniaUI

This commit is contained in:
Pilzinsel64
2025-11-06 06:21:35 +01:00
parent ba59f7df79
commit 5650cb8fd6
10 changed files with 149 additions and 1 deletions

View File

@@ -0,0 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<PropertyGroup>
<Version>1.0.0</Version>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Avalonia.Svg" Version="11.3.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Pilz.UI\Pilz.UI.csproj" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,10 @@
using Avalonia.Media;
using Pilz.UI.Symbols;
namespace Pilz.UI.AvaloniaUI.Symbols;
public interface ISymbolFactory<TSymbols> : IBaseSymbolFactory<TSymbols>
{
IImage? GetImageSource(TSymbols image);
ISymbolProxy GetImage(TSymbols image);
}

View File

@@ -0,0 +1,8 @@
using Avalonia.Media;
namespace Pilz.UI.AvaloniaUI.Symbols;
public interface ISymbolProxy
{
IImage? GetImageSource();
}

View File

@@ -0,0 +1,26 @@
using Avalonia.Media;
using Avalonia.Svg;
using Pilz.UI.Symbols;
namespace Pilz.UI.AvaloniaUI.Symbols;
public abstract class SymbolFactory<TSymbols> : BaseSymbolFactory<TSymbols>, ISymbolFactory<TSymbols>
{
public IImage? GetImageSource(TSymbols image)
{
using var stream = GetImageRessourceStream(image);
if (stream is null)
return null;
return new SvgImage
{
Source = SvgSource.Load(stream),
};
}
public ISymbolProxy GetImage(TSymbols image)
{
return new SymbolProxy<TSymbols>(this, image);
}
}

View File

@@ -0,0 +1,11 @@
using Avalonia.Media;
namespace Pilz.UI.AvaloniaUI.Symbols;
public class SymbolProxy<TSymbols>(SymbolFactory<TSymbols> factory, TSymbols image) : ISymbolProxy
{
public IImage? GetImageSource()
{
return factory.GetImageSource(image);
}
}