NAME
Graphics::Primitive - Device and library agnostic graphic primitives
SYNOPSIS
Graphics::Primitive is a device and library agnostic system for creating and manipulating various graphical elements such as Borders, Fonts, Paths and the like.
my
$c
= Graphics::Primitive::Component->new(
background_color
=> Graphics::Color::RGB->new(
red
=> 1,
green
=> 0,
blue
=> 0
),
width
=> 500,
height
=> 350,
border
=> new Graphics::Primitive::Border->new(
width
=> 5 )
);
my
$driver
= Graphics::Primitive::Driver::Cairo->new(
format
=>
'SVG'
);
$driver
->prepare(
$c
);
$driver
->finalize(
$c
);
$driver
->draw(
$c
);
$driver
->
write
(
$filename
)
DESCRIPTION
Graphics::Primitive is library agnostic system for drawing things.
The idea is to allow you to create and manipulate graphical components and then pass them off to a Driver for actual drawing.
CONCEPTS
The root object for Graphics::Primitive is the Component. Components contain all the common elements that you'd expect: margins, padding, background color etc.
The next most important is the Container. Containers are Components that can hold other Components. Containers have all the attributes and methods of a Component with the addition of the layout_manager attribute for us with Layout::Manager.
Another important Component is the Canvas. The Canvas differs from other components by being a container for various Geometry::Primitive objects. This allows drawing of arbitrary shapes that do not fit existing components.
DRAWING LIFECYCLE
After creating all your components, there is a lifecycle that allows them to do their internal housekeeping to prepare for eventual drawing. The lifecycle is: prepare, layout and pack. Detailed explanation of these methods can be found in Component.
PREPARATION
Graphics::Primitive::Component has a prepared
flag. This flag is set as part of the prepare
method (shocking, I know). If this flag is set, then subsequent calls to prepare
are ignored. Containers also have a prepare flag, but this flag is not set when calling prepare
. A Container's flag should be set by the layout manager. More information may be found with Layout::Manager.
INSPIRATION
Most of the concepts that you'll find in Graphics::Primitive are inspired by Cairo's API and CSS's box model.
AUTHOR
Cory Watson, <gphat@cpan.org>
CONTRIBUTORS
Florian Ragwitz
ACKNOWLEDGEMENTS
Many of the ideas here come from my experience using the Cairo library.
COPYRIGHT & LICENSE
Copyright 2008-2010 by Cory G Watson.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.