committed by
GitHub
2 changed files with 76 additions and 0 deletions
@ -0,0 +1,44 @@ |
|||
#nullable enable |
|||
using System; |
|||
using System.Globalization; |
|||
|
|||
using Avalonia.Data.Converters; |
|||
|
|||
namespace Avalonia.Controls.Converters |
|||
{ |
|||
/// <summary>
|
|||
/// Converts an existing CornerRadius struct to a new CornerRadius struct,
|
|||
/// with filters applied to extract only the specified fields, leaving the others set to 0.
|
|||
/// </summary>
|
|||
public class CornerRadiusFilterConverter : IValueConverter |
|||
{ |
|||
/// <summary>
|
|||
/// Gets or sets the type of the filter applied to the <see cref="CornerRadiusFilterConverter"/>.
|
|||
/// </summary>
|
|||
public CornerRadiusFilterKinds Filter { get; set; } |
|||
|
|||
/// <summary>
|
|||
/// Gets or sets the scale multiplier applied to the <see cref="CornerRadiusFilterConverter"/>.
|
|||
/// </summary>
|
|||
public double Scale { get; set; } = 1; |
|||
|
|||
public object? Convert(object? value, Type targetType, object? parameter, CultureInfo culture) |
|||
{ |
|||
if (!(value is CornerRadius radius)) |
|||
{ |
|||
return value; |
|||
} |
|||
|
|||
return new CornerRadius( |
|||
Filter.HasAllFlags(CornerRadiusFilterKinds.TopLeft) ? radius.TopLeft * Scale : 0, |
|||
Filter.HasAllFlags(CornerRadiusFilterKinds.TopRight) ? radius.TopRight * Scale : 0, |
|||
Filter.HasAllFlags(CornerRadiusFilterKinds.BottomRight) ? radius.BottomRight * Scale : 0, |
|||
Filter.HasAllFlags(CornerRadiusFilterKinds.BottomLeft) ? radius.BottomLeft * Scale : 0); |
|||
} |
|||
|
|||
public object? ConvertBack(object? value, Type targetType, object? parameter, CultureInfo culture) |
|||
{ |
|||
throw new NotImplementedException(); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,32 @@ |
|||
using System; |
|||
|
|||
namespace Avalonia.Controls.Converters |
|||
{ |
|||
/// <summary>
|
|||
/// Defines constants that specify the filter type for a <see cref="CornerRadiusFilterConverter"/> instance.
|
|||
/// </summary>
|
|||
[Flags] |
|||
public enum CornerRadiusFilterKinds |
|||
{ |
|||
/// <summary>
|
|||
/// No filter applied.
|
|||
/// </summary>
|
|||
None, |
|||
/// <summary>
|
|||
/// Filters TopLeft value.
|
|||
/// </summary>
|
|||
TopLeft = 1, |
|||
/// <summary>
|
|||
/// Filters TopRight value.
|
|||
/// </summary>
|
|||
TopRight = 2, |
|||
/// <summary>
|
|||
/// Filters BottomLeft value.
|
|||
/// </summary>
|
|||
BottomLeft = 4, |
|||
/// <summary>
|
|||
/// Filters BottomRight value.
|
|||
/// </summary>
|
|||
BottomRight = 8 |
|||
} |
|||
} |
|||
Loading…
Reference in new issue