This is a listing of the API Cairo provides. For more verbose
information, refer to the cairo manual at
<http://cairographics.org/manual/>.
Cairo::Context -- The cairo drawing context
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.
- $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)
- $red: double
- $green: double
- $blue: double
- $cr->set_source_rgba ($red, $green, $blue, $alpha)
- $red: double
- $green: double
- $blue: double
- $alpha: double
- $cr->set_source ($source)
- $cr->set_source_surface ($surface, $x, $y)
- $surface: Cairo::Surface
- $x: double
- $y: double
- $source = $cr->get_source
- $cr->set_antialias ($antialias)
- $antialias: Cairo::Antialias
- $antialias = $cr->get_antialias
- $cr->set_dash ($offset, ...)
- $offset: double
- ...: list of doubles
- $cr->set_fill_rule ($fill_rule)
- $fill_rule: Cairo::FillRule
- $fill_rule = $cr->get_fill_rule
- $cr->set_line_cap ($line_cap)
- $line_cap: Cairo::LineCap
- $line_cap = $cr->get_line_cap
- $cr->set_line_join ($line_join)
- $line_join: Cairo::LineJoin
- $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]
- $bool = $cr->in_clip ($x, $y) [1.10]
- @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)
- $surface: Cairo::Surface
- $surface_x: double
- $surface_y: double
- $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 = [
{ 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" and
"$cr->copy_path_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".
Note that the paths returned by Cairo are implemented as tied
array references which do not support adding, removing or shuffling
of path segments. For these operations, you need to make a shallow copy
first:
my @path_clone = @{$path};
# now you can alter @path_clone which ever way you want
The points of a single path element can be changed directly,
however, without the need for a shallow copy:
$path->[$i]{points} = [[3, 4], [5, 6], [7, 8]];
- $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)
- $xc: double
- $yc: double
- $radius: double
- $angle1: double
- $angle2: double
- $cr->arc_negative ($xc, $yc, $radius, $angle1, $angle2)
- $xc: double
- $yc: double
- $radius: double
- $angle1: double
- $angle2: double
- $cr->curve_to ($x1, $y1, $x2, $y2, $x3, $y3)
- $x1: double
- $y1: double
- $x2: double
- $y2: double
- $x3: double
- $y3: double
- $cr->line_to ($x, $y)
- $cr->move_to ($x, $y)
- $cr->rectangle ($x, $y, $width, $height)
- $x: double
- $y: double
- $width: double
- $height: double
- $cr->glyph_path (...)
- ...: list of Cairo::Glyph's
- $cr->text_path ($utf8)
- $utf8: string in utf8 encoding
- $cr->rel_curve_to ($dx1, $dy1, $dx2, $dy2, $dx3, $dy3)
- $dx1: double
- $dy1: double
- $dx2: double
- $dy2: double
- $dx3: double
- $dy3: double
- $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_extend ($extend)
- $extend = $pattern->get_extend
- $pattern->set_filter ($filter)
- $filter = $pattern->get_filter
- $pattern->set_matrix ($matrix)
- $matrix = $pattern->get_matrix
- $pattern = Cairo::SolidPattern->create_rgb ($red, $green, $blue)
- $red: double
- $green: double
- $blue: double
- $pattern = Cairo::SolidPattern->create_rgba ($red, $green, $blue,
$alpha)
- $red: double
- $green: double
- $blue: double
- $alpha: double
- ($r, $g, $b, $a) = $pattern->get_rgba [1.4]
- $pattern = Cairo::SurfacePattern->create ($surface)
- $surface = $pattern->get_surface [1.4]
- $pattern = Cairo::LinearGradient->create ($x0, $y0, $x1, $y1)
- $x0: double
- $y0: double
- $x1: double
- $y1: double
- ($x0, $y0, $x1, $y1) = $pattern->get_points [1.4]
- $pattern = Cairo::RadialGradient->create ($cx0, $cy0, $radius0, $cx1,
$cy1, $radius1)
- $cx0: double
- $cy0: double
- $radius0: double
- $cx1: double
- $cy1: double
- $radius1: double
- ($x0, $y0, $r0, $x1, $y1, $r1) = $pattern->get_circles [1.4]
- $pattern->add_color_stop_rgb ($offset, $red, $green, $blue)
- $offset: double
- $red: double
- $green: double
- $blue: double
- $pattern->add_color_stop_rgba ($offset, $red, $green, $blue,
$alpha)
- $offset: double
- $red: double
- $green: double
- $blue: double
- $alpha: double
- @stops = $pattern->get_color_stops [1.4]
- A color stop is represented as an array reference with five elements:
offset, red, green, blue, and alpha.
Regions -- Representing a pixel-aligned area
- $region = Cairo::Region->create (...) [1.10]
- ...: zero or more Cairo::RectangleInt
- $status = $region->status [1.10]
- $num = $region->num_rectangles [1.10]
- $rect = $region->get_rectangle ($i) [1.10]
- $bool = $region->is_empty [1.10]
- $bool = $region->contains_point ($x, $y) [1.10]
- $bool = $region_one->equal ($region_two) [1.10]
- $region_two: Cairo::Region
- $region->translate ($dx, $dy) [1.10]
- $dx: integer
- $dy: integer
- $status = $dst->intersect ($other) [1.10]
- $status = $dst->intersect_rectangle ($rect) [1.10]
- $status = $dst->subtract ($other) [1.10]
- $status = $dst->subtract_rectangle ($rect) [1.10]
- $status = $dst->union ($other) [1.10]
- $status = $dst->union_rectangle ($rect) [1.10]
- $status = $dst->xor ($other) [1.10]
- $status = $dst->xor_rectangle ($rect) [1.10]
- $other: Cairo::Region
- $rect: Cairo::RectangleInt
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
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 });
- $cr->select_font_face ($family, $slant, $weight)
- $family: string
- $slant: Cairo::FontSlant
- $weight: Cairo::FontWeight
- $cr->set_font_size ($size)
- $cr->set_font_matrix ($matrix)
- $matrix = $cr->get_font_matrix
- $cr->set_font_options ($options)
- $options: Cairo::FontOptions
- $options = $cr->get_font_options
- $cr->set_scaled_font ($scaled_font) [1.2]
- $scaled_font: Cairo::ScaledFont
- $scaled_font = $cr->get_scaled_font [1.4]
- $cr->show_text ($utf8)
- $cr->show_glyphs (...)
- $cr->show_text_glyphs ($utf8, $glyphs, $clusters, $cluster_flags)
[1.8]
- $utf8: string
- $glyphs: array ref of glyphs
- $clusters: array ref of clusters
- $cluster_flags: Cairo::TextClusterFlags
- $face = $cr->get_font_face
- $extents = $cr->font_extents
- $cr->set_font_face ($font_face)
- $font_face: Cairo::FontFace
- $cr->set_scaled_font ($scaled_font)
- $scaled_font: Cairo::ScaledFont
- $extents = $cr->text_extents ($utf8)
- $extents = $cr->glyph_extents (...)
- $face = Cairo::ToyFontFace->create ($family, $slant, $weight)
[1.8]
- $family: string
- $slant: Cairo::FontSlant
- $weight: Cairo::FontWeight
- $family = $face->get_family [1.8]
- $slang = $face->get_slant [1.8]
- $weight = $face->get_weight [1.8]