using System.Windows.Browser;\r
\r
using System.Collections.Generic;\r
-\r
+ \r
\r
\r
namespace Psychlops\r
{\r
// protected System.Collections.Generic.Queue<Internal.PrimitiveFigure> stack;\r
internal Internal.PrimitiveFigure[] stack;\r
- internal int stackN;\r
+ internal int stackN = 0;\r
internal Line[] lineStack;\r
- internal int lineStackN;\r
+ internal int lineStackN = 0;\r
internal Rectangle[] rectStack;\r
- internal int rectStackN;\r
+ internal int rectStackN = 0;\r
+ internal ShaderField[] shaderStack;\r
+ internal int shaderStackN = 0;\r
internal Ellipse[] ellipseStack;\r
- internal int ellipseStackN;\r
+ internal int ellipseStackN = 0;\r
internal Polygon[] polygonStack;\r
- internal int polygonStackN;\r
+ internal int polygonStackN = 0;\r
internal Letters[] lettersStack;\r
- internal int lettersStackN;\r
+ internal int lettersStackN = 0;\r
internal Image[] imageStack;\r
- internal int imageStackN;\r
+ internal int imageStackN = 0;\r
internal Group[] groupStack;\r
- internal int groupStackN;\r
-\r
+ internal int groupStackN = 0;\r
\r
public StackableDrawable()\r
{\r
lineStack = new Line[CONST.MOBJ_N];\r
rectStack = new Rectangle[CONST.MOBJ_N];\r
ellipseStack = new Ellipse[CONST.MOBJ_N];\r
+ shaderStack = new ShaderField[CONST.COBJ_N];\r
polygonStack = new Polygon[CONST.COBJ_N];\r
lettersStack = new Letters[CONST.COBJ_N];\r
imageStack = new Image[CONST.HOBJ_N];\r
}\r
for (int i = 0; i < CONST.COBJ_N; i++)\r
{\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
{\r
- imageStack[i] = new Image(1, 1);\r
- groupStack[i] = new Group();\r
+ imageStack[i] = new Image();\r
+// groupStack[i] = new Group();\r
}\r
+\r
+\r
}\r
\r
public void clear() { clear(Color.black); }\r
public virtual void line(Line drawee) { drawee.copyToStack(this); }\r
public virtual void rect(Rectangle drawee) { drawee.copyToStack(this); }\r
public virtual void ellipse(Ellipse drawee) { drawee.copyToStack(this); }\r
+ public virtual void oval(Ellipse drawee) { drawee.copyToStack(this); }\r
public virtual void polygon(Polygon drawee) { drawee.copyToStack(this); }\r
public virtual void letters(Letters drawee) { drawee.copyToStack(this); }\r
public virtual void image(Image drawee) { drawee.copyToStack(this); }\r
public virtual void group(Group drawee) { drawee.copyToStack(this); }\r
+ public virtual void shader(ShaderField drawee) { drawee.copyToStack(this); }\r
\r
public void msg(string str, double x, double y) { msg(str, x, y, Color.white); }\r
public virtual void msg(string dstr, double x, double y, Color col)\r
internal System.Windows.Shapes.Rectangle[] dummyRectPool;\r
internal System.Windows.Shapes.Rectangle[] rectPool;\r
internal int rectPoolN;\r
+ internal System.Windows.Shapes.Rectangle[] shaderPool;\r
+ internal int shaderPoolN;\r
internal System.Windows.Shapes.Ellipse[] ellipsePool;\r
internal int ellipsePoolN;\r
internal System.Windows.Shapes.Polygon[] polygonPool;\r
\r
#region initializer\r
\r
- internal delegate void TwoIntProcedure(int x, int y);\r
- internal delegate void SimpleProcedure();\r
- SimpleProcedure flipexec;\r
+ Action flipexec;\r
+ public static IList<Action> initialize_at_canvas_initialize__ = new List<Action>();\r
\r
public static System.Windows.Controls.UserControl default_panel;\r
public static System.Windows.Controls.Canvas default_api_canvas;\r
}\r
\r
protected bool AsyncInitBool;\r
+ internal void beginInvoke(Action a) { api_canvas.Dispatcher.BeginInvoke(a); }\r
protected void initialize(int wid, int hei)\r
{\r
before = new Clock();\r
before.update();\r
+ var after = new Clock();\r
AsyncInitBool = false;\r
width_ = wid;\r
height_ = hei;\r
- api_canvas.Dispatcher.BeginInvoke(new TwoIntProcedure(initialize__), wid, hei);\r
- while(!AsyncInitBool)\r
+ api_canvas.Dispatcher.BeginInvoke(new Action<int,int>(initialize__), wid, hei);\r
+ while (!AsyncInitBool)\r
{\r
+ after.update();\r
+ if ((after - before).at_msec() > 1000) break;\r
}\r
Mouse._prime = api_canvas;\r
Main.drawable = this;\r
\r
back_panel = new Rectangle(wid, hei);\r
\r
- flipexec = new SimpleProcedure(executeFlip);\r
- AppState.statusBar = "";\r
+ flipexec = new Action(executeFlip);\r
}\r
protected void initialize__(int wid, int hei)\r
{\r
HtmlElement htmlHost = HtmlPage.Document.GetElementById("silverlightControlHost");\r
//if (htmlHost != null) HtmlPage.Window.Alert("silverlightControlHost is null");\r
htmlHost.SetStyleAttribute("width", (wid).ToString()+"px");\r
- htmlHost.SetStyleAttribute("height", (20+hei).ToString() + "px");\r
+ htmlHost.SetStyleAttribute("height", (hei).ToString() + "px");\r
htmlHost.SetStyleAttribute("margin", "2em auto auto auto");\r
\r
pointPool = new System.Windows.Point[CONST.MOBJ_N];\r
rectPool[i] = new System.Windows.Shapes.Rectangle();\r
ellipsePool[i] = new System.Windows.Shapes.Ellipse();\r
}\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
+ 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
Psychlops.Internal.Main.widgetStack.Orientation = Orientation.Vertical;\r
Psychlops.Internal.Main.widgetStack.Height = hei;\r
api_canvas.Children.Add(Psychlops.Internal.Main.widgetStack);\r
- \r
+ Internal.Main.statusBar.Visibility = Visibility.Collapsed;\r
\r
\r
UIElementPool = new System.Windows.Controls.Canvas[CONST.MAX_OBJ_N];\r
dummyRectPool[i].Visibility = Visibility.Collapsed;\r
}\r
\r
-\r
AsyncInitBool = true;\r
+\r
+ // initialize at Canvas initializing\r
+ //Figures.ShaderGabor.initialize__();\r
}\r
\r
internal int findEmptyInPool(Dictionary<int, bool> pool)\r
//pointStackN = 0;\r
lineStackN = 0;\r
rectStackN = 0;\r
+ shaderStackN = 0;\r
polygonStackN = 0;\r
ellipseStackN = 0;\r
lettersStackN = 0;\r
#region version modifyNative2\r
public void executeFlip()\r
{\r
- Clock after = new Clock();\r
- after.update();\r
- AppState.statusBar = ((after - before).at_msec().ToString()) + " msec";\r
+// Clock after = new Clock();\r
+// after.update();\r
+// AppState.statusBar = ((after - before).at_msec().ToString()) + " msec";\r
\r
Line lineS;\r
+ ShaderField shaderS;\r
Rectangle rectS;\r
Ellipse ellipseS;\r
Polygon polygonS;\r
Group groupS;\r
System.Windows.Shapes.Line lineP;\r
System.Windows.Shapes.Rectangle rectP;\r
+ System.Windows.Shapes.Rectangle shaderP;\r
System.Windows.Shapes.Ellipse ellipseP;\r
System.Windows.Shapes.Polygon polygonP;\r
System.Windows.Controls.TextBlock lettersP;\r
{\r
for (int i = 0; i < stackN; i++)\r
{\r
- if( null != (rectS = stack[i] as Rectangle) )\r
+ if (null != (shaderS = stack[i] as ShaderField))\r
+ {\r
+ if (null != (shaderP = cnv.Children[0] as System.Windows.Shapes.Rectangle))\r
+ {\r
+ shaderS.modifyNative(shaderP, this);\r
+ }\r
+ else\r
+ {\r
+ cnv.Children.Clear();\r
+ cnv.Children.Add(stack[i].poolNative(this));\r
+ }\r
+ }\r
+ else if( null != (rectS = stack[i] as Rectangle) )\r
{\r
if (null != (rectP = cnv.Children[0] as System.Windows.Shapes.Rectangle))\r
{\r
}\r
#endregion\r
\r
+\r
+\r
#region version modifyNative\r
/*\r
public void executeFlip()\r
initialize(500, 500);\r
}\r
public Canvas(Mode mod)\r
+ : base()\r
+ {\r
+ panel = default_panel;\r
+ api_canvas = default_api_canvas;\r
+ initialize(500, 500);\r
+ }\r
+\r
+ public Canvas(int wid, int hei, Mode mod, Display.DisplayName name)\r
+ {\r
+ panel = default_panel;\r
+ api_canvas = default_api_canvas;\r
+ initialize(500, 500);\r
+ }\r
+ public Canvas(Mode mod, Display.DisplayName name)\r
+ : base()\r
{\r
panel = default_panel;\r
api_canvas = default_api_canvas;\r
{\r
return new System.Windows.Point(d.x, d.y);\r
}\r
+\r
+\r
+ public Point datum { get { return this; } set { this = value; } }\r
+ public Point shift(Point p) { this = this + p; return this; }\r
+ public Point centering(Point p) { this = p; return this; }\r
+ public Point getDatum() { return this; }\r
+ public Point setDatum(Point p) { this = p; return p; }\r
+ public Point shift(double x, double y, double z = 0.0) { return shift(new Point(x, y, z)); }\r
+ public Point centering() { return centering(Main.drawable.getCenter()); }\r
+ public Point centering(double x, double y, double z = 0.0) { return centering(new Point(x, y, z)); }\r
}\r
\r
partial struct Color\r
}\r
\r
#endregion\r
+ \r
+ #region ShaderField\r
+\r
+ partial class ShaderField\r
+ {\r
+ public System.Windows.Media.Effects.Effect shader;\r
+ protected static System.Windows.Media.SolidColorBrush dummyfill = null;\r
+\r
+ protected static void initializeShader()\r
+ {\r
+ dummyfill = new SolidColorBrush(System.Windows.Media.Colors.Blue);\r
+ }\r
+\r
+ public UIElement toNative() { return null; }\r
+ public void copyToStack(Templates.StackableDrawable d)\r
+ {\r
+ var tmp = d.shaderStack[d.shaderStackN];\r
+ tmp.initialize__ = initialize__;\r
+ tmp.setParameters = setParameters;\r
+ tmp.v1 = v1;\r
+ tmp.v2 = v2;\r
+ tmp.shader = shader;\r
+ d.stack[d.stackN] = tmp;\r
+ d.shaderStackN++;\r
+ d.stackN++;\r
+ }\r
+ public UIElement poolNative(Canvas d)\r
+ {\r
+ var tmp = d.shaderPool[d.shaderPoolN];\r
+ tmp.Width = width;\r
+ tmp.Height = height;\r
+ if (!initialized) { initialize__(); }\r
+ setParameters();\r
+ tmp.Effect = shader;\r
+ tmp.Fill = dummyfill;\r
+ System.Windows.Controls.Canvas.SetLeft(tmp, left);\r
+ System.Windows.Controls.Canvas.SetTop(tmp, top);\r
+ tmp.Visibility = Visibility.Visible;\r
+ d.shaderPoolN++;\r
+ return tmp;\r
+ }\r
+ public void modifyNative(System.Windows.Shapes.Rectangle tmp, Canvas d)\r
+ {\r
+ tmp.Width = width;\r
+ tmp.Height = height;\r
+ if (!initialized) { initialize__(); }\r
+ setParameters();\r
+ tmp.Effect = shader;\r
+ tmp.Fill = dummyfill;\r
+ System.Windows.Controls.Canvas.SetLeft(tmp, left);\r
+ System.Windows.Controls.Canvas.SetTop(tmp, top);\r
+ tmp.Visibility = Visibility.Visible;\r
+ }\r
+ }\r
+\r
+ #endregion\r
\r
#region Ellipse\r
\r
internal void initialize__(int wid, int hei)\r
{\r
AsyncBool = false;\r
- Canvas.default_api_canvas.Dispatcher.BeginInvoke(new Canvas.TwoIntProcedure(create__), wid, hei);\r
+ Canvas.default_api_canvas.Dispatcher.BeginInvoke(new Action<int,int>(create__), wid, hei);\r
while (!AsyncBool) { System.Threading.Thread.Sleep(10); }\r
}\r
internal void create__(int wid, int hei)\r
var bitmap = new BitmapImage();\r
bitmap.CreateOptions = BitmapCreateOptions.None;\r
bitmap.UriSource = uri;\r
- try\r
- {\r
+ //try\r
+ //{\r
var wbm = new System.Windows.Media.Imaging.WriteableBitmap(bitmap);\r
buffer = wbm;\r
- }\r
- catch (Exception e)\r
- {\r
- buffer = new WriteableBitmap(64, 64);\r
- buffer.ForEach(bitmap_drawChecker);\r
- }\r
+ //}\r
+ //catch (Exception e)\r
+ //{\r
+ // buffer = new WriteableBitmap(64, 64);\r
+ // buffer.ForEach(bitmap_drawChecker);\r
+ //}\r
self_rect.set(buffer.PixelWidth, buffer.PixelHeight);\r
AsyncBool = true;\r
}\r
{\r
internal void initialize__()\r
{\r
- Canvas.default_api_canvas.Dispatcher.BeginInvoke(new Canvas.SimpleProcedure(create__));\r
+ Canvas.default_api_canvas.Dispatcher.BeginInvoke(new Action(create__));\r
}\r
internal void create__()\r
{\r