1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Threading.Tasks;
6 using System.Windows;
7 using System.Windows.Controls;
8 using System.Windows.Media;
9 using System.Windows.Shapes;
10 using System.Diagnostics;
11
12 namespace UI
13 {
14 public class DrawingArea : System.Windows.Controls.Canvas
15 {
16 public Action<int,int> resizeCallback;
17
18 public Color Color;
19 private Brush Brush;
20
21 public DrawingArea(Container container) : base()
22 {
23 this.SizeChanged += UpdateSize;
24 ResetGraphics();
25
26 container.Add(this, true);
27 }
28
29 public void UpdateSize(object sender, SizeChangedEventArgs e)
30 {
31 if(resizeCallback != null)
32 {
33 Children.Clear();
34 ResetGraphics();
35
36 Size s = e.NewSize;
37 resizeCallback((int)s.Width, (int)s.Height);
38 }
39 }
40
41 public void Redraw()
42 {
43 if (resizeCallback != null)
44 {
45 Children.Clear();
46 ResetGraphics();
47
48 resizeCallback((int)ActualWidth, (int)ActualHeight);
49 }
50
51 }
52
53 private void ResetGraphics()
54 {
55 Color = Color.FromRgb(0, 0, 0);
56 Brush = System.Windows.Media.Brushes.Black;
57 }
58
59 public void SetColor(int r, int g, int b)
60 {
61 Color = Color.FromRgb((byte)r, (byte)g, (byte)b);
62 Brush = new SolidColorBrush(Color);
63 }
64
65 public void DrawLine(int x1, int y1, int x2, int y2)
66 {
67 Line line = new Line();
68 line.Stroke = Brush;
69 line.StrokeThickness = 1;
70 line.SnapsToDevicePixels = true;
71
72 line.X1 = x1;
73 line.Y1 = y1;
74 line.X2 = x2;
75 line.Y2 = y2;
76
77 Children.Add(line);
78 }
79
80 public void DrawRect(int x, int y, int w, int h, bool fill)
81 {
82 Rectangle rect = new Rectangle();
83 rect.Stroke = Brush;
84 rect.StrokeThickness = 1;
85 rect.SnapsToDevicePixels = true;
86 if(fill)
87 {
88 rect.Fill = Brush;
89 }
90
91 rect.Width = w;
92 rect.Height = h;
93 SetLeft(rect, x);
94 SetTop(rect, y);
95
96 Children.Add(rect);
97 }
98 }
99 }
100