logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

Graphics::Primitive - Device and library agnostic graphic primitives

Acknowledgements

       Many of the ideas here come from my experience using the Cairo library.

Author

       Cory Watson, "<gphat@cpan.org>"

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.

Contributors

       Florian Ragwitz

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.

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.

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.

Name

       Graphics::Primitive - Device and library agnostic graphic primitives

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.

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)

See Also