OSDN Git Service

5
[psychlops/silverlight.git] / dev5 / psychlops / core / graphic / canvas.cs
index e67c6ae..0560bea 100644 (file)
@@ -18,10 +18,13 @@ namespace Psychlops
 \r
        internal static partial class CONST\r
        {\r
-               internal static readonly Int32 MAX_OBJ_N = 1500;\r
-               internal static readonly Int32 MOBJ_N = 1000;\r
-               internal static readonly Int32 COBJ_N = 300;\r
-               internal static readonly Int32 HOBJ_N = 100;\r
+               internal static readonly Int32 MAX_OBJ_N = 4096;//65535;\r
+               internal static readonly Int32 MOBJ_N = 2048;//16384;\r
+               internal static readonly Int32 COBJ_N = 300;//4096;\r
+               internal static readonly Int32 HOBJ_N = 100;//1024;\r
+               internal static readonly Int32 MOBJ_I = 500;\r
+               internal static readonly Int32 COBJ_I = 300;\r
+               internal static readonly Int32 HOBJ_I = 100;\r
        }\r
 \r
        namespace Templates\r
@@ -33,21 +36,21 @@ namespace Psychlops
                        internal Internal.PrimitiveFigure[] stack;\r
                        internal int stackN = 0;\r
                        internal Line[] lineStack;\r
-                       internal int lineStackN = 0;\r
+                       internal int lineStackN = 0, lineStackMAX = 0;\r
                        internal Rectangle[] rectStack;\r
-                       internal int rectStackN = 0;\r
+                       internal int rectStackN = 0, rectStackMAX = 0;\r
                        internal ShaderField[] shaderStack;\r
-                       internal int shaderStackN = 0;\r
+                       internal int shaderStackN = 0, shaderStackMAX = 0;\r
                        internal Ellipse[] ellipseStack;\r
-                       internal int ellipseStackN = 0;\r
+                       internal int ellipseStackN = 0, ellipseStackMAX = 0;\r
                        internal Polygon[] polygonStack;\r
-                       internal int polygonStackN = 0;\r
+                       internal int polygonStackN = 0, polygonStackMAX = 0;\r
                        internal Letters[] lettersStack;\r
-                       internal int lettersStackN = 0;\r
+                       internal int lettersStackN = 0, lettersStackMAX = 0;\r
                        internal Image[] imageStack;\r
-                       internal int imageStackN = 0;\r
+                       internal int imageStackN = 0, imageStackMAX = 0;\r
                        internal Group[] groupStack;\r
-                       internal int groupStackN = 0;\r
+                       internal int groupStackN = 0, groupStackMAX = 0;\r
 \r
                        public StackableDrawable()\r
                        {\r
@@ -60,24 +63,30 @@ namespace Psychlops
                                lettersStack = new Letters[CONST.COBJ_N];\r
                                imageStack = new Image[CONST.HOBJ_N];\r
                                groupStack = new Group[CONST.HOBJ_N];\r
-                               for (int i = 0; i < CONST.MOBJ_N; i++)\r
+                               for (int i = 0; i < CONST.MOBJ_I; 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 < CONST.COBJ_N; i++)\r
+                               rectStackMAX = CONST.MOBJ_I;\r
+                               for (int i = 0; i < CONST.COBJ_I; i++)\r
                                {\r
+                                       lineStack[i] = new Line(0, 0, 0, 0);\r
+                                       ellipseStack[i] = new Ellipse();\r
                                        shaderStack[i] = new ShaderField();\r
                                        polygonStack[i] = new Polygon();\r
-                                       lettersStack[i] = new Letters();\r
                                }\r
-                               for (int i = 0; i < CONST.HOBJ_N; i++)\r
+                               lineStackMAX = CONST.COBJ_I;\r
+                               shaderStackMAX = CONST.COBJ_I;\r
+                               ellipseStackMAX = CONST.COBJ_I;\r
+                               polygonStackMAX = CONST.COBJ_I;\r
+                               for (int i = 0; i < CONST.HOBJ_I; i++)\r
                                {\r
                                        imageStack[i] = new Image();\r
+                                       lettersStack[i] = new Letters();\r
 //                                     groupStack[i] = new Group();\r
                                }\r
-\r
+                               imageStackMAX = CONST.HOBJ_I;\r
+                               lettersStackMAX = CONST.HOBJ_I;\r
 \r
                        }\r
 \r
@@ -116,30 +125,30 @@ namespace Psychlops
                internal System.Windows.Point[] pointPool;\r
                internal int pointPoolN;\r
                internal SolidColorBrush[] brushPool;\r
-               internal int brushPoolN;\r
+               internal int brushPoolN, brushPoolMAX;\r
 \r
                internal System.Windows.Controls.Canvas[] UIElementPool;\r
                internal int UIElementPoolN;\r
                internal int lastVisibleN;\r
 \r
                internal System.Windows.Shapes.Line[] linePool;\r
-               internal int linePoolN;\r
+               internal int linePoolN, linePoolMAX;\r
                internal System.Windows.Shapes.Rectangle[] dummyRectPool;\r
                internal System.Windows.Shapes.Rectangle[] rectPool;\r
-               internal int rectPoolN;\r
+               internal int rectPoolN, rectPoolMAX;\r
                internal System.Windows.Shapes.Rectangle[] shaderPool;\r
-               internal int shaderPoolN;\r
+               internal int shaderPoolN, shaderPoolMAX;\r
                internal System.Windows.Shapes.Ellipse[] ellipsePool;\r
-               internal int ellipsePoolN;\r
+               internal int ellipsePoolN, ellipsePoolMAX;\r
                internal System.Windows.Shapes.Polygon[] polygonPool;\r
-               internal int polygonPoolN;\r
+               internal int polygonPoolN, polygonPoolMAX;\r
                internal System.Windows.Controls.TextBlock[] lettersPool;\r
-               internal int lettersPoolN;\r
+               internal int lettersPoolN, lettersPoolMAX;\r
                internal System.Windows.Controls.Image[] imagePool;\r
-               internal int imagePoolN;\r
+               internal int imagePoolN, imagePoolMAX;\r
                internal Dictionary<int, bool> imagePoolT;\r
                internal System.Windows.Controls.Canvas[] groupPool;\r
-               internal int groupPoolN;\r
+               internal int groupPoolN, groupPoolMAX;\r
 \r
                #region initializer\r
 \r
@@ -211,31 +220,31 @@ namespace Psychlops
 \r
                        pointPool = new System.Windows.Point[CONST.MOBJ_N];\r
                        brushPool = new SolidColorBrush[CONST.MOBJ_N];\r
-                       linePool = new System.Windows.Shapes.Line[CONST.MOBJ_N];\r
                        rectPool = new System.Windows.Shapes.Rectangle[CONST.MOBJ_N];\r
-                       ellipsePool = new System.Windows.Shapes.Ellipse[CONST.MOBJ_N];\r
                        for (int i = 0; i < CONST.MOBJ_N; i++)\r
                        {\r
-                               pointPool[i] = new System.Windows.Point();\r
+                               //pointPool[i] = new System.Windows.Point();\r
                                brushPool[i] = new SolidColorBrush();\r
-                               linePool[i] = new System.Windows.Shapes.Line();\r
                                rectPool[i] = new System.Windows.Shapes.Rectangle();\r
-                               ellipsePool[i] = new System.Windows.Shapes.Ellipse();\r
                        }\r
+                       ellipsePool = new System.Windows.Shapes.Ellipse[CONST.COBJ_N];\r
+                       linePool = new System.Windows.Shapes.Line[CONST.COBJ_N];\r
                        shaderPool = new System.Windows.Shapes.Rectangle[CONST.COBJ_N];\r
                        polygonPool = new System.Windows.Shapes.Polygon[CONST.COBJ_N];\r
-                       lettersPool = new System.Windows.Controls.TextBlock[CONST.COBJ_N];\r
                        for (int i = 0; i < CONST.COBJ_N; i++)\r
                        {\r
+                               linePool[i] = new System.Windows.Shapes.Line();\r
+                               ellipsePool[i] = new System.Windows.Shapes.Ellipse();\r
                                shaderPool[i] = new System.Windows.Shapes.Rectangle();\r
                                polygonPool[i] = new System.Windows.Shapes.Polygon();\r
-                               lettersPool[i] = new System.Windows.Controls.TextBlock();\r
                        }\r
+                       lettersPool = new System.Windows.Controls.TextBlock[CONST.HOBJ_N];\r
                        imagePool = new System.Windows.Controls.Image[CONST.HOBJ_N];\r
                        imagePoolT = new Dictionary<int, bool>(CONST.HOBJ_N);\r
                        groupPool = new System.Windows.Controls.Canvas[CONST.HOBJ_N];\r
                        for (int i = 0; i < CONST.HOBJ_N; i++)\r
                        {\r
+                               lettersPool[i] = new System.Windows.Controls.TextBlock();\r
                                imagePool[i] = new System.Windows.Controls.Image();\r
                                imagePoolT.Add(imagePool[i].GetHashCode(), false);\r
                                groupPool[i] = new System.Windows.Controls.Canvas();\r
@@ -878,6 +887,14 @@ namespace Psychlops
                public UIElement toNative() { return this; }\r
                public void copyToStack(Templates.StackableDrawable d)\r
                {\r
+                       if (d.rectStackMAX <= d.rectStackN)\r
+                       {\r
+                               d.rectStackMAX += CONST.HOBJ_I;\r
+                               for (int i = d.rectStackN; i < d.rectStackMAX; i++)\r
+                               {\r
+                                       d.rectStack[i] = new Rectangle();\r
+                               }\r
+                       }\r
                        var tmp = d.rectStack[d.rectStackN];\r
                        tmp.v1 = v1;\r
                        tmp.v2 = v2;\r