From 4e0777145805f4e85b43f5fee17f0267f097c73a Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Mon, 11 May 2020 15:52:55 -0300 Subject: [PATCH] add to render demo --- .../Controls/LineBoundsDemoControl.cs | 46 +++++++++++++++++++ samples/RenderDemo/MainWindow.xaml | 3 ++ samples/RenderDemo/Pages/LineBoundsDemo.xaml | 9 ++++ .../RenderDemo/Pages/LineBoundsDemo.xaml.cs | 19 ++++++++ 4 files changed, 77 insertions(+) create mode 100644 samples/RenderDemo/Controls/LineBoundsDemoControl.cs create mode 100644 samples/RenderDemo/Pages/LineBoundsDemo.xaml create mode 100644 samples/RenderDemo/Pages/LineBoundsDemo.xaml.cs diff --git a/samples/RenderDemo/Controls/LineBoundsDemoControl.cs b/samples/RenderDemo/Controls/LineBoundsDemoControl.cs new file mode 100644 index 0000000000..6030eae47b --- /dev/null +++ b/samples/RenderDemo/Controls/LineBoundsDemoControl.cs @@ -0,0 +1,46 @@ +using System; +using Avalonia; +using Avalonia.Controls; +using Avalonia.Media; +using Avalonia.Rendering.SceneGraph; +using Avalonia.Threading; + +namespace RenderDemo.Controls +{ + public class LineBoundsDemoControl : Control + { + private double angle = Math.PI / 8; + + public static double CalculateOppSide(double angle, double hyp) + { + return Math.Sin(angle) * hyp; + } + + public static double CalculateAdjSide(double angle, double hyp) + { + return Math.Cos(angle) * hyp; + } + + public override void Render(DrawingContext drawingContext) + { + var lineLength = Math.Sqrt((100 * 100) + (100 * 100)); + + var diffX = CalculateAdjSide(angle, lineLength); + var diffY = CalculateOppSide(angle, lineLength); + + + var p1 = new Point(200, 200); + var p2 = new Point(p1.X + diffX, p1.Y + diffY); + + var pen = new Pen(Brushes.Green, 20, lineCap: PenLineCap.Square); + var boundPen = new Pen(Brushes.Black); + + drawingContext.DrawLine(pen, p1, p2); + + drawingContext.DrawRectangle(boundPen, LineBoundsHelper.CalculateBounds(p1, p2, pen)); + + angle += Math.PI / 360; + Dispatcher.UIThread.Post(InvalidateVisual, DispatcherPriority.Background); + } + } +} diff --git a/samples/RenderDemo/MainWindow.xaml b/samples/RenderDemo/MainWindow.xaml index b17520a466..22925298fe 100644 --- a/samples/RenderDemo/MainWindow.xaml +++ b/samples/RenderDemo/MainWindow.xaml @@ -44,6 +44,9 @@ + + + diff --git a/samples/RenderDemo/Pages/LineBoundsDemo.xaml b/samples/RenderDemo/Pages/LineBoundsDemo.xaml new file mode 100644 index 0000000000..55b2add070 --- /dev/null +++ b/samples/RenderDemo/Pages/LineBoundsDemo.xaml @@ -0,0 +1,9 @@ + + + diff --git a/samples/RenderDemo/Pages/LineBoundsDemo.xaml.cs b/samples/RenderDemo/Pages/LineBoundsDemo.xaml.cs new file mode 100644 index 0000000000..1b87cb1ef6 --- /dev/null +++ b/samples/RenderDemo/Pages/LineBoundsDemo.xaml.cs @@ -0,0 +1,19 @@ +using Avalonia; +using Avalonia.Controls; +using Avalonia.Markup.Xaml; + +namespace RenderDemo.Pages +{ + public class LineBoundsDemo : UserControl + { + public LineBoundsDemo() + { + this.InitializeComponent(); + } + + private void InitializeComponent() + { + AvaloniaXamlLoader.Load(this); + } + } +}