- NAME
- SYNOPSIS
- ABSTRACT
- API DOCUMENTATION
- Drawing
- Cairo::Context - The cairo drawing context
- $cr = Cairo::Context->create ($surface)
- $cr->save
- $cr->restore
- $status = $cr->status
- $surface = $cr->get_target
- $cr->push_group [1.2]
- $cr->push_group_with_content ($content) [1.2]
- $pattern = $cr->pop_group [1.2]
- $cr->pop_group_to_source [1.2]
- $surface = $cr->get_group_target [1.2]
- $cr->set_source_rgb ($red, $green, $blue)
- $cr->set_source_rgba ($red, $green, $blue, $alpha)
- $cr->set_source ($source)
- $cr->set_source_surface ($surface, $x, $y)
- $source = $cr->get_source
- $cr->set_antialias ($antialias)
- $antialias = $cr->get_antialias
- $cr->set_dash ($offset, ...)
- $cr->set_fill_rule ($fill_rule)
- $fill_rule = $cr->get_fill_rule
- $cr->set_line_cap ($line_cap)
- $line_cap = $cr->get_line_cap
- $cr->set_line_join ($line_join)
- $line_join = $cr->get_line_join
- $cr->set_line_width ($width)
- $width = $cr->get_line_width
- $cr->set_miter_limit ($limit)
- ($offset, @dashes) = $cr->get_dash [1.4]
- $limit = $cr->get_miter_limit
- $cr->set_operator ($op)
- $op = $cr->get_operator
- $cr->set_tolerance ($tolerance)
- $tolerance = $cr->get_tolerance
- $cr->clip
- $cr->clip_preserve
- ($x1, $y1, $x2, $y2) = $cr->clip_extents [1.4]
- @rectangles = $cr->copy_clip_rectangle_list [1.4]
- $cr->reset_clip
- $cr->fill
- $cr->fill_preserve
- ($x1, $y1, $x2, $y2) = $cr->fill_extents
- $bool = $cr->in_fill ($x, $y)
- $cr->mask ($pattern)
- $cr->mask_surface ($surface, $surface_x, $surface_y)
- $cr->paint
- $cr->paint_with_alpha ($alpha)
- $cr->stroke
- $cr->stroke_preserve
- ($x1, $y1, $x2, $y2) = $cr->stroke_extents
- $bool = $cr->in_stroke ($x, $y)
- $cr->copy_page
- $cr->show_page
- Paths - Creating paths and manipulating path data
- $path = $cr->copy_path
- $path = $cr->copy_path_flat
- $cr->append_path ($path)
- $bool = $cr->has_current_point [1.6]
- ($x, $y) = $cr->get_current_point
- $cr->new_path
- $cr->new_sub_path [1.2]
- $cr->close_path
- ($x1, $y1, $x2, $y2) = $cr->path_extents [1.6]
- $cr->arc ($xc, $yc, $radius, $angle1, $angle2)
- $cr->arc_negative ($xc, $yc, $radius, $angle1, $angle2)
- $cr->curve_to ($x1, $y1, $x2, $y2, $x3, $y3)
- $cr->line_to ($x, $y)
- $cr->move_to ($x, $y)
- $cr->rectangle ($x, $y, $width, $height)
- $cr->glyph_path (...)
- $cr->text_path ($utf8)
- $cr->rel_curve_to ($dx1, $dy1, $dx2, $dy2, $dx3, $dy3)
- $cr->rel_line_to ($dx, $dy)
- $cr->rel_move_to ($dx, $dy)
- Patterns - Gradients and filtered sources
- $status = $pattern->status
- $type = $pattern->get_type [1.2]
- $pattern->set_matrix ($matrix)
- $matrix = $pattern->get_matrix
- $pattern = Cairo::SolidPattern->create_rgb ($red, $green, $blue)
- $pattern = Cairo::SolidPattern->create_rgba ($red, $green, $blue, $alpha)
- ($r, $g, $b, $a) = $pattern->get_rgba [1.4]
- $pattern = Cairo::SurfacePattern->create ($surface)
- $pattern->set_extend ($extend)
- $extend = $pattern->get_extend
- $pattern->set_filter ($filter)
- $filter = $pattern->get_filter
- $surface = $pattern->get_surface [1.4]
- $pattern = Cairo::LinearGradient->create ($x0, $y0, $x1, $y1)
- ($x0, $y0, $x1, $y1) = $pattern->get_points [1.4]
- $pattern = Cairo::RadialGradient->create ($cx0, $cy0, $radius0, $cx1, $cy1, $radius1)
- ($x0, $y0, $r0, $x1, $y1, $r1) = $pattern->get_circles [1.4]
- $pattern->add_color_stop_rgb (double offset, double red, double green, double blue)
- $pattern->add_color_stop_rgba (double offset, double red, double green, double blue, double alpha)
- @stops = $pattern->get_color_stops [1.4]
- Transformations - Manipulating the current transformation matrix
- $cr->translate ($tx, $ty)
- $cr->scale ($sx, $sy)
- $cr->rotate ($angle)
- $cr->transform ($matrix)
- $cr->set_matrix ($matrix)
- $matrix = $cr->get_matrix
- $cr->identity_matrix
- ($x, $y) = $cr->user_to_device ($x, $y)
- ($dx, $dy) = $cr->user_to_device_distance ($dx, $dy)
- ($x, $y) = $cr->device_to_user ($x, $y)
- ($dx, $dy) = $cr->device_to_user_distance ($dx, $dy)
- Text - Rendering text and sets of glyphs
- Fonts
- Surfaces
- Utilities
- SEE ALSO
- AUTHORS
- COPYRIGHT
Cairo - Perl interface to the cairo library
use Cairo;
my $surface = Cairo::ImageSurface->create ('argb32', 100, 100);
my $cr = Cairo::Context->create ($surface);
$cr->rectangle (10, 10, 40, 40);
$cr->set_source_rgb (0, 0, 0);
$cr->fill;
$cr->rectangle (50, 50, 40, 40);
$cr->set_source_rgb (1, 1, 1);
$cr->fill;
$cr->show_page;
$surface->write_to_png ('output.png');
Cairo provides Perl bindings for the vector graphics library cairo. It
supports multiple output targets, including PNG, PDF and SVG. Cairo produces
identical output on all those targets.
Note that this listing still lacks entries for Cairo::Surfaces and some
utility methods.
Cairo::Context is the main object used when drawing with Cairo. To draw with
Cairo, you create a Cairo::Context, set the target surface, and drawing
options for the Cairo::Context, create shapes with methods like
$cr-
move_to> and $cr->line_to
, and then draw shapes with
$cr->stroke
or $cr->fill
.
Cairo::Context's can be pushed to a stack via $cr->save
. They may
then safely be changed, without loosing the current state. Use
$cr->restore
to restore to the saved state.
=over
- $surface: Cairo::Surface
- $content: Cairo::Content
- $red: double
- $green: double
- $blue: double
- $red: double
- $green: double
- $blue: double
- $alpha: double
- $source: Cairo::Pattern
- $surface: Cairo::Surface
- $x: double
- $y: double
- $antialias: Cairo::Antialias
- $offset: double
- ...: list of doubles
- $fill_rule: Cairo::FillRule
- $line_cap: Cairo::LineCap
- $line_join: Cairo::LineJoin
- $width: double
- $limit: double
- $op: Cairo::Operator
- $tolerance: double
- $x: double
- $y: double
- $pattern: Cairo::Pattern
- $surface: Cairo::Surface
- $surface_x: double
- $surface_y: double
- $alpha: double
- $x: double
- $y: double
$path = [
{ type => "move-to", points => [[1, 2]] },
{ type => "line-to", points => [[3, 4]] },
{ type => "curve-to", points => [[5, 6], [7, 8], [9, 10]] },
...
{ type => "close-path", points => [] },
];
Cairo::Path is a data structure for holding a path. This data structure
serves as the return value for $cr->copy_path_data
and
$cr->copy_path_data_flat
as well the input value for
$cr->append_path
.
Cairo::Path is represented as an array reference that contains path
elements, represented by hash references with two keys: type and points.
The value for type can be either of the following:
move-to
line-to
curve-to
close-path
The value for points is an array reference which contains zero or more
points. Points are represented as array references that contain two doubles:
x and y. The necessary number of points depends on the type of the
path element:
move-to
: 1 point
line_to
: 1 point
curve-to
: 3 points
close-path
: 0 points
The semantics and ordering of the coordinate values are consistent with
$cr->move_to
, $cr->line_to
, $cr->curve_to
, and
$cr->close_path
.
- $path: Cairo::Path
- $xc: double
- $yc: double
- $radius: double
- $angle1: double
- $angle2: double
- $xc: double
- $yc: double
- $radius: double
- $angle1: double
- $angle2: double
- $x1: double
- $y1: double
- $x2: double
- $y2: double
- $x3: double
- $y3: double
- $x: double
- $y: double
- $x: double
- $y: double
- $x: double
- $y: double
- $width: double
- $height: double
- ...: list of Cairo::Glyph's
- $utf8: string in utf8 encoding
- $dx1: double
- $dy1: double
- $dx2: double
- $dy2: double
- $dx3: double
- $dy3: double
- $dx: double
- $dy: double
- $dx: double
- $dy: double
- $matrix: Cairo::Matrix
- $red: double
- $green: double
- $blue: double
- $red: double
- $green: double
- $blue: double
- $alpha: double
- $surface: Cairo::Surface
- $extend: Cairo::Extend
- $filter: Cairo::Filter
- $x0: double
- $y0: double
- $x1: double
- $y1: double
- $cx0: double
- $cy0: double
- $radius0: double
- $cx1: double
- $cy1: double
- $radius1: double
- $offset: double
- $red: double
- $green: double
- $blue: double
- $offset: double
- $red: double
- $green: double
- $blue: double
- $alpha: double
A color stop is represented as an array reference with five elements: offset,
red, green, blue, and alpha.
- $tx: double
- $ty: double
- $sx: double
- $sy: double
- $angle: double
- $matrix: Cairo::Matrix
- $matrix: Cairo::Matrix
- $x: double
- $y: double
- $dx: double
- $dy: double
- $x: double
- $y: double
- $dx: double
- $dy: double
Glyphs are represented as anonymous hash references with three keys: index,
x and y. Example:
my @glyphs = ({ index => 1, x => 2, y => 3 },
{ index => 2, x => 3, y => 4 },
{ index => 3, x => 4, y => 5 });
- $family: string
- $slant: Cairo::FontSlant
- $weight: Cairo::FontWeight
- $size: double
- $matrix: Cairo::Matrix
- $options: Cairo::FontOptions
- $scaled_font: Cairo::ScaledFont
- $utf8: string
- ...: list of glyphs
- $font_face: Cairo::FontFace
- $scaled_font: Cairo::ScaledFont
- $utf8: string
- ...: list of glyphs
- $font_face: Cairo::FontFace
- $font_matrix: Cairo::Matrix
- $ctm: Cairo::Matrix
- $options: Cairo::FontOptions
- $utf8: string
- ...: list of glyphs
- $other: Cairo::FontOptions
- $other: Cairo::FontOptions
- $antialias: Cairo::AntiAlias
- $subpixel_order: Cairo::SubpixelOrder
- $hint_style: Cairo::HintStyle
- $hint_metrics: Cairo::HintMetrics
If your cairo library supports it, the FreeType integration allows you to load
font faces from font files. You can query for this capability with
Cairo::HAS_FT_FONT
. To actually use this, you'll need the the Font::FreeType manpage
module.
- $ft_face: Font::FreeType::Face
- $load_flags: integer
This method allows you to create a Cairo::FontFace from a
Font::FreeType::Face. To obtain the latter, you can for example load it
from a file:
my $file = '/usr/share/fonts/truetype/ttf-bitstream-vera/Vera.ttf';
my $ft_face = Font::FreeType->new->face ($file);
my $face = Cairo::FtFontFace->create ($ft_face);
- $content: Cairo::Content
- $width: integer
- $height: integer
- $x: integer
- $y: integer
- $width: integer
- $height: integer
- $x_offset: integer
- $y_offset: integer
- $x_pixels_per_inch: double
- $y_pixels_per_inch: double
- $status: Cairo::Status
- $status: Cairo::Status
- $format: Cairo::Format
- $width: integer
- $height: integer
- $data: image data
- $format: Cairo::Format
- $width: integer
- $height: integer
- $stride: integer
- $filename: string
- $width_in_points: double
- $height_in_points: double
- $callback: the Cairo::WriteFunc manpage
- $callback_data: scalar
- $width_in_points: double
- $height_in_points: double
- $width_in_points: double
- $height_in_points: double
- $filename: string
- $data: binary image data, of length $length
- $callback_data: scalar, user data
- $length: integer, bytes to read
- $callback: the Cairo::ReadFunc manpage
- $callback_data: scalar
- $filename: string
- $callback_data: scalar, user data
- $data: binary image data, to be written
- $callback: the Cairo::WriteFunc manpage
- $callback_data: scalar
- $filename: string
- $width_in_points: double
- $height_in_points: double
- $callback: the Cairo::WriteFunc manpage
- $callback_data: scalar
- $width_in_points: double
- $height_in_points: double
- $width_in_points: double
- $height_in_points: double
- $comment: string
- $level: Cairo::PsLevel
- $level: Cairo::PsLevel
- $eps: boolean
- $filename: string
- $width_in_points: double
- $height_in_points: double
- $callback: the Cairo::WriteFunc manpage
- $callback_data: scalar
- $width_in_points: double
- $height_in_points: double
- $version: Cairo::SvgVersion
- $version: Cairo::SvgVersion
- $major: integer
- $minor: integer
- $micro: integer
- $format: Cairo::Format
- $width: integer
- http://cairographics.org/documentation
-
Lists many available resources including tutorials and examples
- http://cairographics.org/manual/
-
Contains the reference manual
- Ross McFarland <rwmcfa1 at neces dot com>
- Torsten Schoenfeld <kaffeetisch at gmx dot de>
Copyright (C) 2004-2008 by the cairo perl team