OSDN Git Service

hk
[psychlops/silverlight.git] / dev3 / psychlops / core / graphic / canvas.cs
index 4414a24..9098329 100644 (file)
@@ -17,20 +17,26 @@ namespace Psychlops
        {\r
                public static System.Windows.Controls.Image default_buffer_frame;\r
                public static System.Windows.Controls.UserControl default_panel;\r
+               public static System.Windows.Controls.Canvas default_api_canvas;\r
                public static WriteableBitmap default_buffer;\r
                System.Windows.Controls.Image instance;\r
-               System.Windows.Controls.UserControl panel; \r
+               System.Windows.Controls.Canvas api_canvas;\r
+               System.Windows.Controls.UserControl panel;\r
                WriteableBitmap buffer;\r
+               System.Windows.Shapes.Rectangle back_panel;\r
+               System.Windows.Media.SolidColorBrush back_panel_color;\r
 \r
                public Canvas(int wid, int hei)\r
                {\r
                        panel = default_panel;\r
+                       api_canvas = default_api_canvas;\r
                        instance = default_buffer_frame;\r
                        initialize(wid, hei);\r
                }\r
-               public Canvas(int wid, int hei, System.Windows.Controls.Image target, System.Windows.Controls.UserControl system)\r
+               public Canvas(int wid, int hei, System.Windows.Controls.Image target, System.Windows.Controls.Canvas apicnvs,  System.Windows.Controls.UserControl system)\r
                {\r
                        panel = system;\r
+                       api_canvas = apicnvs;\r
                        instance = target;\r
                        initialize(wid, hei);\r
                }\r
@@ -38,15 +44,23 @@ namespace Psychlops
                {\r
                        instance.Width = wid;\r
                        instance.Height = hei;\r
-                       buffer = new WriteableBitmap((int)instance.Width, (int)instance.Height);\r
                        instance.Source = buffer;\r
-                       instance.MouseMove += Mouse.Canvas_MousePos;\r
-                       instance.MouseLeftButtonDown += Mouse.Canvas_LDown;\r
-                       instance.MouseLeftButtonUp += Mouse.Canvas_LUp;\r
-                       instance.MouseWheel += Mouse.Canvas_MouseWheel;\r
-                       Mouse._prime = instance;\r
+                       api_canvas.Width = wid;\r
+                       api_canvas.Height = hei;\r
+                       buffer = new WriteableBitmap((int)instance.Width, (int)instance.Height);\r
+                       api_canvas.MouseMove += Mouse.Canvas_MousePos;\r
+                       api_canvas.MouseLeftButtonDown += Mouse.Canvas_LDown;\r
+                       api_canvas.MouseLeftButtonUp += Mouse.Canvas_LUp;\r
+                       api_canvas.MouseWheel += Mouse.Canvas_MouseWheel;\r
+                       Mouse._prime = api_canvas;\r
                        Main.drawable = this;\r
                        default_buffer = buffer;\r
+\r
+                       back_panel = new System.Windows.Shapes.Rectangle();\r
+                       back_panel.Width = wid;\r
+                       back_panel.Height = hei;\r
+                       back_panel_color = new SolidColorBrush();\r
+                       back_panel.Fill = back_panel_color;\r
                }\r
                public Point getCenter()\r
                {\r
@@ -59,7 +73,10 @@ namespace Psychlops
                }\r
                public void clear(Color col)\r
                {\r
-                       buffer.Clear(col);\r
+                       api_canvas.Children.Clear();\r
+                       back_panel_color.Color = col;\r
+                       api_canvas.Children.Add(back_panel);\r
+                       //buffer.Clear(col);\r
                }\r
 \r
                public void pix(int x, int y, Color col)\r
@@ -93,37 +110,95 @@ namespace Psychlops
 \r
                public void line(Line drawee, Color col)\r
                {\r
-                       buffer.DrawLine((int)drawee.begin.x, (int)drawee.begin.y, (int)drawee.end.x, (int)drawee.end.y, col);\r
+                       //buffer.DrawLine((int)drawee.begin.x, (int)drawee.begin.y, (int)drawee.end.x, (int)drawee.end.y, col);\r
+                       var zapi_shape = new System.Windows.Shapes.Line();\r
+                       var zapi_fill = new System.Windows.Media.SolidColorBrush();\r
+                       zapi_shape.X1 = (int)drawee.begin.x;\r
+                       zapi_shape.Y1 = (int)drawee.begin.y;\r
+                       zapi_shape.X2 = (int)drawee.end.x;\r
+                       zapi_shape.Y2 = (int)drawee.end.y;\r
+                       zapi_fill.Color = col;\r
+                       zapi_fill.Opacity = 1.0;\r
+                       zapi_shape.Stroke = zapi_fill;\r
+                       zapi_shape.StrokeThickness = 1;\r
+                       api_canvas.Children.Add(zapi_shape);\r
+                       //System.Windows.Controls.Canvas.SetLeft(zapi_shape, drawee.left);\r
+                       //System.Windows.Controls.Canvas.SetTop(zapi_shape, drawee.top);\r
                }\r
                public void rect(Rectangle drawee, Color col)\r
                {\r
                        //buffer.DrawRectangle((int)drawee.v1.x, (int)drawee.v1.y, (int)drawee.v2.x, (int)drawee.v2.y, col);\r
-                       api_rect.Width = drawee.width;\r
-                       api_rect.Height = drawee.height;\r
-                       api_fill.Color = col;\r
-                       api_rect.Fill = api_fill;\r
-                       api_translation.X = drawee.left;\r
-                       api_translation.Y = drawee.top;\r
-                       buffer.Render(api_rect, api_translation);\r
+\r
+                       var zapi_shape = new System.Windows.Shapes.Rectangle();\r
+                       var zapi_fill = new System.Windows.Media.SolidColorBrush();\r
+                       zapi_shape.Width = drawee.width;\r
+                       zapi_shape.Height = drawee.height;\r
+                       zapi_fill.Color = col;\r
+                       zapi_shape.Fill = zapi_fill;\r
+                       api_canvas.Children.Add(zapi_shape);\r
+                       System.Windows.Controls.Canvas.SetLeft(zapi_shape, drawee.left);\r
+                       System.Windows.Controls.Canvas.SetTop(zapi_shape, drawee.top);\r
                }\r
                public void ellipse(Ellipse drawee, Color col)\r
                {\r
-                       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
+                       //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
+\r
+                       var zapi_shape = new System.Windows.Shapes.Ellipse();\r
+                       var zapi_fill = new System.Windows.Media.SolidColorBrush();\r
+                       zapi_shape.Width = drawee.width;\r
+                       zapi_shape.Height = drawee.height;\r
+                       zapi_fill.Color = col;\r
+                       zapi_shape.Fill = zapi_fill;\r
+                       api_canvas.Children.Add(zapi_shape);\r
+                       System.Windows.Controls.Canvas.SetLeft(zapi_shape, drawee.left);\r
+                       System.Windows.Controls.Canvas.SetTop(zapi_shape, drawee.top);\r
                }\r
                public void polygon(Polygon drawee, Color col)\r
                {\r
+                       /*\r
                        int[] ps = new int[drawee.vertices.Count];\r
-                       int i=0;\r
+                       buffer.DrawPolyline(ps, col);\r
+                       */\r
+                       var zapi_shape = new System.Windows.Shapes.Polygon();\r
+                       var zapi_fill = new System.Windows.Media.SolidColorBrush();\r
+                       int i = 0;\r
                        foreach (Point p in drawee.vertices)\r
                        {\r
-                               ps[i] = (int)p.x; i++;\r
-                               ps[i] = (int)p.y; i++;\r
+                               zapi_shape.Points.Add(p);\r
                        }\r
-                       buffer.DrawPolyline(ps, col);\r
+                       zapi_fill.Color = col;\r
+                       zapi_shape.Fill = zapi_fill;\r
+                       api_canvas.Children.Add(zapi_shape);\r
+                       System.Windows.Controls.Canvas.SetLeft(zapi_shape, drawee.datum.x);\r
+                       System.Windows.Controls.Canvas.SetTop(zapi_shape, drawee.datum.y);\r
+               }\r
+               public void letters(Letters drawee, Color col)\r
+               {\r
+                       //var zapi_shape = new System.Windows.Documents.Glyphs();\r
+                       var zapi_shape = new System.Windows.Controls.TextBlock();\r
+                       var zapi_fill = new System.Windows.Media.SolidColorBrush();\r
+                       zapi_shape.MaxWidth = width;\r
+                       zapi_shape.MaxHeight = height;\r
+                       zapi_shape.Text = drawee.str;\r
+                       //zapi_shape.FontFamily = ;\r
+                       zapi_shape.FontSize = drawee.font.size;\r
+                       zapi_shape.FontStyle = drawee.font.style==Font.Style.normal_style ? System.Windows.FontStyles.Normal : System.Windows.FontStyles.Italic;\r
+                       zapi_shape.FontWeight = drawee.font.weight>400 ? System.Windows.FontWeights.Bold : System.Windows.FontWeights.Normal;\r
+                       zapi_shape.TextAlignment = drawee.align==Letters.HorizontalAlign.TEXT_ALIGN_LEFT ? TextAlignment.Left : TextAlignment.Center;\r
+                       zapi_fill.Color = col;\r
+                       zapi_shape.Foreground = zapi_fill;\r
+                       api_canvas.Children.Add(zapi_shape);\r
+                       System.Windows.Controls.Canvas.SetLeft(zapi_shape, drawee.datum.x);\r
+                       System.Windows.Controls.Canvas.SetTop(zapi_shape, drawee.datum.y);\r
                }\r
                public void image(Image drawee)\r
                {\r
-                       buffer.Blit(drawee.datum, drawee.buffer, drawee.self_rect, Colors.White, WriteableBitmapExtensions.BlendMode.None);\r
+                       //buffer.Blit(drawee.datum, drawee.buffer, drawee.self_rect, Colors.White, WriteableBitmapExtensions.BlendMode.None);\r
+                       var zapi_shape = new System.Windows.Controls.Image();\r
+                       zapi_shape.Source = drawee.buffer;\r
+                       api_canvas.Children.Add(zapi_shape);\r
+                       System.Windows.Controls.Canvas.SetLeft(zapi_shape, drawee.datum.x);\r
+                       System.Windows.Controls.Canvas.SetTop(zapi_shape, drawee.datum.y);\r
                }\r
 \r
 \r
@@ -133,6 +208,9 @@ namespace Psychlops
                        buffer.Invalidate();\r
                        frame++;\r
                }\r
+\r
+               public double width { get { return api_canvas.Width; } }\r
+               public double height { get { return api_canvas.Height; } }\r
        }\r
 \r
 \r