There are major changes to the structure of papyrus in CVS right now. The biggest changes were necessitated by development of support for reading SVGs. The Papyrus::SVG class will parse an SVG file and create a hierarchy of papyrus objects capable of rendering the SVG. Full SVG support is not yet implemented, but a good chunk is there... enough to load the cairo logo sans gradient.

The Drawable class has seen one of the largest changes. Specific positioning of elements has been moved out of this class (such as set_x, set_y, et. al.) and drawables simply have affine matrices that may be translated, scaled, skewed, etc. (all the things you can do with affine matrices). If you still need the specific positioning mechanism (I do) there is the new AffineDrawableController which can control one or more Drawables and allows specific positioning, scaling, rotation, etc. the way Drawable used to.

Other useful changes are the addition of a Path object that takes a series of PathElements and renders them accordingly. This is similar in concept to the SVG path element.

Also, string identifiers can be associated with objects descending from Papyrus::Object and some minimal support for obtaining an SVG representation of a papyrus scene graph is also possible.

There are still lots of unfinished portions with relation to SVG support and patches are always welcome.