Hi Lucas, I'm glad someone else has some interest in pushing piccolo2d in that direction.
You may want to take a look at the source code in the repo there's an entire branch dedicated to doing pretty much what you're talking about: http://code.google.com/p/piccolo2d/source/browse#svn/piccolo2d.js/trunk You may also want to see it in action at http://www.machete.ca/piccolo2d.js/ I'd love to collaborate on pushing it forward. Let me know, Allain Lalonde On May 4, 3:32 pm, lucasjordan <lucasjor...@gmail.com> wrote: > I seem to have started down a possibly foolish path and I wanted to > get some feedback. I have started porting Piccolo to the new HTML5 > Canvas API. Mind you I am only a few hours into this, but here are my > thoughts up to this point. > > After reviewing the Canvas API I noticed that it is rather similar to > Graphics2D, which makes sense since it is solving a similar problem; > writing raster graphics. I have not had the chance to do a feature by > feature comparison, so there is probably something missing which will > bit me down the road. > > After looking at the implementation of a number of the PNode > subclasses, it looked to me like a number of them could use Canvas to > accomplish at least a similar visual effect. Things like PImage and > PPath looks like they should work and hopefully PText will work as > well. I suspect PHtmlView will never work, but maybe that's ok. > > Basically I am using GWT to take as much of the Java Code from > Piccolo2D and use the project gwt-canvas to provide the Graphics2D > type functionality. Since Piccolo depends so heavily on java.awt and > java.awt.geom and the awt packages are not supported in GWT I am > including a copy of those source files in the GWT project. For > example, Piccolo depends on java.awt.Rectangle, so I copy the existing > Rectangle class to a java.gwt.Rectangle and simply change the import > statement in the Piccolo code. > > Copying the awt classes looks like it is going to work in general but > there are few problems which have shown themselves. First, most of the > geometry type classes (Rectangle2D, Point2D, etc) only depend on them > selves and java.lang.Math, so this makes them viable classes to be > used with GWT, but some of them depends on internal sun.java.bla.bla.* > classes, which I don't currently have the source code for. The second > problem as I have not had a chance to review the legal issue in > reusing Oracle's code in this way. I has occurred to me I might have > better luck taking the code from Apache's project harmony, but again I > have not gotten that far. For that matter I am not sure about altering > the Piccolo2D code either. > > It is my intention to make all of the work I am going here as free as > possible, so if someone has some experience with this, helping me make > sure that everyone's licenses are being properly honored, please let > me know. > > Another concern of mine is that Piccolo does a lot more than just draw > a scene, it also provides node picking and other input events, I am > not sure how well that is going to work. A HTML5 Canvas element is > able to receive mouse and keyboard events, I just don't know if those > will be descriptive enough work with the existing Piccolo APIs. > > Another issue is that JavaScript (which GWT code ultimately becomes) > does not support a double precision floating point values. GWT allows > you to use Java doubles in your code, but behind the scene they are > actually using two single precision float values to store the data and > they do some magic to manage those values for you. It is stated in the > GWT docs that this includes some overhead. So, since I am basically > copying all of the awt classes, I could just turn every double into a > float and then do the same to the piccolo code.... I have not started > doing this, but this is another topic I would like some feedback on. > > So those are basically my technical concerns up to this point. But you > might be asking, "why are you doing this?" and basically it comes down > creating a cross platform scene graph API. I have worked with Piccolo > in the past and know that it is a solid scene graph API. I have also > worked a lot with JavaFX and know that that brings an excellent scene > graph API as well, plus it has properties and value binding, it is a > real pleasure to work with. But both of these APIs are dependent on > the presence of a modern JVM and frankly I don't see a real JVM > showing up on the devices I want to develop for. But on all of the > devices I want to developer for there is HTML5 compliant browser, this > includes, all desktop computers, Apple's i products, set top boxes, > Android and any other future google device, and many more. > > I considered SVG, which also has pretty good cross platform support, > but there are limitations, especially coming from the Microsoft side > of things which claim they will not be including the animation > features. > > Anyway, thanks for reading all this, I would love to get a reality > check here :) > > -Lucas > > Resources:http://www.piccolo2d.org/http://code.google.com/webtoolkit/http://code.google.com/p/gwt-canvas/http://harmony.apache.org/ > > -- > Piccolo2D Developers Group:http://groups.google.com/group/piccolo2d-dev?hl=en -- Piccolo2D Developers Group: http://groups.google.com/group/piccolo2d-dev?hl=en