| 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 } |
|