OSDN Git Service

8dd47536b313904c44a12d6a2a20b8ac70b74c44
[psychlops/silverlight.git] / dev3 / psychlops / core / graphic / canvas.cs
1 using System;\r
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
10 \r
11 \r
12 \r
13 namespace Psychlops\r
14 {\r
15 \r
16         public class Canvas : Drawable\r
17         {\r
18                 public static System.Windows.Controls.Image default_instance;\r
19                 public static System.Windows.Controls.UserControl default_panel;\r
20                 public static WriteableBitmap default_buffer; \r
21                 System.Windows.Controls.Image instance;\r
22                 System.Windows.Controls.UserControl panel; \r
23                 WriteableBitmap buffer;\r
24 \r
25                 public Canvas(int wid, int hei)\r
26                 {\r
27                         panel = default_panel;\r
28                         instance = default_instance;\r
29                         instance.Width = wid;\r
30                         instance.Height = hei;\r
31                         buffer = new WriteableBitmap((int)instance.Width, (int)instance.Height);\r
32                         instance.Source = buffer;\r
33                         instance.MouseMove += Mouse.Canvas_MousePos;\r
34                         instance.MouseLeftButtonDown += Mouse.Canvas_LDown;\r
35                         instance.MouseLeftButtonUp += Mouse.Canvas_LUp;\r
36                         instance.MouseWheel += Mouse.Canvas_MouseWheel;\r
37                         Mouse._prime = instance;\r
38                         Main.drawable = this;\r
39                         default_buffer = buffer;\r
40                 }\r
41                 public Canvas(int wid, int hei, System.Windows.Controls.Image target, System.Windows.Controls.UserControl system)\r
42                 {\r
43                         panel = system;\r
44                         instance = target;\r
45                         instance.Width = wid;\r
46                         instance.Height = hei;\r
47                         buffer = new WriteableBitmap((int)instance.Width, (int)instance.Height);\r
48                         instance = target;\r
49                         instance.Source = buffer;\r
50                         instance.MouseMove += Mouse.Canvas_MousePos;\r
51                         instance.MouseLeftButtonDown += Mouse.Canvas_LDown;\r
52                         instance.MouseLeftButtonUp += Mouse.Canvas_LUp;\r
53                         instance.MouseWheel += Mouse.Canvas_MouseWheel;\r
54                         Mouse._prime = instance;\r
55                         Main.drawable = this;\r
56                 }\r
57                 public Point getCenter()\r
58                 {\r
59                         return new Point(instance.Width/2.0, instance.Height/2.0, 0);\r
60                 }\r
61 \r
62                 public void clear()\r
63                 {\r
64                         buffer.Clear(Color.black);\r
65                 }\r
66                 public void clear(Color col)\r
67                 {\r
68                         buffer.Clear(col);\r
69                 }\r
70 \r
71                 public void pix(int x, int y, Color col)\r
72                 {\r
73                         buffer.SetPixel(x, y, col);\r
74                 }\r
75 \r
76 \r
77                 public void line(Line drawee, Color col)\r
78                 {\r
79                         buffer.DrawLine((int)drawee.begin.x, (int)drawee.begin.y, (int)drawee.end.x, (int)drawee.end.y, col);\r
80                 }\r
81                 public void rect(Rectangle drawee, Color col)\r
82                 {\r
83                         buffer.DrawRectangle((int)drawee.v1.x, (int)drawee.v1.y, (int)drawee.v2.x, (int)drawee.v2.y, col);\r
84                 }\r
85                 public void ellipse(Ellipse drawee, Color col)\r
86                 {\r
87                         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
88                 }\r
89                 public void polygon(Polygon drawee, Color col)\r
90                 {\r
91                         int[] ps = new int[drawee.vertices.Count];\r
92                         int i=0;\r
93                         foreach (Point p in drawee.vertices)\r
94                         {\r
95                                 ps[i] = (int)p.x; i++;\r
96                                 ps[i] = (int)p.y; i++;\r
97                         }\r
98                         buffer.DrawPolyline(ps, col);\r
99                 }\r
100                 public void image(Image drawee)\r
101                 {\r
102                         buffer.Blit(drawee.datum, drawee.buffer, drawee.self_rect, Colors.White, WriteableBitmapExtensions.BlendMode.None);\r
103                 }\r
104 \r
105 \r
106                 public void flip()\r
107                 {\r
108                         buffer.Invalidate();\r
109                 }\r
110         }\r
111 \r
112 \r
113 }