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