diff --git a/Pilz.UI.AvaloniaUI.Symbols/Pilz.UI.AvaloniaUI.Symbols.csproj b/Pilz.UI.AvaloniaUI.Symbols/Pilz.UI.AvaloniaUI.Symbols.csproj index a1b72cf..3b0fb9e 100644 --- a/Pilz.UI.AvaloniaUI.Symbols/Pilz.UI.AvaloniaUI.Symbols.csproj +++ b/Pilz.UI.AvaloniaUI.Symbols/Pilz.UI.AvaloniaUI.Symbols.csproj @@ -15,7 +15,7 @@ - + diff --git a/Pilz.UI.AvaloniaUI/Controls/ImageButton.axaml b/Pilz.UI.AvaloniaUI/Controls/ImageButton.axaml new file mode 100644 index 0000000..88cbb61 --- /dev/null +++ b/Pilz.UI.AvaloniaUI/Controls/ImageButton.axaml @@ -0,0 +1,25 @@ + diff --git a/Pilz.UI.AvaloniaUI/Controls/ImageButton.axaml.cs b/Pilz.UI.AvaloniaUI/Controls/ImageButton.axaml.cs new file mode 100644 index 0000000..a367da3 --- /dev/null +++ b/Pilz.UI.AvaloniaUI/Controls/ImageButton.axaml.cs @@ -0,0 +1,55 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Media; + +namespace Pilz.UI.AvaloniaUI.Controls; + +public partial class ImageButton : Button +{ + protected override Type StyleKeyOverride => typeof(Button); + + public ImageButton() + { + InitializeComponent(); + } + + public string? Text + { + get => ButtonText.Text; + set => ButtonText.Text = value; + } + + public IImage? ImageSource + { + get => ButtonImage.Source; + set => ButtonImage.Source = value; + } + + public double ImageWidth + { + get => ButtonImage.Width; + set => ButtonImage.Width = value; + } + + public double ImageHeight + { + get => ButtonImage.Height; + set => ButtonImage.Height = value; + } + + public double ImageQuadSize + { + get => ButtonImage.Width; + set => ButtonImage.Width = ButtonImage.Height = value; + } + + public Size ImageSize + { + get => new(ButtonImage.Width, ButtonImage.Height); + set + { + ButtonImage.Width = value.Width; + ButtonImage.Height = value.Height; + } + } +} diff --git a/Pilz.UI.AvaloniaUI/Controls/ImageSplitButton.axaml b/Pilz.UI.AvaloniaUI/Controls/ImageSplitButton.axaml new file mode 100644 index 0000000..49e8839 --- /dev/null +++ b/Pilz.UI.AvaloniaUI/Controls/ImageSplitButton.axaml @@ -0,0 +1,25 @@ + + + + + + + diff --git a/Pilz.UI.AvaloniaUI/Controls/ImageSplitButton.axaml.cs b/Pilz.UI.AvaloniaUI/Controls/ImageSplitButton.axaml.cs new file mode 100644 index 0000000..9517de2 --- /dev/null +++ b/Pilz.UI.AvaloniaUI/Controls/ImageSplitButton.axaml.cs @@ -0,0 +1,55 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Media; + +namespace Pilz.UI.AvaloniaUI.Controls; + +public partial class ImageSplitButton : SplitButton +{ + protected override Type StyleKeyOverride => typeof(SplitButton); + + public ImageSplitButton() + { + InitializeComponent(); + } + + public string? Text + { + get => ButtonText.Text; + set => ButtonText.Text = value; + } + + public IImage? ImageSource + { + get => ButtonImage.Source; + set => ButtonImage.Source = value; + } + + public double ImageWidth + { + get => ButtonImage.Width; + set => ButtonImage.Width = value; + } + + public double ImageHeight + { + get => ButtonImage.Height; + set => ButtonImage.Height = value; + } + + public double ImageQuadSize + { + get => ButtonImage.Width; + set => ButtonImage.Width = ButtonImage.Height = value; + } + + public Size ImageSize + { + get => new(ButtonImage.Width, ButtonImage.Height); + set + { + ButtonImage.Width = value.Width; + ButtonImage.Height = value.Height; + } + } +} diff --git a/Pilz.UI.AvaloniaUI/Controls/_XmlnsDefinitions.cs b/Pilz.UI.AvaloniaUI/Controls/_XmlnsDefinitions.cs new file mode 100644 index 0000000..cf3edc9 --- /dev/null +++ b/Pilz.UI.AvaloniaUI/Controls/_XmlnsDefinitions.cs @@ -0,0 +1,3 @@ +using Avalonia.Metadata; + +[assembly: XmlnsDefinition("https://git.pilzinsel64.de/pilz-framework/pilz", "Pilz.UI.AvaloniaUI.Controls")] \ No newline at end of file diff --git a/Pilz.UI.AvaloniaUI/Pilz.UI.AvaloniaUI.csproj b/Pilz.UI.AvaloniaUI/Pilz.UI.AvaloniaUI.csproj index 59bba67..074c624 100644 --- a/Pilz.UI.AvaloniaUI/Pilz.UI.AvaloniaUI.csproj +++ b/Pilz.UI.AvaloniaUI/Pilz.UI.AvaloniaUI.csproj @@ -7,10 +7,11 @@ - 1.0.0 + 1.1.3 + @@ -18,4 +19,10 @@ + + + ImageSplitButton.axaml + + + diff --git a/Pilz.UI.AvaloniaUI/Symbols/ISymbolFactory.cs b/Pilz.UI.AvaloniaUI/Symbols/ISymbolFactory.cs index ab9a2b5..62f3ae9 100644 --- a/Pilz.UI.AvaloniaUI/Symbols/ISymbolFactory.cs +++ b/Pilz.UI.AvaloniaUI/Symbols/ISymbolFactory.cs @@ -1,4 +1,5 @@ -using Avalonia.Media; +using Avalonia.Controls; +using Avalonia.Media; using Pilz.UI.Symbols; namespace Pilz.UI.AvaloniaUI.Symbols; @@ -6,5 +7,9 @@ namespace Pilz.UI.AvaloniaUI.Symbols; public interface ISymbolFactory : IBaseSymbolFactory { IImage? GetImageSource(TSymbols image); + Image? GetImage(TSymbols image, double width, double height); + Image? GetImage(TSymbols image, Avalonia.Size size); + Image? GetImage(TSymbols image, System.Drawing.Size size); + Image? GetImage(TSymbols image, SymbolSize size); ISymbolProxy GetImage(TSymbols image); } \ No newline at end of file diff --git a/Pilz.UI.AvaloniaUI/Symbols/ISymbolProxy.cs b/Pilz.UI.AvaloniaUI/Symbols/ISymbolProxy.cs index b5b6b73..eb0baec 100644 --- a/Pilz.UI.AvaloniaUI/Symbols/ISymbolProxy.cs +++ b/Pilz.UI.AvaloniaUI/Symbols/ISymbolProxy.cs @@ -1,8 +1,14 @@ -using Avalonia.Media; +using Avalonia.Controls; +using Avalonia.Media; +using Pilz.UI.Symbols; namespace Pilz.UI.AvaloniaUI.Symbols; public interface ISymbolProxy { IImage? GetImageSource(); + Image? GetImage(double width, double height); + Image? GetImage(Avalonia.Size size); + Image? GetImage(System.Drawing.Size size); + Image? GetImage(SymbolSize size); } diff --git a/Pilz.UI.AvaloniaUI/Symbols/SymbolFactory.cs b/Pilz.UI.AvaloniaUI/Symbols/SymbolFactory.cs index 5b06243..28cd111 100644 --- a/Pilz.UI.AvaloniaUI/Symbols/SymbolFactory.cs +++ b/Pilz.UI.AvaloniaUI/Symbols/SymbolFactory.cs @@ -1,4 +1,5 @@ -using Avalonia.Media; +using Avalonia.Controls; +using Avalonia.Media; using Avalonia.Svg; using Pilz.UI.Symbols; @@ -19,6 +20,31 @@ public abstract class SymbolFactory : BaseSymbolFactory, ISy }; } + public Image? GetImage(TSymbols image, double width, double height) + { + return new Image + { + Source = GetImageSource(image), + Width = width, + Height = height, + }; + } + + public Image? GetImage(TSymbols image, Avalonia.Size size) + { + return GetImage(image, size.Width, size.Height); + } + + public Image? GetImage(TSymbols image, System.Drawing.Size size) + { + return GetImage(image, size.Width, size.Height); + } + + public Image? GetImage(TSymbols image, SymbolSize size) + { + return GetImage(image, ResolveCommonSize(size)); + } + public ISymbolProxy GetImage(TSymbols image) { return new SymbolProxy(this, image); diff --git a/Pilz.UI.AvaloniaUI/Symbols/SymbolProxy.cs b/Pilz.UI.AvaloniaUI/Symbols/SymbolProxy.cs index 7f822f1..0cba3e6 100644 --- a/Pilz.UI.AvaloniaUI/Symbols/SymbolProxy.cs +++ b/Pilz.UI.AvaloniaUI/Symbols/SymbolProxy.cs @@ -1,4 +1,6 @@ -using Avalonia.Media; +using Avalonia.Controls; +using Avalonia.Media; +using Pilz.UI.Symbols; namespace Pilz.UI.AvaloniaUI.Symbols; @@ -8,4 +10,24 @@ public class SymbolProxy(SymbolFactory factory, TSymbols ima { return factory.GetImageSource(image); } + + public Image? GetImage(double width, double height) + { + return factory.GetImage(image, width, height); + } + + public Image? GetImage(Avalonia.Size size) + { + return factory.GetImage(image, size); + } + + public Image? GetImage(System.Drawing.Size size) + { + return factory.GetImage(image, size); + } + + public Image? GetImage(SymbolSize size) + { + return factory.GetImage(image, size); + } }