add Pilz.UI.Telerik & Pilz.UI.Telerik.SymbolFactory

This commit is contained in:
2023-08-29 13:25:11 +02:00
parent 743bd7f19c
commit d0ac4e3b84
17 changed files with 831 additions and 2 deletions

View File

@@ -0,0 +1,10 @@
<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

@@ -0,0 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0-windows</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<RootNamespace>Pilz.UI.Telerik</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="System.Drawing.Common" Version="7.0.0" />
<PackageReference Include="UI.for.WinForms.Common" Version="2023.1.117" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Pilz.UI.Telerik
{
public enum SvgImageSize
{
Default,
Small,
Medium,
Large
}
}

View File

@@ -0,0 +1,87 @@
using System.Drawing;
using System.Reflection;
using Telerik.WinControls;
using Telerik.WinControls.Svg;
namespace Pilz.UI.Telerik
{
public abstract class SymbolFactory<TSvgSymbols> where TSvgSymbols : Enum
{
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.Document.Fill = new SvgColourServer(color);
img.ClearCache();
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.Document.Draw(svg.Width, svg.Height);
}
}
}