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 <
http://cairographics.org>'s API and CSS
<
http://www.w3.org/Style/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.