The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Graphics::Primitive::Driver::Cairo - Cairo backend for Graphics::Primitive

SYNOPSIS

    use Graphics::Primitive::Component;
    use Graphics::Primitive::Driver::Cairo;

    my $driver = Graphics::Primitive::Driver::Cairo->new;
    my $container = Graphics::Primitive::Container->new(
        width => $form->sheet_width,
        height => $form->sheet_height
    );
    $container->border->width(1);
    $container->border->color($black);
    $container->padding(
        Graphics::Primitive::Insets->new(top => 5, bottom => 5, left => 5, right => 5)
    );
    my $comp = Graphics::Primitive::Component->new;
    $comp->background_color($black);
    $container->add_component($comp, 'c');

    my $lm = Layout::Manager::Compass->new;
    $lm->do_layout($container);

    my $driver = Graphics::Primitive::Driver::Cairo->new(
        format => 'PDF'
    );
    $driver->draw($container);
    $driver->write('/Users/gphat/foo.pdf');

DESCRIPTION

This module draws Graphics::Primitive objects using Cairo.

IMPLEMENTATION DETAILS

Borders

Borders are drawn clockwise starting with the top one. Since cairo can't do line-joins on different colored lines, each border overlaps those before it. This is not the way I'd like it to work, but i'm opting to fix this later. Consider yourself warned.

Attributes

antialias_mode

Set/Get the antialias mode of this driver. Options are default, none, gray and subpixel.

cairo

This driver's Cairo::Context object

data

Get the data in a scalar for this driver.

format

Get the format for this driver.

surface

Get/Set the surface on which this driver is operating.

Methods

new

Creates a new Graphics::Primitive::Driver::Cairo object. Requires a format.

  my $driver = Graphics::Primitive::Driver::Cairo->new(format => 'PDF');
draw

Draws the specified component. Container's components are drawn recursively.

get_text_bounding_box ($font, $text, $angle)

Returns two Rectangles that encloses the supplied text. The origin's x and y maybe negative, meaning that the glyphs in the text extending left of x or above y.

The first rectangle is the bounding box required for a container that wants to contain the text. The second box is only useful if an optional angle is provided. This second rectangle is the bounding box of the un-rotated text that allows for a controlled rotation. If no angle is supplied then the two rectangles are actually the same object.

If the optional angle is supplied the text will be rotated by the supplied amount in radians.

get_textbox_layout ($tb)

Returns a Graphics::Primitive::Driver::TextLayout for the supplied textbox.

reset

Reset the driver.

write

Write this driver's data to the specified file.

AUTHOR

Cory Watson, <gphat@cpan.org>

ACKNOWLEDGEMENTS

Danny Luna

BUGS

Please report any bugs or feature requests to bug-geometry-primitive at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Geometry-Primitive. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

COPYRIGHT & LICENSE

Copyright 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.

3 POD Errors

The following errors were encountered while parsing the POD:

Around line 943:

'=item' outside of any '=over'

Around line 951:

You forgot a '=back' before '=head1'

Around line 953:

'=item' outside of any '=over'