diff --git a/Pilz.Plugins.Advanced.UI.Telerik/Pilz.Plugins.Advanced.UI.Telerik.csproj b/Pilz.Plugins.Advanced.UI.Telerik/Pilz.Plugins.Advanced.UI.Telerik.csproj index 43c85fe..fb2d732 100644 --- a/Pilz.Plugins.Advanced.UI.Telerik/Pilz.Plugins.Advanced.UI.Telerik.csproj +++ b/Pilz.Plugins.Advanced.UI.Telerik/Pilz.Plugins.Advanced.UI.Telerik.csproj @@ -9,7 +9,6 @@ - diff --git a/Pilz.UI.Telerik.SymbolFactory/Pilz - Backup.UI.Telerik.SymbolFactory.csproj b/Pilz.UI.Telerik.SymbolFactory/Pilz - Backup.UI.Telerik.SymbolFactory.csproj deleted file mode 100644 index 4ed218b..0000000 --- a/Pilz.UI.Telerik.SymbolFactory/Pilz - Backup.UI.Telerik.SymbolFactory.csproj +++ /dev/null @@ -1,10 +0,0 @@ - - - - net6.0 - enable - enable - Pilz.UI.Telerik - - - diff --git a/Pilz.UI.Telerik.SymbolFactory/Pilz.UI.Telerik.SymbolFactory.csproj b/Pilz.UI.Telerik.SymbolFactory/Pilz.UI.Telerik.SymbolFactory.csproj deleted file mode 100644 index 2e31a24..0000000 --- a/Pilz.UI.Telerik.SymbolFactory/Pilz.UI.Telerik.SymbolFactory.csproj +++ /dev/null @@ -1,20 +0,0 @@ - - - net8.0-windows - enable - enable - Pilz.UI.Telerik - - - 2.0.4 - - - - - all - - - - - - \ No newline at end of file diff --git a/Pilz.UI.Telerik.SymbolFactory/SvgImageSize.cs b/Pilz.UI.Telerik.SymbolFactory/SvgImageSize.cs deleted file mode 100644 index 90313b8..0000000 --- a/Pilz.UI.Telerik.SymbolFactory/SvgImageSize.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Pilz.UI.Telerik; - -public enum SvgImageSize -{ - Default, - Small, - Medium, - Large -} diff --git a/Pilz.UI.Telerik.SymbolFactory/SymbolFactory.cs b/Pilz.UI.Telerik.SymbolFactory/SymbolFactory.cs deleted file mode 100644 index c0e452f..0000000 --- a/Pilz.UI.Telerik.SymbolFactory/SymbolFactory.cs +++ /dev/null @@ -1,82 +0,0 @@ -using System.Drawing; -using System.Reflection; -using Telerik.WinControls; - -namespace Pilz.UI.Telerik; - -public abstract class SymbolFactory -{ - 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(); - } -} \ No newline at end of file diff --git a/Pilz.UI.Telerik/Symbols/IRadSymbolFactory.cs b/Pilz.UI.Telerik/Symbols/IRadSymbolFactory.cs new file mode 100644 index 0000000..2a2d0c7 --- /dev/null +++ b/Pilz.UI.Telerik/Symbols/IRadSymbolFactory.cs @@ -0,0 +1,14 @@ +using Pilz.UI.Symbols; +using Telerik.WinControls; + +namespace Pilz.UI.Telerik.Symbols; + +public interface IRadSymbolFactory : ISymbolFactory +{ + 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); +} \ No newline at end of file diff --git a/Pilz.UI.Telerik/Symbols/RadSymbolFactory.cs b/Pilz.UI.Telerik/Symbols/RadSymbolFactory.cs new file mode 100644 index 0000000..4425958 --- /dev/null +++ b/Pilz.UI.Telerik/Symbols/RadSymbolFactory.cs @@ -0,0 +1,55 @@ +using Pilz.UI.Symbols; +using Telerik.WinControls; + +namespace Pilz.UI.Telerik.Symbols; + +public abstract class RadSymbolFactory : SymbolFactory, IRadSymbolFactory +{ + 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(); + } +} \ No newline at end of file diff --git a/Pilz.UI/Symbols/ISymbolFactory.cs b/Pilz.UI/Symbols/ISymbolFactory.cs new file mode 100644 index 0000000..a6bf507 --- /dev/null +++ b/Pilz.UI/Symbols/ISymbolFactory.cs @@ -0,0 +1,12 @@ +using System.Reflection; + +namespace Pilz.UI.Symbols; + +public interface ISymbolFactory +{ + Image? GetImage(TSymbols svgImage, Size size); + Image? GetImage(TSymbols svgImage, SymbolSize size); + Assembly GetImageResourceAssembly(); + string GetImageRessourcePath(TSymbols svgImage); + Stream? GetImageRessourceStream(TSymbols svgImage); +} \ No newline at end of file diff --git a/Pilz.UI/Symbols/SymbolFactory.cs b/Pilz.UI/Symbols/SymbolFactory.cs new file mode 100644 index 0000000..c87f7fc --- /dev/null +++ b/Pilz.UI/Symbols/SymbolFactory.cs @@ -0,0 +1,53 @@ +using System.Reflection; + +namespace Pilz.UI.Symbols; + +public abstract class SymbolFactory : ISymbolFactory +{ + 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; + } +} diff --git a/Pilz.UI/Symbols/SymbolSize.cs b/Pilz.UI/Symbols/SymbolSize.cs new file mode 100644 index 0000000..5a5c0cc --- /dev/null +++ b/Pilz.UI/Symbols/SymbolSize.cs @@ -0,0 +1,21 @@ +namespace Pilz.UI.Symbols; + +public enum SymbolSize +{ + /// + /// Don't resize and just returns the original size. + /// + Default, + /// + /// Resizes the symbol to 16 x 16 pixels. + /// + Small, + /// + /// Resizes the symbol to 20 x 20 pixels. + /// + Medium, + /// + /// Resizes the symbol to 32 x 32 pixels. + /// + Large +} diff --git a/Pilz.sln b/Pilz.sln index a106e24..6c52fbf 100644 --- a/Pilz.sln +++ b/Pilz.sln @@ -29,8 +29,6 @@ Project("{778DAE3C-4631-46EA-AA77-85C1314464D9}") = "Pilz.Networking", "Pilz.Net EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.Cryptography", "Pilz.Cryptography\Pilz.Cryptography.csproj", "{3F5988E6-439E-4A9D-B2C6-47EFFB161AC6}" 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}" 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}" @@ -41,9 +39,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.Plugins.Advanced", "Pi EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Pilz.Gaming.Minecraft", "Pilz.Gaming.Minecraft\Pilz.Gaming.Minecraft.csproj", "{B285DA24-39C9-4BA2-AF3D-A1A05737268B}" 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 -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 Global 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|x86.ActiveCfg = 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.Build.0 = Debug|Any CPU {DF674119-CC28-40AA-968F-1E23D184A491}.Debug|x86.ActiveCfg = Debug|Any CPU