From 60b784aa251afd4347c996e0ff614106ffb209d5 Mon Sep 17 00:00:00 2001 From: TheXamlGuy Date: Tue, 16 Jul 2024 20:28:34 +0100 Subject: [PATCH] Added badgeplacement --- .../ContentBadge/ContentBadge.cs | 37 +++++++++++++++++-- .../ContentBadge/ContentBadgePlacement.cs | 10 +++++ 2 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 Toolkit.UI.Controls.Avalonia/ContentBadge/ContentBadgePlacement.cs diff --git a/Toolkit.UI.Controls.Avalonia/ContentBadge/ContentBadge.cs b/Toolkit.UI.Controls.Avalonia/ContentBadge/ContentBadge.cs index 2b0d87a..9b9261b 100644 --- a/Toolkit.UI.Controls.Avalonia/ContentBadge/ContentBadge.cs +++ b/Toolkit.UI.Controls.Avalonia/ContentBadge/ContentBadge.cs @@ -5,7 +5,6 @@ using Avalonia.Media; using Path = Avalonia.Controls.Shapes.Path; namespace Toolkit.UI.Controls.Avalonia; - public class ContentBadge : ContentControl { @@ -15,8 +14,17 @@ public class ContentBadge : public static readonly StyledProperty BadgeSizeProperty = AvaloniaProperty.Register(nameof(BadgeSize), 14); + public static readonly StyledProperty BadgePlacementProperty = + AvaloniaProperty.Register(nameof(BadgePlacement), ContentBadgePlacement.BottomRight); + private ContentControl? badgeContent; + public ContentBadgePlacement BadgePlacement + { + get => GetValue(BadgePlacementProperty); + set => SetValue(BadgePlacementProperty, value); + } + public string? BadgePath { get => GetValue(BadgePathProperty); @@ -44,15 +52,36 @@ public class ContentBadge : double adjustedStrokeWidth = Math.Min(scaleX, scaleY) * 8; - Geometry knockoutGeometry = geometry.GetWidenedGeometry(new Pen(new SolidColorBrush(Colors.Transparent), adjustedStrokeWidth); + Geometry knockoutGeometry = geometry.GetWidenedGeometry(new Pen(new SolidColorBrush(Colors.Transparent), adjustedStrokeWidth)); TransformGroup transformGroup = new(); transformGroup.Children.Add(new ScaleTransform(scaleX, scaleY)); double scaledWidth = knockoutGeometry.Bounds.Width * scaleX; double scaledHeight = knockoutGeometry.Bounds.Height * scaleY; - double offsetX = backgroundWidth - scaledWidth; - double offsetY = backgroundHeight - scaledHeight; + + double offsetX = 0; + double offsetY = 0; + + switch (BadgePlacement) + { + case ContentBadgePlacement.TopLeft: + offsetX = 0; + offsetY = 0; + break; + case ContentBadgePlacement.TopRight: + offsetX = backgroundWidth - scaledWidth; + offsetY = 0; + break; + case ContentBadgePlacement.BottomLeft: + offsetX = 0; + offsetY = backgroundHeight - scaledHeight; + break; + case ContentBadgePlacement.BottomRight: + offsetX = backgroundWidth - scaledWidth; + offsetY = backgroundHeight - scaledHeight; + break; + } transformGroup.Children.Add(new TranslateTransform(offsetX, offsetY)); knockoutGeometry.Transform = transformGroup; diff --git a/Toolkit.UI.Controls.Avalonia/ContentBadge/ContentBadgePlacement.cs b/Toolkit.UI.Controls.Avalonia/ContentBadge/ContentBadgePlacement.cs new file mode 100644 index 0000000..b0b8534 --- /dev/null +++ b/Toolkit.UI.Controls.Avalonia/ContentBadge/ContentBadgePlacement.cs @@ -0,0 +1,10 @@ +namespace Toolkit.UI.Controls.Avalonia; + +public enum ContentBadgePlacement +{ + TopLeft, + TopRight, + BottomLeft, + BottomRight +} +