2 using System.Windows;
\r
3 using System.Windows.Controls;
\r
4 using System.Windows.Documents;
\r
5 using System.Windows.Input;
\r
6 using System.Windows.Media;
\r
7 using System.Windows.Media.Animation;
\r
8 using System.Windows.Media.Imaging;
\r
9 using System.Windows.Shapes;
\r
16 public class Canvas : Drawable
\r
18 public static System.Windows.Controls.Image default_buffer_frame;
\r
19 public static System.Windows.Controls.UserControl default_panel;
\r
20 public static System.Windows.Controls.Canvas default_api_canvas;
\r
21 public static WriteableBitmap default_buffer;
\r
22 System.Windows.Controls.Image instance;
\r
23 System.Windows.Controls.Canvas api_canvas;
\r
24 System.Windows.Controls.UserControl panel;
\r
25 WriteableBitmap buffer;
\r
26 System.Windows.Shapes.Rectangle back_panel;
\r
27 System.Windows.Media.SolidColorBrush back_panel_color;
\r
29 public Canvas(int wid, int hei)
\r
31 panel = default_panel;
\r
32 api_canvas = default_api_canvas;
\r
33 instance = default_buffer_frame;
\r
34 initialize(wid, hei);
\r
36 public Canvas(int wid, int hei, System.Windows.Controls.Image target, System.Windows.Controls.Canvas apicnvs, System.Windows.Controls.UserControl system)
\r
39 api_canvas = apicnvs;
\r
41 initialize(wid, hei);
\r
43 protected void initialize(int wid, int hei)
\r
45 instance.Width = wid;
\r
46 instance.Height = hei;
\r
47 instance.Source = buffer;
\r
48 api_canvas.Width = wid;
\r
49 api_canvas.Height = hei;
\r
50 buffer = new WriteableBitmap((int)instance.Width, (int)instance.Height);
\r
51 api_canvas.MouseMove += Mouse.Canvas_MousePos;
\r
52 api_canvas.MouseLeftButtonDown += Mouse.Canvas_LDown;
\r
53 api_canvas.MouseLeftButtonUp += Mouse.Canvas_LUp;
\r
54 api_canvas.MouseWheel += Mouse.Canvas_MouseWheel;
\r
55 Mouse._prime = api_canvas;
\r
56 Main.drawable = this;
\r
57 default_buffer = buffer;
\r
59 back_panel = new System.Windows.Shapes.Rectangle();
\r
60 back_panel.Width = wid;
\r
61 back_panel.Height = hei;
\r
62 back_panel_color = new SolidColorBrush();
\r
63 back_panel.Fill = back_panel_color;
\r
65 public Point getCenter()
\r
67 return new Point(instance.Width/2.0, instance.Height/2.0, 0);
\r
72 buffer.Clear(Color.black);
\r
74 public void clear(Color col)
\r
76 api_canvas.Children.Clear();
\r
77 back_panel_color.Color = col;
\r
78 api_canvas.Children.Add(back_panel);
\r
79 //buffer.Clear(col);
\r
82 public void pix(int x, int y, Color col)
\r
84 buffer.SetPixel(x, y, col);
\r
87 static System.Windows.Shapes.Line api_line;
\r
88 static System.Windows.Shapes.Path api_curve;
\r
89 static System.Windows.Shapes.Rectangle api_rect;
\r
90 static System.Windows.Shapes.Ellipse api_ellipse;
\r
91 static System.Windows.Shapes.Polygon api_polygon;
\r
92 static System.Windows.Shapes.Polyline api_polyline;
\r
93 static System.Windows.Media.Color api_color;
\r
94 static System.Windows.Media.SolidColorBrush api_fill;
\r
95 static System.Windows.Media.SolidColorBrush api_stroke;
\r
96 static System.Windows.Media.TranslateTransform api_translation;
\r
99 api_line = new System.Windows.Shapes.Line();
\r
100 api_curve = new System.Windows.Shapes.Path();
\r
101 api_rect = new System.Windows.Shapes.Rectangle();
\r
102 api_ellipse = new System.Windows.Shapes.Ellipse();
\r
103 api_polygon = new System.Windows.Shapes.Polygon();
\r
104 api_polyline = new System.Windows.Shapes.Polyline();
\r
105 api_color = new System.Windows.Media.Color();
\r
106 api_fill = new System.Windows.Media.SolidColorBrush();
\r
107 api_stroke = new System.Windows.Media.SolidColorBrush();
\r
108 api_translation = new System.Windows.Media.TranslateTransform();
\r
111 public void line(Line drawee, Color col)
\r
113 //buffer.DrawLine((int)drawee.begin.x, (int)drawee.begin.y, (int)drawee.end.x, (int)drawee.end.y, col);
\r
114 var zapi_shape = new System.Windows.Shapes.Line();
\r
115 var zapi_fill = new System.Windows.Media.SolidColorBrush();
\r
116 zapi_shape.X1 = (int)drawee.begin.x;
\r
117 zapi_shape.Y1 = (int)drawee.begin.y;
\r
118 zapi_shape.X2 = (int)drawee.end.x;
\r
119 zapi_shape.Y2 = (int)drawee.end.y;
\r
120 zapi_fill.Color = col;
\r
121 zapi_fill.Opacity = 1.0;
\r
122 zapi_shape.Stroke = zapi_fill;
\r
123 zapi_shape.StrokeThickness = 1;
\r
124 api_canvas.Children.Add(zapi_shape);
\r
125 //System.Windows.Controls.Canvas.SetLeft(zapi_shape, drawee.left);
\r
126 //System.Windows.Controls.Canvas.SetTop(zapi_shape, drawee.top);
\r
128 public void rect(Rectangle drawee, Color col)
\r
130 //buffer.DrawRectangle((int)drawee.v1.x, (int)drawee.v1.y, (int)drawee.v2.x, (int)drawee.v2.y, col);
\r
132 var zapi_shape = new System.Windows.Shapes.Rectangle();
\r
133 var zapi_fill = new System.Windows.Media.SolidColorBrush();
\r
134 zapi_shape.Width = drawee.width;
\r
135 zapi_shape.Height = drawee.height;
\r
136 zapi_fill.Color = col;
\r
137 zapi_shape.Fill = zapi_fill;
\r
138 api_canvas.Children.Add(zapi_shape);
\r
139 System.Windows.Controls.Canvas.SetLeft(zapi_shape, drawee.left);
\r
140 System.Windows.Controls.Canvas.SetTop(zapi_shape, drawee.top);
\r
142 public void ellipse(Ellipse drawee, Color col)
\r
144 //buffer.DrawEllipse((int)(drawee.datum.x - drawee.xdiameter / 2), (int)(drawee.datum.y - drawee.ydiameter / 2), (int)(drawee.datum.x + drawee.xdiameter / 2), (int)(drawee.datum.y + drawee.ydiameter / 2), col);
\r
146 var zapi_shape = new System.Windows.Shapes.Ellipse();
\r
147 var zapi_fill = new System.Windows.Media.SolidColorBrush();
\r
148 zapi_shape.Width = drawee.width;
\r
149 zapi_shape.Height = drawee.height;
\r
150 zapi_fill.Color = col;
\r
151 zapi_shape.Fill = zapi_fill;
\r
152 api_canvas.Children.Add(zapi_shape);
\r
153 System.Windows.Controls.Canvas.SetLeft(zapi_shape, drawee.left);
\r
154 System.Windows.Controls.Canvas.SetTop(zapi_shape, drawee.top);
\r
156 public void polygon(Polygon drawee, Color col)
\r
159 int[] ps = new int[drawee.vertices.Count];
\r
160 buffer.DrawPolyline(ps, col);
\r
162 var zapi_shape = new System.Windows.Shapes.Polygon();
\r
163 var zapi_fill = new System.Windows.Media.SolidColorBrush();
\r
165 foreach (Point p in drawee.vertices)
\r
167 zapi_shape.Points.Add(p);
\r
169 zapi_fill.Color = col;
\r
170 zapi_shape.Fill = zapi_fill;
\r
171 api_canvas.Children.Add(zapi_shape);
\r
172 System.Windows.Controls.Canvas.SetLeft(zapi_shape, drawee.datum.x);
\r
173 System.Windows.Controls.Canvas.SetTop(zapi_shape, drawee.datum.y);
\r
175 public void letters(Letters drawee, Color col)
\r
177 //var zapi_shape = new System.Windows.Documents.Glyphs();
\r
178 var zapi_shape = new System.Windows.Controls.TextBlock();
\r
179 var zapi_fill = new System.Windows.Media.SolidColorBrush();
\r
180 zapi_shape.MaxWidth = width;
\r
181 zapi_shape.MaxHeight = height;
\r
182 zapi_shape.Text = drawee.str;
\r
183 //zapi_shape.FontFamily = ;
\r
184 zapi_shape.FontSize = drawee.font.size;
\r
185 zapi_shape.FontStyle = drawee.font.style==Font.Style.normal_style ? System.Windows.FontStyles.Normal : System.Windows.FontStyles.Italic;
\r
186 zapi_shape.FontWeight = drawee.font.weight>400 ? System.Windows.FontWeights.Bold : System.Windows.FontWeights.Normal;
\r
187 zapi_shape.TextAlignment = drawee.align==Letters.HorizontalAlign.TEXT_ALIGN_LEFT ? TextAlignment.Left : TextAlignment.Center;
\r
188 zapi_fill.Color = col;
\r
189 zapi_shape.Foreground = zapi_fill;
\r
190 api_canvas.Children.Add(zapi_shape);
\r
191 System.Windows.Controls.Canvas.SetLeft(zapi_shape, drawee.datum.x);
\r
192 System.Windows.Controls.Canvas.SetTop(zapi_shape, drawee.datum.y);
\r
194 public void image(Image drawee)
\r
196 //buffer.Blit(drawee.datum, drawee.buffer, drawee.self_rect, Colors.White, WriteableBitmapExtensions.BlendMode.None);
\r
197 var zapi_shape = new System.Windows.Controls.Image();
\r
198 zapi_shape.Source = drawee.buffer;
\r
199 api_canvas.Children.Add(zapi_shape);
\r
200 System.Windows.Controls.Canvas.SetLeft(zapi_shape, drawee.datum.x);
\r
201 System.Windows.Controls.Canvas.SetTop(zapi_shape, drawee.datum.y);
\r
208 buffer.Invalidate();
\r
212 public double width { get { return api_canvas.Width; } }
\r
213 public double height { get { return api_canvas.Height; } }
\r