I've been hacking on a few projects lately that I finally got wrapped up enough that I could up them to the CPAN. I'll cover each one.
Before I cover the modules, I'd like to explain why I made them. Some of this functionality existed in modules on the CPAN, but it was either complex or tied to a particular implementation. All these modules leverage Moose and it's herd to avoid writing the boring code.
The other reason is that I'm slaving away on a new version of Chart::Clicker. Clicker is the grandfather of all these new modules, as it's previous incarnation held meager implementations of each. The new Clicker supports vector formats (PDF, SVG and PostScript) in addition to it's current PNG format. The API has been reduced to a mere shadow of it's current footprint and it even includes a new bubble renderer.
This module provides simple objects that are necessary when representing simple geometry: Arc, Line, Point, Polygon and Rectangle. More classes and functionality will be added as it is used in more places. A few interesting items that are in my TODO list: bounding box and contains(Point).
I'm was previously familiar with the RGB and CMYK color spaces. When doing the research to create this model I found the wealth of color spaces available and created a simple set of classes to represent them. There are currently no conversion routines included, but I've got noted stashed away for the day I get around to adding things like HSV to RGB conversions.
This module in particular is something of a wheel reinvention. None of the modules available struck my fancy. Using Moose makes implementation so cheap that it's not worth refactoring an existing implementation, so Graphics::Color exists.
Easily the most audacious of my new modules, Layout::Manager aims to provide a service similar to that of Java's layout managers. The included Compass manager is very similar to java's BorderLayout while Single simply stacks components on top of each other, all the same size.
Layout::Manager provides a Component role for widgets that would like to be positioned. The component expects prepare and draw methods to be implemented. The documentation is still a bit lacking, but I've been improving it while writing this paragraph.
This module aims to be the largest of all. Chart::Clicker uses Cairo as it's rendering backend, but Graphics::Primitive is slowly assuming the role of representing all the doodads necessary to draw a chart. When completed, I hope to make Clicker output agnostic by using Graphics::Primitive to represent the various components then passing the whole lot off to a backend.
I've already mentioned the forthcoming Clicker 2.0 release. I'm also batting around the idea of creating a backend agnostic document creation tool. All of these libraries were created with that goal in mind. My new gig has afforded me more time to both create and use these tools. Stay tuned to see what happens next.