internal int lineStackN;\r
internal Rectangle[] rectStack;\r
internal int rectStackN;\r
+ internal Ellipse[] ellipseStack;\r
+ internal int ellipseStackN;\r
+ internal Polygon[] polygonStack;\r
+ internal int polygonStackN;\r
+ internal Letters[] lettersStack;\r
+ internal int lettersStackN;\r
+ internal Image[] imageStack;\r
+ internal int imageStackN;\r
\r
\r
public StackableDrawable()\r
stack = new Internal.PrimitiveFigure[40000];\r
lineStack = new Line[10000];\r
rectStack = new Rectangle[10000];\r
+ ellipseStack = new Ellipse[10000];\r
+ polygonStack = new Polygon[1000];\r
+ lettersStack = new Letters[1000];\r
+ imageStack = new Image[1000];\r
for (int i = 0; i < 10000; i++)\r
{\r
lineStack[i] = new Line(0,0,0,0);\r
rectStack[i] = new Rectangle();\r
+ ellipseStack[i] = new Ellipse();\r
+ }\r
+ for (int i = 0; i < 1000; i++)\r
+ {\r
+ polygonStack[i] = new Polygon();\r
+ lettersStack[i] = new Letters();\r
+ //imageStack[i] = new Image();\r
}\r
}\r
\r
\r
public virtual void ellipse(Ellipse drawee)\r
{\r
-// stack.Enqueue(drawee.clone());\r
+ // stack.Enqueue(drawee.clone());\r
+ drawee.copyToStack(this);\r
}\r
\r
public virtual void polygon(Polygon drawee)\r
{\r
-// stack.Enqueue(drawee.clone());\r
+ // stack.Enqueue(drawee.clone());\r
+ drawee.copyToStack(this);\r
}\r
\r
public virtual void letters(Letters drawee)\r
{\r
-// stack.Enqueue(drawee.clone());\r
+ // stack.Enqueue(drawee.clone());\r
+ drawee.copyToStack(this);\r
}\r
\r
public virtual void image(Image drawee)\r
{\r
-// stack.Enqueue(drawee.clone());\r
+ // stack.Enqueue(drawee.clone());\r
+ drawee.copyToStack(this);\r
}\r
\r
public void msg(string str, double x, double y) { msg(str, x, y, Color.white); }\r
internal int linePoolN;\r
internal System.Windows.Shapes.Rectangle[] rectPool;\r
internal int rectPoolN;\r
+ internal System.Windows.Shapes.Ellipse[] ellipsePool;\r
+ internal int ellipsePoolN;\r
+ internal System.Windows.Shapes.Polygon[] polygonPool;\r
+ internal int polygonPoolN;\r
\r
#region initializer\r
\r
}\r
\r
int nextIntervalFrame = 1, chacked = 0;\r
+ /*\r
public void flip()\r
{\r
//api_canvas.Dispatcher.BeginInvoke(flipexec);\r
if (chacked > 0)\r
{\r
// prevPool.Children.Clear();\r
- // var tmp = new System.Windows.Controls.Canvas();\r
-// if (stack.Count > 0)\r
- if (stackN > 0)\r
+ var tmp = new System.Windows.Controls.Canvas();\r
+ if (stack.Count > 0)\r
+ // if (stackN > 0)\r
{\r
//foreach (UIElement e in api_canvas.Children)\r
//{\r
{\r
// tmp.Children.Add(f.toNative());\r
// tmp.Children.Add(f.poolNative(this));\r
- // tmp.Children.Add(stack[i].poolNative(this));\r
- System.Windows.Controls.Canvas.SetLeft(api_canvas.Children[i + 1], rectStack[i].left);\r
- api_canvas.Children[0] = api_canvas.Children[0];\r
+ tmp.Children.Add(stack[i].poolNative(this));\r
+ // System.Windows.Controls.Canvas.SetLeft(api_canvas.Children[i + 1], rectStack[i].left);\r
+ // api_canvas.Children[0] = api_canvas.Children[0];\r
}\r
stackN = 0;\r
\r
}\r
- // api_canvas.Children.Clear();\r
- // api_canvas.Children.Add(tmp);\r
-// stack.Clear();\r
+ api_canvas.Children.Clear();\r
+ api_canvas.Children.Add(tmp);\r
+ // stack.Clear();\r
lock (this)\r
{\r
chacked = 0;\r
}\r
System.Threading.Thread.Sleep(0);\r
}\r
+ */\r
+\r
+ public void flip()\r
+ {\r
+ lock (this)\r
+ {\r
+ nextIntervalFrame = 1;\r
+ chacked = 1;\r
+ }\r
+ // pointPoolN = 0;\r
+ // brushPoolN = 0;\r
+ // linePoolN = 0;\r
+ rectPoolN = 0;\r
+ lineStackN = 0;\r
+ rectStackN = 0;\r
+ Internal.Main.canvas_flag.WaitOne();\r
+ }\r
+ public void executeFlip()\r
+ {\r
+ lock (this)\r
+ {\r
+ nextIntervalFrame--;\r
+ }\r
+ if (nextIntervalFrame <= 0)\r
+ {\r
+ if (chacked > 0)\r
+ {\r
+ //api_canvas.Children.Clear();\r
+ //var tmp = new System.Windows.Controls.Canvas();\r
+ if (stackN > 0)\r
+ {\r
+ for (int i = 0; i < stackN - 2; i++)\r
+ {\r
+ //api_canvas.Children.Add(stack[i].poolNative(this));\r
+ api_canvas.Children.Add(stack[i].poolNative(this));\r
+ }\r
+ stackN = 0;\r
+ }\r
+ //api_canvas.Children.Clear();\r
+ //api_canvas.Children.Add(tmp);\r
+ lock (this)\r
+ {\r
+ chacked = 0;\r
+ }\r
+ Psychlops.Internal.Main.canvas_flag.Set();\r
+ }\r
+ }\r
+ System.Threading.Thread.Sleep(0);\r
+ }\r
+\r
+\r
\r
#region Properties\r
\r
{\r
return (Rectangle)MemberwiseClone();\r
}\r
- public void copyToStack(Templates.StackableDrawable d)\r
- {\r
- var tmp = d.rectStack[d.rectStackN];\r
- tmp.v1 = v1;\r
- tmp.v2 = v2;\r
- tmp.fill = fill;\r
- d.stack[d.stackN] = tmp; \r
- d.rectStackN++;\r
- d.stackN++;\r
- }\r
public static implicit operator System.Windows.Rect(Rectangle d)\r
{\r
return new System.Windows.Rect(d.v1.x, d.v1.y, d.v2.x, d.v2.y);\r
System.Windows.Controls.Canvas.SetTop(tmp, d.top);\r
return tmp;\r
}\r
- public UIElement toNative() { return this; }\r
\r
+ public UIElement toNative() { return this; }\r
+ public void copyToStack(Templates.StackableDrawable d)\r
+ {\r
+ var tmp = d.rectStack[d.rectStackN];\r
+ tmp.v1 = v1;\r
+ tmp.v2 = v2;\r
+ tmp.fill = fill;\r
+ d.stack[d.stackN] = tmp;\r
+ d.rectStackN++;\r
+ d.stackN++;\r
+ }\r
public UIElement poolNative(Canvas d)\r
{\r
var tmp = d.rectPool[d.rectPoolN];\r
System.Windows.Controls.Canvas.SetTop(tmp, d.top);\r
return tmp;\r
}\r
+\r
public UIElement toNative() { return this; }\r
\r
+ public void copyToStack(Templates.StackableDrawable d)\r
+ {\r
+ var tmp = d.ellipseStack[d.ellipseStackN];\r
+ tmp.datum = datum;\r
+ tmp.xdiameter = xdiameter;\r
+ tmp.ydiameter = ydiameter;\r
+ tmp.fill = fill;\r
+ d.stack[d.stackN] = tmp;\r
+ d.rectStackN++;\r
+ d.stackN++;\r
+ }\r
public UIElement poolNative(Canvas d)\r
{\r
-/* var tmp = d.rectPool[d.rectPoolN];\r
+ var tmp = d.ellipsePool[d.ellipsePoolN];\r
tmp.Width = width;\r
tmp.Height = height;\r
tmp.Fill = fill;\r
System.Windows.Controls.Canvas.SetLeft(tmp, left);\r
System.Windows.Controls.Canvas.SetTop(d.rectPool[d.rectPoolN], top);\r
tmp.Visibility = Visibility.Visible;\r
- d.rectPoolN++;\r
-*/\r
+ d.ellipsePoolN++;\r
return this;\r
}\r
}\r
}\r
public UIElement toNative() { return this; }\r
\r
+ public void copyToStack(Templates.StackableDrawable d)\r
+ {\r
+ var tmp = d.polygonStack[d.polygonStackN];\r
+ tmp.datum = datum;\r
+ tmp.vertices.Clear();\r
+ foreach (var v in vertices)\r
+ {\r
+ tmp.vertices.Add(v);\r
+ }\r
+ tmp.fill = fill;\r
+ d.stack[d.stackN] = tmp;\r
+ d.rectStackN++;\r
+ d.stackN++;\r
+ }\r
public UIElement poolNative(Canvas d)\r
{\r
- /* var tmp = d.rectPool[d.rectPoolN];\r
- tmp.Width = width;\r
- tmp.Height = height;\r
- tmp.Fill = fill;\r
- System.Windows.Controls.Canvas.SetLeft(tmp, left);\r
- System.Windows.Controls.Canvas.SetTop(d.rectPool[d.rectPoolN], top);\r
- tmp.Visibility = Visibility.Visible;\r
- d.rectPoolN++;\r
-*/\r
+ var tmp = d.polygonPool[d.polygonPoolN];\r
+ tmp.Fill = fill;\r
+ /*\r
+ System.Windows.Controls.Canvas.SetLeft(tmp, left);\r
+ System.Windows.Controls.Canvas.SetTop(d.rectPool[d.rectPoolN], top);\r
+ */ \r
+ tmp.Visibility = Visibility.Visible;\r
+ d.polygonPoolN++;\r
return this;\r
}\r
\r
}\r
public UIElement toNative() { return this; }\r
\r
+ public void copyToStack(Templates.StackableDrawable d)\r
+ {\r
+ var tmp = d.polygonStack[d.polygonStackN];\r
+ tmp.datum = datum;\r
+ tmp.fill = fill;\r
+ d.stack[d.stackN] = tmp;\r
+ d.rectStackN++;\r
+ d.stackN++;\r
+ }\r
public UIElement poolNative(Canvas d)\r
{\r
/* var tmp = d.rectPool[d.rectPoolN];\r