diff --git a/src/Ursa/Controls/Dialog/DialogBox.cs b/src/Ursa/Controls/Dialog/DialogBox.cs new file mode 100644 index 0000000..996ee88 --- /dev/null +++ b/src/Ursa/Controls/Dialog/DialogBox.cs @@ -0,0 +1,20 @@ +using Avalonia.Controls; + +namespace Ursa.Controls; + +public static class DialogBox +{ + public static async Task ShowAsync() + { + return; + } + + public static async Task ShowAsync(TViewModel vm) + where TView: Control, new() + where TViewModel: new() + { + TView t = new TView(); + t.DataContext = vm; + return; + } +} \ No newline at end of file diff --git a/src/Ursa/Controls/Dialog/DialogControl.cs b/src/Ursa/Controls/Dialog/DialogControl.cs new file mode 100644 index 0000000..d46adc5 --- /dev/null +++ b/src/Ursa/Controls/Dialog/DialogControl.cs @@ -0,0 +1,8 @@ +using Avalonia.Controls; + +namespace Ursa.Controls; + +public class DialogControl: ContentControl +{ + +} \ No newline at end of file diff --git a/src/Ursa/Controls/Dialog/DialogHost.cs b/src/Ursa/Controls/Dialog/DialogHost.cs new file mode 100644 index 0000000..7166146 --- /dev/null +++ b/src/Ursa/Controls/Dialog/DialogHost.cs @@ -0,0 +1,39 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Controls.Primitives; +using Avalonia.Input; +using Avalonia.Utilities; + +namespace Ursa.Controls; + +public class DialogHost: Canvas +{ + private Point _lastPoint; + + protected override void OnPointerMoved(PointerEventArgs e) + { + base.OnPointerMoved(e); + if (e.Source is DialogControl item) + { + if (e.GetCurrentPoint(this).Properties.IsLeftButtonPressed) + { + var p = e.GetPosition(this); + var left= p.X - _lastPoint.X; + var top = p.Y - _lastPoint.Y; + left = MathUtilities.Clamp(left, 0, Bounds.Width - item.Bounds.Width); + top = MathUtilities.Clamp(top, 0, Bounds.Height - item.Bounds.Height); + Canvas.SetLeft(item, left); + Canvas.SetTop(item, top); + } + } + } + + protected override void OnPointerPressed(PointerPressedEventArgs e) + { + base.OnPointerPressed(e); + if (e.Source is DialogControl item) + { + _lastPoint = e.GetPosition(item); + } + } +} \ No newline at end of file diff --git a/src/Ursa/Controls/Dialog/IDialogContext.cs b/src/Ursa/Controls/Dialog/IDialogContext.cs new file mode 100644 index 0000000..b88b355 --- /dev/null +++ b/src/Ursa/Controls/Dialog/IDialogContext.cs @@ -0,0 +1,6 @@ +namespace Ursa.Controls; + +public interface IDialogContext +{ + +} \ No newline at end of file