OSDN Git Service

123
[psychlops/silverlight.git] / dev3 / psychlops / core / graphic / canvas.cs
index d9e0d37..9dfe031 100644 (file)
@@ -7,6 +7,7 @@ using System.Windows.Media;
 using System.Windows.Media.Animation;\r
 using System.Windows.Media.Imaging;\r
 using System.Windows.Shapes;\r
+using System.Windows.Browser;\r
 \r
 \r
 \r
@@ -69,9 +70,9 @@ namespace Psychlops
                        }\r
 \r
                        public void msg(string str, double x, double y) { msg(str, x, y, Color.white); }\r
-                       public virtual void msg(string str, double x, double y, Color col)\r
+                       public virtual void msg(string dstr, double x, double y, Color col)\r
                        {\r
-                               var let = new Letters(str);\r
+                               var let = new Letters(dstr);\r
                                let.locate(x, y);\r
                                let.fill = col;\r
                                this.letters(let);\r
@@ -140,6 +141,12 @@ namespace Psychlops
                        api_canvas.MouseWheel += Mouse.Canvas_MouseWheel;\r
                        panel.KeyDown += Keyboard.Canvas_KeyDown;\r
                        panel.KeyUp += Keyboard.Canvas_KeyUp;\r
+\r
+                       HtmlElement htmlHost = HtmlPage.Document.GetElementById("silverlightControlHost");\r
+                       //if (htmlHost != null) HtmlPage.Window.Alert("silverlightControlHost is null");\r
+                       htmlHost.SetStyleAttribute("width", (200+wid).ToString()+"px");\r
+                       htmlHost.SetStyleAttribute("height", (20+hei).ToString() + "px");\r
+                       htmlHost.SetStyleAttribute("margin", "2em auto auto auto");\r
                }\r
 \r
                #endregion\r
@@ -179,7 +186,7 @@ namespace Psychlops
                        rect(back_panel);\r
                }\r
 \r
-               int nextIntervalFrame = 1;\r
+               int nextIntervalFrame = 1, chacked = 0;\r
                public void flip()\r
                {\r
                        //api_canvas.Dispatcher.BeginInvoke(flipexec);\r
@@ -188,6 +195,7 @@ namespace Psychlops
                        lock (this)\r
                        {\r
                                nextIntervalFrame = 1;\r
+                               chacked = 1;\r
                        }\r
                        Internal.Main.canvas_flag.WaitOne();\r
                }\r
@@ -199,15 +207,26 @@ namespace Psychlops
                        }\r
                        if (nextIntervalFrame <= 0)\r
                        {\r
-                               var tmp = new System.Windows.Controls.Canvas();\r
-                               foreach (Internal.PrimitiveFigure f in stack)\r
+                               //Psychlops.AppState.statusBar = chacked.ToString();\r
+                               if (chacked > 0)\r
                                {\r
-                                       tmp.Children.Add(f.toNative());\r
+                                       var tmp = new System.Windows.Controls.Canvas();\r
+                                       if (stack.Count > 0)\r
+                                       {\r
+                                               foreach (Internal.PrimitiveFigure f in stack)\r
+                                               {\r
+                                                       tmp.Children.Add(f.toNative());\r
+                                               }\r
+                                       }\r
+                                       api_canvas.Children.Clear();\r
+                                       api_canvas.Children.Add(tmp);\r
+                                       stack.Clear();\r
+                                       lock (this)\r
+                                       {\r
+                                               chacked = 0;\r
+                                       }\r
+                                       Psychlops.Internal.Main.canvas_flag.Set();\r
                                }\r
-                               api_canvas.Children.Clear();\r
-                               api_canvas.Children.Add(tmp);\r
-                               stack.Clear();\r
-                               Psychlops.Internal.Main.canvas_flag.Set();\r
                        }\r
                        System.Threading.Thread.Sleep(0);\r
                }\r
@@ -358,10 +377,10 @@ namespace Psychlops
                        FONT_STYLE_BRIDGE.Add(Font.Style.italic, System.Windows.FontStyles.Italic);\r
                        FONT_STYLE_BRIDGE.Add(Font.Style.oblique, System.Windows.FontStyles.Italic);\r
                        LETTERS_H_ALIGN_BRIDGE = new System.Collections.Generic.Dictionary<Letters.HorizontalAlign, TextAlignment>();\r
-                       LETTERS_H_ALIGN_BRIDGE.Add(Letters.HorizontalAlign.TEXT_ALIGN_LEFT, TextAlignment.Left);\r
-                       LETTERS_H_ALIGN_BRIDGE.Add(Letters.HorizontalAlign.TEXT_ALIGN_CENTER, TextAlignment.Center);\r
-                       LETTERS_H_ALIGN_BRIDGE.Add(Letters.HorizontalAlign.TEXT_ALIGN_RIGHT, TextAlignment.Right);\r
-                       LETTERS_H_ALIGN_BRIDGE.Add(Letters.HorizontalAlign.NOT_SPECIFIED, TextAlignment.Left);\r
+                       LETTERS_H_ALIGN_BRIDGE.Add(Letters.HorizontalAlign.left, TextAlignment.Left);\r
+                       LETTERS_H_ALIGN_BRIDGE.Add(Letters.HorizontalAlign.center, TextAlignment.Center);\r
+                       LETTERS_H_ALIGN_BRIDGE.Add(Letters.HorizontalAlign.right, TextAlignment.Right);\r
+                       LETTERS_H_ALIGN_BRIDGE.Add(Letters.HorizontalAlign.not_specified, TextAlignment.Left);\r
                }\r
                #endregion\r
                public Letters clone()\r
@@ -383,9 +402,9 @@ namespace Psychlops
                        double left = 0;\r
                        switch (d.align)\r
                        {\r
-                               case Letters.HorizontalAlign.TEXT_ALIGN_LEFT: break;\r
-                               case Letters.HorizontalAlign.TEXT_ALIGN_CENTER: left = tmp.Width / 2; break;\r
-                               case Letters.HorizontalAlign.TEXT_ALIGN_RIGHT: left = tmp.Width; break;\r
+                               case Letters.HorizontalAlign.left: break;\r
+                               case Letters.HorizontalAlign.center: left = tmp.Width / 2; break;\r
+                               case Letters.HorizontalAlign.right: left = tmp.Width; break;\r
                        }\r
                        System.Windows.Controls.Canvas.SetLeft(tmp, d.datum.x - left);\r
                        System.Windows.Controls.Canvas.SetTop(tmp, d.datum.y - d.font.size);\r