|
@@ -2,6 +2,7 @@
|
|
|
using Avalonia;
|
|
|
using Avalonia.Controls;
|
|
|
using Avalonia.Data;
|
|
|
+using Avalonia.Layout;
|
|
|
using PixiEditor.Extensions.CommonApi.FlyUI.Properties;
|
|
|
using PixiEditor.Extensions.Extensions;
|
|
|
using PixiEditor.Extensions.FlyUI.Converters;
|
|
@@ -10,23 +11,24 @@ namespace PixiEditor.Extensions.FlyUI.Elements;
|
|
|
|
|
|
public class Border : SingleChildLayoutElement, IPropertyDeserializable
|
|
|
{
|
|
|
- private Edges _edges;
|
|
|
+ private Edges _thickness;
|
|
|
private Color _color;
|
|
|
+ private Edges cornerRadius;
|
|
|
+ private Edges padding;
|
|
|
+ private Edges margin;
|
|
|
|
|
|
public Color Color { get => _color; set => SetField(ref _color, value); }
|
|
|
- public Edges Edges { get => _edges; set => SetField(ref _edges, value); }
|
|
|
-
|
|
|
- public Border(LayoutElement child = null, Color color = default, Edges edges = default)
|
|
|
- {
|
|
|
- Child = child;
|
|
|
- _color = color;
|
|
|
- _edges = edges;
|
|
|
- }
|
|
|
+ public Edges Thickness { get => _thickness; set => SetField(ref _thickness, value); }
|
|
|
+ public Edges CornerRadius { get => cornerRadius; set => SetField(ref cornerRadius, value); }
|
|
|
+ public Edges Padding { get => padding; set => SetField(ref padding, value); }
|
|
|
+ public Edges Margin { get => margin; set => SetField(ref margin, value); }
|
|
|
|
|
|
public override Control BuildNative()
|
|
|
{
|
|
|
Avalonia.Controls.Border border = new Avalonia.Controls.Border();
|
|
|
|
|
|
+ border.ClipToBounds = true;
|
|
|
+
|
|
|
if (Child != null)
|
|
|
{
|
|
|
border.Child = Child.BuildNative();
|
|
@@ -42,12 +44,36 @@ public class Border : SingleChildLayoutElement, IPropertyDeserializable
|
|
|
Binding edgesBinding = new Binding()
|
|
|
{
|
|
|
Source = this,
|
|
|
- Path = nameof(Edges),
|
|
|
+ Path = nameof(Thickness),
|
|
|
+ Converter = new EdgesToThicknessConverter()
|
|
|
+ };
|
|
|
+
|
|
|
+ Binding cornerRadiusBinding = new Binding()
|
|
|
+ {
|
|
|
+ Source = this,
|
|
|
+ Path = nameof(CornerRadius),
|
|
|
+ Converter = new EdgesToCornerRadiusConverter()
|
|
|
+ };
|
|
|
+
|
|
|
+ Binding paddingBinding = new Binding()
|
|
|
+ {
|
|
|
+ Source = this,
|
|
|
+ Path = nameof(Padding),
|
|
|
+ Converter = new EdgesToThicknessConverter()
|
|
|
+ };
|
|
|
+
|
|
|
+ Binding marginBinding = new Binding()
|
|
|
+ {
|
|
|
+ Source = this,
|
|
|
+ Path = nameof(Margin),
|
|
|
Converter = new EdgesToThicknessConverter()
|
|
|
};
|
|
|
|
|
|
border.Bind(Avalonia.Controls.Border.BorderBrushProperty, colorBinding);
|
|
|
border.Bind(Avalonia.Controls.Border.BorderThicknessProperty, edgesBinding);
|
|
|
+ border.Bind(Avalonia.Controls.Border.CornerRadiusProperty, cornerRadiusBinding);
|
|
|
+ border.Bind(Decorator.PaddingProperty, paddingBinding);
|
|
|
+ border.Bind(Layoutable.MarginProperty, marginBinding);
|
|
|
|
|
|
return border;
|
|
|
}
|
|
@@ -55,12 +81,18 @@ public class Border : SingleChildLayoutElement, IPropertyDeserializable
|
|
|
public IEnumerable<object> GetProperties()
|
|
|
{
|
|
|
yield return Color;
|
|
|
- yield return Edges;
|
|
|
+ yield return Thickness;
|
|
|
+ yield return CornerRadius;
|
|
|
+ yield return Padding;
|
|
|
+ yield return Margin;
|
|
|
}
|
|
|
|
|
|
public void DeserializeProperties(ImmutableList<object> values)
|
|
|
{
|
|
|
Color = (Color)values.ElementAtOrDefault(0, default(Color));
|
|
|
- Edges = (Edges)values.ElementAtOrDefault(1, default(Edges));
|
|
|
+ Thickness = (Edges)values.ElementAtOrDefault(1, default(Edges));
|
|
|
+ CornerRadius = (Edges)values.ElementAtOrDefault(2, default(Edges));
|
|
|
+ Padding = (Edges)values.ElementAtOrDefault(3, default(Edges));
|
|
|
+ Margin = (Edges)values.ElementAtOrDefault(4, default(Edges));
|
|
|
}
|
|
|
}
|