UNIXworkcode

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