[piccolo2d-dev] Porting Piccolo to Canvas
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-dev] Re: Porting Piccolo to Canvas
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 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
Re: [piccolo2d-dev] Porting Piccolo to Canvas
lucasjordan wrote: > I seem to have started down a possibly foolish path and I wanted to > get some feedback. Nothing foolish about this -- several piccolo developers have thoughts in this direction as well. > I have started porting Piccolo to the new HTML5 Canvas API. See also http://code.google.com/p/piccolo2d/source/browse#svn/piccolo2d.js/trunk > 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. I don't think copying java code through GWT is the right direction to go. If you're planning on writing javascript, write it directly. There are several vis libraries written on javascript already, including Protovis http://vis.stanford.edu/protovis/ Processing.js http://processingjs.org/ JavaScript InfoVis Toolkit http://thejit.org/ > 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. Piccolo2D's license is clear. So is Project Harmony's. Using JDK code is much more iffy. michael -- Piccolo2D Developers Group: http://groups.google.com/group/piccolo2d-dev?hl=en
Re: [piccolo2d-dev] Porting Piccolo to Canvas
Thanks you for those links to those other tools. They look very promising. In general I agree that working through GWT is the wrong way to go, since a 'native' javascript can always be wrapped by GWT anyway. I was just hoping to get a familiar API up and running quickly. Looking at the existing Piccolo.js stuff, that looks very promising as well. I will have to spend some time evaluating these new (to me) libraries and piccolo.js. Thanks -Lucas On Tue, May 4, 2010 at 3:50 PM, Michael Heuer wrote: > lucasjordan wrote: > > > I seem to have started down a possibly foolish path and I wanted to > > get some feedback. > > Nothing foolish about this -- several piccolo developers have thoughts > in this direction as well. > > > > I have started porting Piccolo to the new HTML5 Canvas API. > > See also > > http://code.google.com/p/piccolo2d/source/browse#svn/piccolo2d.js/trunk > > > > 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. > > I don't think copying java code through GWT is the right direction to > go. If you're planning on writing javascript, write it directly. > There are several vis libraries written on javascript already, > including > > Protovis > http://vis.stanford.edu/protovis/ > > Processing.js > http://processingjs.org/ > > JavaScript InfoVis Toolkit > http://thejit.org/ > > > > 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. > > Piccolo2D's license is clear. So is Project Harmony's. Using JDK > code is much more iffy. > > michael > > -- > Piccolo2D Developers Group: > http://groups.google.com/group/piccolo2d-dev?hl=en > -- Piccolo2D Developers Group: http://groups.google.com/group/piccolo2d-dev?hl=en