- Border paints and multi paints are back! here is a small how-to on paints.
- All strokes classes from Jerry Huxtable's collection are back too, plus a few additions from Jeremy @ Java Graphics: Code Snippets. Here is another small how-to on strokes.
- Most important of all: Custom Nodes!

Now for the code itself
The SphereNode exposes 7 attributes to the outside world using @GfxAttribute. This particular annotation is @Bindable's long lost sibling, it not only performs the same task @Bindable does (making a property an observable one) but it also is able to write an aliased property, this means you can either set a value for the radius: property or r: property (shortcuts!), it doesn't matter as the backing field will be updated accordingly. The node sets some default values for those attributes, those values match the settings for the blue sphere. Moving on to the actual drawing code of the node, it is pretty much the same one found in the painting how-to plus a few tweaks to have all gradients be relative to the node's location. Notice that the radial gradients are now aware of its host's dimensions, this is why setting values for cx: and cy: is now optional.
Drawing 4 spheres is just a matter of setting the appropriate coordinates (cx,cy) and tweaking some of the colors, otherwise we will have a drawing of 4 blue spheres in the same place! There are two ways for adding a custom node to an scene, by defining the node's class as the value of customNode() or passing an instance of a subclass of CustomNode to customNode(), in the end there is not much difference, the builder makes sure your nodes have the proper attribute values set before they are rendered.
Keep on Groovying!