NAME¶
Graphics::Primitive::Driver - Role for driver implementations
DESCRIPTION¶
What good is a library agnostic intermediary representation of graphical
components if you can't feed them to a library specific implementation that
turns them into drawings? Psht, none!
To write a driver for Graphics::Primitive implement this role.
SYNOPSIS¶
my $c = Graphics::Primitive::Component->new({
origin => Geometry::Primitive::Point->new({
x => $x, y => $y
}),
width => 500, height => 350
});
CANVASES¶
When a path is added to the internal list via
do, it is stored in the
paths attribute as a hashref. The hashref has two keys:
path and
op. The path is, well, the path. The op is the operation provided to
do. As canvases are just lists of paths you should consult the next
section as well.
PATHS AND HINTING¶
Paths are lists of primitives. Primitives are all descendants of Geometry::Shape
and therefore have
point_start and
point_end. These two
attributes allow the chaining of primitives. To draw a path you should iterate
over the primitives, drawing each.
When you pull each path from the arrayref you should pull it's accompanying
hints via
get_hint (the indexes match). The hint may provide you with
additional information:
PRIMITIVE HINTS¶
- contiguous
- True if this primitive is contiguous with the previous one. Example: Used
to determine if a new sub-path is needed for the Cairo driver.
OPERATION HINTS¶
- preserve
WARNING¶
Only this class or the driver itself should call methods starting with an
underscore, as this interface may change.
METHODS¶
- _do_stroke ($strokeop)
- Perform a stroke.
- _do_fill ($fillop)
- Perform a fill.
- _draw_arc ($arc)
- Draw an arc.
- _draw_canvas ($canvas)
- Draw a canvas.
- _draw_component ($comp)
- Draw a component.
- _draw_line ($line)
- Draw a line.
- _draw_rectangle ($rect)
- Draw a rectangle.
- _draw_textbox
- Draw a textbox.
- _resize ($width, $height)
- Resize the current working surface to the size specified.
- _finish_page
- Finish the current 'page' and start a new one. Some drivers that are not
paginated may need to emulate this behaviour.
- data
- Retrieve the results of this driver's operations.
- draw
- Draws the given Graphics::Primitive::Component. If the component is a
container then all components therein are drawn, recursively.
- get_text_bounding_box
- Given a Font and a string, returns a bounding box of the rendered
text.
- finalize
- Finalize the supplied component and any child components,
recursively.
- prepare
- Prepare the supplied component and any child components, recursively.
- write
- Write out the results of this driver's operations to the specified
file.
AUTHOR¶
Cory Watson, "<gphat@cpan.org>"
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.