rework SymbolFactory

- rename & move to Pilz.UI..Telerik.Symbols.RadSymbolFactory
- make default implementaiton available at Pilz.UI.Symbols.SymbolFactory
- add interfaces
This commit is contained in:
Schedel Pascal
2024-07-08 06:26:05 +02:00
parent f1204f686a
commit 1b448c3838
11 changed files with 157 additions and 134 deletions

View File

@@ -9,7 +9,6 @@
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\Pilz.Plugins.Advanced.UI\Pilz.Plugins.Advanced.UI.csproj" /> <ProjectReference Include="..\Pilz.Plugins.Advanced.UI\Pilz.Plugins.Advanced.UI.csproj" />
<ProjectReference Include="..\Pilz.UI.Telerik.SymbolFactory\Pilz.UI.Telerik.SymbolFactory.csproj" />
<ProjectReference Include="..\Pilz.UI.Telerik\Pilz.UI.Telerik.csproj" /> <ProjectReference Include="..\Pilz.UI.Telerik\Pilz.UI.Telerik.csproj" />
</ItemGroup> </ItemGroup>

View File

@@ -1,10 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<PackageId>Pilz.UI.Telerik</PackageId>
</PropertyGroup>
</Project>

View File

@@ -1,20 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net8.0-windows</TargetFrameworks>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<RootNamespace>Pilz.UI.Telerik</RootNamespace>
</PropertyGroup>
<PropertyGroup>
<Version>2.0.4</Version>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="System.Drawing.Common" Version="8.0.4" />
<PackageReference Include="Telerik.UI.for.WinForms.AllControls" Version="2024.2.514">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Pilz.UI.Telerik\Pilz.UI.Telerik.csproj" />
</ItemGroup>
</Project>

View File

@@ -1,9 +0,0 @@
namespace Pilz.UI.Telerik;
public enum SvgImageSize
{
Default,
Small,
Medium,
Large
}

View File

@@ -1,82 +0,0 @@
using System.Drawing;
using System.Reflection;
using Telerik.WinControls;
namespace Pilz.UI.Telerik;
public abstract class SymbolFactory<TSvgSymbols>
{
public abstract string GetSvgImageRessourcePath(TSvgSymbols svgImage);
public abstract Assembly GetSvgImageResourceAssembly();
protected virtual Size ResolveCommonSize(SvgImageSize size)
{
return size switch
{
SvgImageSize.Small => new Size(16, 16),
SvgImageSize.Medium => new Size(20, 20),
SvgImageSize.Large => new Size(32, 32),
_ => Size.Empty,
};
}
public virtual Stream? GetSvgImageRessourceStream(TSvgSymbols svgImage)
{
var asm = GetSvgImageResourceAssembly();
var path = GetSvgImageRessourcePath(svgImage);
return asm.GetManifestResourceStream(path);
}
public virtual RadSvgImage GetSvgImage(TSvgSymbols svgImage, SvgImageSize size)
{
return GetSvgImage(svgImage, ResolveCommonSize(size));
}
public virtual RadSvgImage GetSvgImage(TSvgSymbols svgImage, Size size)
{
using var stream = GetSvgImageRessourceStream(svgImage);
var img = RadSvgImage.FromStream(stream);
if (!size.IsEmpty)
img.Size = size;
return img;
}
public virtual RadSvgImage GetSvgImageColored(TSvgSymbols svgImage, SvgImageSize size, Color color)
{
return GetSvgImageColored(svgImage, ResolveCommonSize(size), color);
}
public virtual RadSvgImage GetSvgImageColored(TSvgSymbols svgImage, Size size, Color color)
{
var img = GetSvgImage(svgImage, size);
img.ApplyColor(color);
return img;
}
public virtual Image GetImage(TSvgSymbols svgImage, SvgImageSize size)
{
return GetImage(svgImage, ResolveCommonSize(size));
}
public virtual Image GetImage(TSvgSymbols svgImage, Size size)
{
return GetImageFromSvg(GetSvgImage(svgImage, size));
}
public virtual Image GetImageColored(TSvgSymbols svgImage, SvgImageSize size, Color color)
{
return GetImageColored(svgImage, ResolveCommonSize(size), color);
}
public virtual Image GetImageColored(TSvgSymbols svgImage, Size size, Color color)
{
return GetImageFromSvg(GetSvgImageColored(svgImage, size, color));
}
public virtual Image GetImageFromSvg(RadSvgImage svg)
{
return svg.ToImage();
}
}

View File

@@ -0,0 +1,14 @@
using Pilz.UI.Symbols;
using Telerik.WinControls;
namespace Pilz.UI.Telerik.Symbols;
public interface IRadSymbolFactory<TSymbols> : ISymbolFactory<TSymbols>
{
Image GetImageColored(TSymbols svgImage, Size size, Color color);
Image GetImageColored(TSymbols svgImage, SymbolSize size, Color color);
Image GetImageFromSvg(RadSvgImage svg);
RadSvgImage GetSvgImage(TSymbols svgImage, Size size);
RadSvgImage GetSvgImageColored(TSymbols svgImage, Size size, Color color);
RadSvgImage GetSvgImageColored(TSymbols svgImage, SymbolSize size, Color color);
}

View File

@@ -0,0 +1,55 @@
using Pilz.UI.Symbols;
using Telerik.WinControls;
namespace Pilz.UI.Telerik.Symbols;
public abstract class RadSymbolFactory<TSymbols> : SymbolFactory<TSymbols>, IRadSymbolFactory<TSymbols>
{
public virtual RadSvgImage GetSvgImage(TSymbols svgImage, Size size)
{
using var stream = GetImageRessourceStream(svgImage);
var img = RadSvgImage.FromStream(stream);
if (!size.IsEmpty)
img.Size = size;
return img;
}
public virtual RadSvgImage GetSvgImageColored(TSymbols svgImage, SymbolSize size, Color color)
{
return GetSvgImageColored(svgImage, ResolveCommonSize(size), color);
}
public virtual RadSvgImage GetSvgImageColored(TSymbols svgImage, Size size, Color color)
{
var img = GetSvgImage(svgImage, size);
img.ApplyColor(color);
return img;
}
public override Image GetImage(TSymbols svgImage, SymbolSize size)
{
return GetImage(svgImage, ResolveCommonSize(size));
}
public override Image GetImage(TSymbols svgImage, Size size)
{
return GetImageFromSvg(GetSvgImage(svgImage, size));
}
public virtual Image GetImageColored(TSymbols svgImage, SymbolSize size, Color color)
{
return GetImageColored(svgImage, ResolveCommonSize(size), color);
}
public virtual Image GetImageColored(TSymbols svgImage, Size size, Color color)
{
return GetImageFromSvg(GetSvgImageColored(svgImage, size, color));
}
public virtual Image GetImageFromSvg(RadSvgImage svg)
{
return svg.ToImage();
}
}

View File

@@ -0,0 +1,12 @@
using System.Reflection;
namespace Pilz.UI.Symbols;
public interface ISymbolFactory<TSymbols>
{
Image? GetImage(TSymbols svgImage, Size size);
Image? GetImage(TSymbols svgImage, SymbolSize size);
Assembly GetImageResourceAssembly();
string GetImageRessourcePath(TSymbols svgImage);
Stream? GetImageRessourceStream(TSymbols svgImage);
}

View File

@@ -0,0 +1,53 @@
using System.Reflection;
namespace Pilz.UI.Symbols;
public abstract class SymbolFactory<TSymbols> : ISymbolFactory<TSymbols>
{
public abstract string GetImageRessourcePath(TSymbols svgImage);
public abstract Assembly GetImageResourceAssembly();
protected virtual Size ResolveCommonSize(SymbolSize size)
{
return size switch
{
SymbolSize.Small => new Size(16, 16),
SymbolSize.Medium => new Size(20, 20),
SymbolSize.Large => new Size(32, 32),
_ => Size.Empty,
};
}
public virtual Stream? GetImageRessourceStream(TSymbols svgImage)
{
var asm = GetImageResourceAssembly();
var path = GetImageRessourcePath(svgImage);
return asm.GetManifestResourceStream(path);
}
public virtual Image? GetImage(TSymbols svgImage, SymbolSize size)
{
return GetImage(svgImage, ResolveCommonSize(size));
}
public virtual Image? GetImage(TSymbols svgImage, Size size)
{
using var stream = GetImageRessourceStream(svgImage);
if (stream is null)
return null;
var img = Image.FromStream(stream);
if (!size.IsEmpty)
{
var img2 = new Bitmap(size.Width, size.Height);
using var g = Graphics.FromImage(img2);
g.DrawImage(img2, 0, 0, size.Width, size.Height);
img.Dispose();
img = img2;
}
return img;
}
}

View File

@@ -0,0 +1,21 @@
namespace Pilz.UI.Symbols;
public enum SymbolSize
{
/// <summary>
/// Don't resize and just returns the original size.
/// </summary>
Default,
/// <summary>
/// Resizes the symbol to 16 x 16 pixels.
/// </summary>
Small,
/// <summary>
/// Resizes the symbol to 20 x 20 pixels.
/// </summary>
Medium,
/// <summary>
/// Resizes the symbol to 32 x 32 pixels.
/// </summary>
Large
}

View File

@@ -29,8 +29,6 @@ Project("{778DAE3C-4631-46EA-AA77-85C1314464D9}") = "Pilz.Networking", "Pilz.Net
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.Cryptography", "Pilz.Cryptography\Pilz.Cryptography.csproj", "{3F5988E6-439E-4A9D-B2C6-47EFFB161AC6}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.Cryptography", "Pilz.Cryptography\Pilz.Cryptography.csproj", "{3F5988E6-439E-4A9D-B2C6-47EFFB161AC6}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.UI.Telerik.SymbolFactory", "Pilz.UI.Telerik.SymbolFactory\Pilz.UI.Telerik.SymbolFactory.csproj", "{2B3B8161-29FF-4526-9082-4410AB5144A5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.UI.Telerik", "Pilz.UI.Telerik\Pilz.UI.Telerik.csproj", "{DF674119-CC28-40AA-968F-1E23D184A491}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.UI.Telerik", "Pilz.UI.Telerik\Pilz.UI.Telerik.csproj", "{DF674119-CC28-40AA-968F-1E23D184A491}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.Networking.CloudProviders.Nextcloud", "Pilz.Networking.CloudProviders.Nextcloud\Pilz.Networking.CloudProviders.Nextcloud.csproj", "{A91E966B-3A82-4F32-A703-2FC1C7654FD1}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.Networking.CloudProviders.Nextcloud", "Pilz.Networking.CloudProviders.Nextcloud\Pilz.Networking.CloudProviders.Nextcloud.csproj", "{A91E966B-3A82-4F32-A703-2FC1C7654FD1}"
@@ -41,9 +39,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.Plugins.Advanced", "Pi
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.Gaming.Minecraft", "Pilz.Gaming.Minecraft\Pilz.Gaming.Minecraft.csproj", "{B285DA24-39C9-4BA2-AF3D-A1A05737268B}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.Gaming.Minecraft", "Pilz.Gaming.Minecraft\Pilz.Gaming.Minecraft.csproj", "{B285DA24-39C9-4BA2-AF3D-A1A05737268B}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pilz.Plugins.Advanced.UI", "Pilz.Plugins.Advanced.UI\Pilz.Plugins.Advanced.UI.csproj", "{5030C047-B04B-4BA7-8CEF-3B6C3F3A2C59}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.Plugins.Advanced.UI", "Pilz.Plugins.Advanced.UI\Pilz.Plugins.Advanced.UI.csproj", "{5030C047-B04B-4BA7-8CEF-3B6C3F3A2C59}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Pilz.Plugins.Advanced.UI.Telerik", "Pilz.Plugins.Advanced.UI.Telerik\Pilz.Plugins.Advanced.UI.Telerik.csproj", "{0A837BD6-A19C-4A05-A57D-CBB0CD64B244}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.Plugins.Advanced.UI.Telerik", "Pilz.Plugins.Advanced.UI.Telerik\Pilz.Plugins.Advanced.UI.Telerik.csproj", "{0A837BD6-A19C-4A05-A57D-CBB0CD64B244}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -157,14 +155,6 @@ Global
{3F5988E6-439E-4A9D-B2C6-47EFFB161AC6}.Release|Any CPU.Build.0 = Release|Any CPU {3F5988E6-439E-4A9D-B2C6-47EFFB161AC6}.Release|Any CPU.Build.0 = Release|Any CPU
{3F5988E6-439E-4A9D-B2C6-47EFFB161AC6}.Release|x86.ActiveCfg = Release|Any CPU {3F5988E6-439E-4A9D-B2C6-47EFFB161AC6}.Release|x86.ActiveCfg = Release|Any CPU
{3F5988E6-439E-4A9D-B2C6-47EFFB161AC6}.Release|x86.Build.0 = Release|Any CPU {3F5988E6-439E-4A9D-B2C6-47EFFB161AC6}.Release|x86.Build.0 = Release|Any CPU
{2B3B8161-29FF-4526-9082-4410AB5144A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2B3B8161-29FF-4526-9082-4410AB5144A5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2B3B8161-29FF-4526-9082-4410AB5144A5}.Debug|x86.ActiveCfg = Debug|Any CPU
{2B3B8161-29FF-4526-9082-4410AB5144A5}.Debug|x86.Build.0 = Debug|Any CPU
{2B3B8161-29FF-4526-9082-4410AB5144A5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2B3B8161-29FF-4526-9082-4410AB5144A5}.Release|Any CPU.Build.0 = Release|Any CPU
{2B3B8161-29FF-4526-9082-4410AB5144A5}.Release|x86.ActiveCfg = Release|Any CPU
{2B3B8161-29FF-4526-9082-4410AB5144A5}.Release|x86.Build.0 = Release|Any CPU
{DF674119-CC28-40AA-968F-1E23D184A491}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DF674119-CC28-40AA-968F-1E23D184A491}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DF674119-CC28-40AA-968F-1E23D184A491}.Debug|Any CPU.Build.0 = Debug|Any CPU {DF674119-CC28-40AA-968F-1E23D184A491}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DF674119-CC28-40AA-968F-1E23D184A491}.Debug|x86.ActiveCfg = Debug|Any CPU {DF674119-CC28-40AA-968F-1E23D184A491}.Debug|x86.ActiveCfg = Debug|Any CPU