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:
@@ -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>
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
|
||||||
@@ -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>
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
namespace Pilz.UI.Telerik;
|
|
||||||
|
|
||||||
public enum SvgImageSize
|
|
||||||
{
|
|
||||||
Default,
|
|
||||||
Small,
|
|
||||||
Medium,
|
|
||||||
Large
|
|
||||||
}
|
|
||||||
@@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
14
Pilz.UI.Telerik/Symbols/IRadSymbolFactory.cs
Normal file
14
Pilz.UI.Telerik/Symbols/IRadSymbolFactory.cs
Normal 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);
|
||||||
|
}
|
||||||
55
Pilz.UI.Telerik/Symbols/RadSymbolFactory.cs
Normal file
55
Pilz.UI.Telerik/Symbols/RadSymbolFactory.cs
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
||||||
12
Pilz.UI/Symbols/ISymbolFactory.cs
Normal file
12
Pilz.UI/Symbols/ISymbolFactory.cs
Normal 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);
|
||||||
|
}
|
||||||
53
Pilz.UI/Symbols/SymbolFactory.cs
Normal file
53
Pilz.UI/Symbols/SymbolFactory.cs
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
21
Pilz.UI/Symbols/SymbolSize.cs
Normal file
21
Pilz.UI/Symbols/SymbolSize.cs
Normal 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
|
||||||
|
}
|
||||||
14
Pilz.sln
14
Pilz.sln
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user