home *** CD-ROM | disk | FTP | other *** search
- #
- # Copyright (c) 2004-2006 by the cairo perl team (see the file README)
- #
- # Licensed under the LGPL, see LICENSE file for more information.
- #
- # $Header: /cvs/cairo/cairo-perl/Cairo.pm,v 1.21 2006/09/24 21:26:40 tsch Exp $
- #
-
- package Cairo;
-
- use strict;
- use warnings;
- use DynaLoader;
-
- our @ISA = qw/DynaLoader/;
-
- our $VERSION = '1.01';
-
- sub dl_load_flags { $^O eq 'darwin' ? 0x00 : 0x01 }
-
- Cairo->bootstrap ($VERSION);
-
- # --------------------------------------------------------------------------- #
-
- package Cairo;
-
- 1;
-
- __END__
-
- =head1 NAME
-
- Cairo - Perl interface to the cairo library
-
- =head1 SYNOPSIS
-
- 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");
-
- =head1 ABSTRACT
-
- 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.
-
- =head1 API DOCUMENTATION
-
- Note that this listing still lacks entries for I<Cairo::Surface>s and some
- utility methods.
-
- =head2 Drawing
-
- =head3 Cairo::Context -- The cairo drawing context
-
- I<Cairo::Context> is the main object used when drawing with Cairo. To draw with
- Cairo, you create a I<Cairo::Context>, set the target surface, and drawing
- options for the I<Cairo::Context>, create shapes with methods like
- C<$cr->move_to> and C<$cr-E<gt>line_to>, and then draw shapes with
- C<$cr-E<gt>stroke> or C<$cr-E<gt>fill>.
-
- I<Cairo::Context>'s can be pushed to a stack via C<$cr-E<gt>save>. They may
- then safely be changed, without loosing the current state. Use
- C<$cr-E<gt>restore> to restore to the saved state.
- =over
-
- =head4 $cr = Cairo::Context->create ($surface)
-
- =over
-
- =item $surface: I<Cairo::Surface>
-
- =back
-
- =head4 $cr-E<gt>save
-
- =head4 $cr->restore
-
- =head4 $status = $cr->status
-
- =head4 $surface = $cr->get_target
-
- =head4 $cr->push_group
-
- =head4 $cr->push_group_with_content ($content)
-
- =over
-
- =item $content: I<Cairo::Content>
-
- =back
-
- =head4 $pattern = $cr->pop_group
-
- =head4 $cr->pop_group_to_source
-
- =head4 $surface = $cr->get_group_target
-
- =head4 $cr->set_source_rgb ($red, $green, $blue)
-
- =over
-
- =item $red: double
-
- =item $green: double
-
- =item $blue: double
-
- =back
-
- =head4 $cr->set_source_rgba ($red, $green, $blue, $alpha)
-
- =over
-
- =item $red: double
-
- =item $green: double
-
- =item $blue: double
-
- =item $alpha: double
-
- =back
-
- =head4 $cr->set_source ($source)
-
- =over
-
- =item $source: I<Cairo::Pattern>
-
- =back
-
- =head4 $cr->set_source_surface ($surface, $x, $y)
-
- =over
-
- =item $surface: I<Cairo::Surface>
-
- =item $x: double
-
- =item $y: double
-
- =back
-
- =head4 $source = $cr->get_source
-
- =head4 $cr->set_antialias ($antialias)
-
- =over
-
- =item $antialias: I<Cairo::Antialias>
-
- =back
-
- =head4 $antialias = $cr->get_antialias
-
- =head4 $cr->set_dash ($offset, ...)
-
- =over
-
- =item $offset: double
-
- =item ...: list of doubles
-
- =back
-
- =head4 $cr->set_fill_rule ($fill_rule)
-
- =over
-
- =item $fill_rule: I<Cairo::FillRule>
-
- =back
-
- =head4 $fill_rule = $cr->get_fill_rule
-
- =head4 $cr->set_line_cap ($line_cap)
-
- =over
-
- =item $line_cap: I<Cairo::LineCap>
-
- =back
-
- =head4 $line_cap = $cr->get_line_cap
-
- =head4 $cr->set_line_join ($line_join)
-
- =over
-
- =item $line_join: I<Cairo::LineJoin>
-
- =back
-
- =head4 $line_join = $cr->get_line_join
-
- =head4 $cr->set_line_width ($width)
-
- =over
-
- =item $width: double
-
- =back
-
- =head4 $width = $cr->get_line_width
-
- =head4 $cr->set_miter_limit ($ limit)
-
- =over
-
- =item $limit: double
-
- =back
-
- =head4 $limit = $cr->get_miter_limit
-
- =head4 $cr->set_operator ($op)
-
- =over
-
- =item $op: I<Cairo::Operator>
-
- =back
-
- =head4 $op = $cr->get_operator
-
- =head4 $cr->set_tolerance ($tolerance)
-
- =over
-
- =item $tolerance: double
-
- =back
-
- =head4 $tolerance = $cr->get_tolerance
-
- =head4 $cr->clip
-
- =head4 $cr->clip_preserve
-
- =head4 $cr->reset_clip
-
- =head4 $cr->fill
-
- =head4 $cr->fill_preserve
-
- =head4 ($x1, $y1, $x2, $y2) = $cr->fill_extents
-
- =head4 $bool = $cr->in_fill ($x, $y)
-
- =over
-
- =item $x: double
-
- =item $y: double
-
- =back
-
- =head4 $cr->mask ($pattern)
-
- =over
-
- =item $pattern: I<Cairo::Pattern>
-
- =back
-
- =head4 $cr->mask_surface ($surface, $surface_x, $surface_y)
-
- =over
-
- =item $surface: I<Cairo::Surface>
-
- =item $surface_x: double
-
- =item $surface_y: double
-
- =back
-
- =head4 $cr->paint
-
- =head4 $cr->paint_with_alpha ($alpha)
-
- =over
-
- =item $alpha: double
-
- =back
-
- =head4 $cr->stroke
-
- =head4 $cr->stroke_preserve
-
- =head4 ($x1, $y1, $x2, $y2) = $cr->stroke_extents
-
- =head4 $bool = $cr->in_stroke ($x, $y)
-
- =over
-
- =item $x: double
-
- =item $y: double
-
- =back
-
- =head4 $cr->copy_page
-
- =head4 $cr->show_page
-
- =cut
-
- # --------------------------------------------------------------------------- #
-
- =head3 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 => [] },
- ];
-
- I<Cairo::Path> is a data structure for holding a path. This data structure
- serves as the return value for C<$cr-E<gt>copy_path_data> and
- C<$cr-E<gt>copy_path_data_flat> as well the input value for
- C<$cr-E<gt>append_path>.
-
- I<Cairo::Path> is represented as an array reference that contains path
- elements, represented by hash references with two keys: I<type> and I<points>.
- The value for I<type> can be either of the following:
-
- =over
-
- =item C<move-to>
-
- =item C<line-to>
-
- =item C<curve-to>
-
- =item C<close-path>
-
- =back
-
- The value for I<points> is an array reference which contains zero or more
- points. Points are represented as array references that contain two doubles:
- I<x> and I<y>. The necessary number of points depends on the I<type> of the
- path element:
-
- =over
-
- =item C<move-to>: 1 point
-
- =item C<line_to>: 1 point
-
- =item C<curve-to>: 3 points
-
- =item C<close-path>: 0 points
-
- =back
-
- The semantics and ordering of the coordinate values are consistent with
- C<$cr-E<gt>move_to>, C<$cr-E<gt>line_to>, C<$cr-E<gt>curve_to>, and
- C<$cr-E<gt>close_path>.
-
- =head4 $path = $cr->copy_path
-
- =head4 $path = $cr->copy_path_flat
-
- =head4 $cr->append_path ($path)
-
- =over
-
- =item $path: I<Cairo::Path>
-
- =back
-
- =head4 ($x, $y) = $cr->get_current_point
-
- =head4 $cr->new_path
-
- =head4 $cr->new_sub_path
-
- =head4 $cr->close_path
-
- =head4 $cr->arc ($xc, $yc, $radius, $angle1, $angle2)
-
- =over
-
- =item $xc: double
-
- =item $yc: double
-
- =item $radius: double
-
- =item $angle1: double
-
- =item $angle2: double
-
- =back
-
- =head4 $cr->arc_negative ($xc, $yc, $radius, $angle1, $angle2)
-
- =over
-
- =item $xc: double
-
- =item $yc: double
-
- =item $radius: double
-
- =item $angle1: double
-
- =item $angle2: double
-
- =back
-
- =head4 $cr->curve_to ($x1, $y1, $x2, $y2, $x3, $y3)
-
- =over
-
- =item $x1: double
-
- =item $y1: double
-
- =item $x2: double
-
- =item $y2: double
-
- =item $x3: double
-
- =item $y3: double
-
- =back
-
- =head4 $cr->line_to ($x, $y)
-
- =over
-
- =item $x: double
-
- =item $y: double
-
- =back
-
- =head4 $cr->move_to ($x, $y)
-
- =over
-
- =item $x: double
-
- =item $y: double
-
- =back
-
- =head4 $cr->rectangle ($x, $y, $width, $height)
-
- =over
-
- =item $x: double
-
- =item $y: double
-
- =item $width: double
-
- =item $height: double
-
- =back
-
- =head4 $cr->glyph_path (...)
-
- =over
-
- =item ...: list of I<Cairo::Glyph>'s
-
- =back
-
- =head4 $cr->text_path ($utf8)
-
- =over
-
- =item $utf8: string in utf8 encoding
-
- =back
-
- =head4 $cr->rel_curve_to ($dx1, $dy1, $dx2, $dy2, $dx3, $dy3)
-
- =over
-
- =item $dx1: double
-
- =item $dy1: double
-
- =item $dx2: double
-
- =item $dy2: double
-
- =item $dx3: double
-
- =item $dy3: double
-
- =back
-
- =head4 $cr->rel_line_to ($dx, $dy)
-
- =over
-
- =item $dx: double
-
- =item $dy: double
-
- =back
-
- =head4 $cr->rel_move_to ($dx, $dy)
-
- =over
-
- =item $dx: double
-
- =item $dy: double
-
- =back
-
- =cut
-
- # --------------------------------------------------------------------------- #
-
- =head3 Patterns -- Gradients and filtered sources
-
- =head4 $status = $pattern->status
-
- =head4 $type = $pattern->get_type
-
- =head4 $pattern->set_matrix ($matrix)
-
- =over
-
- =item $matrix: I<Cairo::Matrix>
-
- =back
-
- =head4 $matrix = $pattern->get_matrix
-
- =head4 $pattern = Cairo::SolidPattern->create_rgb ($red, $green, $blue)
-
- =over
-
- =item $red: double
-
- =item $green: double
-
- =item $blue: double
-
- =back
-
- =head4 $pattern = Cairo::SolidPattern->create_rgba ($red, $green, $blue, $alpha)
-
- =over
-
- =item $red: double
-
- =item $green: double
-
- =item $blue: double
-
- =item $alpha: double
-
- =back
-
- =head4 $matrix = $pattern->get_matrix
-
- =head4 $pattern = Cairo::SurfacePattern->create ($surface)
-
- =over
-
- =item $surface: I<Cairo::Surface>
-
- =back
-
- =head4 $pattern->set_extend ($extend)
-
- =over
-
- =item $extend: I<Cairo::Extend>
-
- =back
-
- =head4 $extend = $pattern->get_extend
-
- =head4 $pattern->set_filter ($filter)
-
- =over
-
- =item $filter: I<Cairo::Filter>
-
- =back
-
- =head4 $filter = $pattern->get_filter
-
- =head4 $pattern = Cairo::LinearGradient->create ($x0, $y0, $x1, $y1)
-
- =over
-
- =item $x0: double
-
- =item $y0: double
-
- =item $x1: double
-
- =item $y1: double
-
- =back
-
- =head4 $pattern = Cairo::RadialGradient->create ($cx0, $cy0, $radius0, $cx1, $cy1, $radius1)
-
- =over
-
- =item $cx0: double
-
- =item $cy0: double
-
- =item $radius0: double
-
- =item $cx1: double
-
- =item $cy1: double
-
- =item $radius1: double
-
- =back
-
- =head4 $pattern->add_color_stop_rgb (double offset, double red, double green, double blue)
-
- =over
-
- =item $offset: double
-
- =item $red: double
-
- =item $green: double
-
- =item $blue: double
-
- =back
-
- =head4 $pattern->add_color_stop_rgba (double offset, double red, double green, double blue, double alpha)
-
- =over
-
- =item $offset: double
-
- =item $red: double
-
- =item $green: double
-
- =item $blue: double
-
- =item $alpha: double
-
- =back
-
- =cut
-
- # --------------------------------------------------------------------------- #
-
- =head3 Transformations -- Manipulating the current transformation matrix
-
- =head4 $cr->translate ($tx, $ty)
-
- =over
-
- =item $tx: double
-
- =item $ty: double
-
- =back
-
- =head4 $cr->scale ($sx, $sy)
-
- =over
-
- =item $sx: double
-
- =item $sy: double
-
- =back
-
- =head4 $cr->rotate ($angle)
-
- =over
-
- =item $angle: double
-
- =back
-
- =head4 $cr->transform ($matrix)
-
- =over
-
- =item $matrix: I<Cairo::Matrix>
-
- =back
-
- =head4 $cr->set_matrix ($matrix)
-
- =over
-
- =item $matrix: I<Cairo::Matrix>
-
- =back
-
- =head4 $matrix = $cr->get_matrix
-
- =head4 $cr->identity_matrix
-
- =head4 ($x, $y) = $cr->user_to_device ($x, $y)
-
- =over
-
- =item $x: double
-
- =item $y: double
-
- =back
-
- =head4 ($dx, $dy) = $cr->user_to_device_distance ($dx, $dy)
-
- =over
-
- =item $dx: double
-
- =item $dy: double
-
- =back
-
- =head4 ($x, $y) = $cr->device_to_user ($x, $y)
-
- =over
-
- =item $x: double
-
- =item $y: double
-
- =back
-
- =head4 ($dx, $dy) = $cr->device_to_user_distance ($dx, $dy)
-
- =over
-
- =item $dx: double
-
- =item $dy: double
-
- =back
-
- =cut
-
- # --------------------------------------------------------------------------- #
-
- =head3 Text -- Rendering text and sets of glyphs
-
- Glyphs are represented as anonymous hash references with three keys: I<index>,
- I<x> and I<y>. Example:
-
- my @glyphs = ({ index => 1, x => 2, y => 3 },
- { index => 2, x => 3, y => 4 },
- { index => 3, x => 4, y => 5 });
-
- =head4 $cr->select_font_face ($family, $slant, $weight)
-
- =over
-
- =item $family: string
-
- =item $slant: I<Cairo::FontSlant>
-
- =item $weight: I<Cairo::FontWeight>
-
- =back
-
- =head4 $cr->set_font_size ($size)
-
- =over
-
- =item $size: double
-
- =back
-
- =head4 $cr->set_font_matrix ($matrix)
-
- =over
-
- =item $matrix: I<Cairo::Matrix>
-
- =back
-
- =head4 $matrix = $cr->get_font_matrix
-
- =head4 $cr->set_font_options ($options)
-
- =over
-
- =item $options: I<Cairo::FontOptions>
-
- =back
-
- =head4 $options = $cr->get_font_options
-
- =head4 $cr->set_scaled_font ($scaled_font)
-
- =over
-
- =item $scaled_font: I<Cairo::ScaledFont>
-
- =back
-
- =head4 $cr->show_text ($utf8)
-
- =over
-
- =item $utf8: string
-
- =back
-
- =head4 $cr->show_glyphs (...)
-
- =over
-
- =item ...: list of glyphs
-
- =back
-
- =head4 $face = $cr->get_font_face
-
- =head4 $extents = $cr->font_extents
-
- =head4 $cr->set_font_face ($font_face)
-
- =over
-
- =item $font_face: I<Cairo::FontFace>
-
- =back
-
- =head4 $cr->set_scaled_font ($scaled_font)
-
- =over
-
- =item $scaled_font: I<Cairo::ScaledFont>
-
- =back
-
- =head4 $extents = $cr->text_extents ($utf8)
-
- =over
-
- =item $utf8: string
-
- =back
-
- =head4 $extents = $cr->glyph_extents (...)
-
- =over
-
- =item ...: list of glyphs
-
- =back
-
- =cut
-
- # --------------------------------------------------------------------------- #
-
- =head2 Fonts
-
- =head3 Cairo::FontFace -- Base class for fonts
-
- =head4 $status = $font_face->status
-
- =head4 $type = $font_face->get_type
-
- =cut
-
- # --------------------------------------------------------------------------- #
-
- =head3 Scaled Fonts -- Caching metrics for a particular font size
-
- =head4 $scaled_font = Cairo::ScaledFont->create ($font_face, $font_matrix, $ctm, $options)
-
- =over
-
- =item $font_face: I<Cairo::FontFace>
-
- =item $font_matrix: I<Cairo::Matrix>
-
- =item $ctm: I<Cairo::Matrix>
-
- =item $options: I<Cairo::FontOptions>
-
- =back
-
- =head4 $status = $scaled_font->status
-
- =head4 $extents = $scaled_font->extents
-
- =head4 $extents = $scaled_font->text_extents ($utf8)
-
- =over
-
- =item $utf8: string
-
- =back
-
- =head4 $extents = $scaled_font->glyph_extents (...)
-
- =over
-
- =item ...: list of glyphs
-
- =back
-
- =head4 $font_face = $scaled_font->get_font_face
-
- =head4 $options = $scaled_font->get_font_options
-
- =head4 $font_matrix = $scaled_font->get_font_matrix
-
- =head4 $ctm = $scaled_font->get_ctm
-
- =head4 $type = $scaled_font->get_type
-
- =cut
-
- # --------------------------------------------------------------------------- #
-
- =head3 Font Options -- How a font should be rendered
-
- =head4 $font_options = Cairo::FontOptions->create
-
- =head4 $status = $font_options->status
-
- =head4 $font_options->merge ($other)
-
- =over
-
- =item $other: I<Cairo::FontOptions>
-
- =back
-
- =head4 $hash = $font_options->hash
-
- =head4 $bools = $font_options->equal ($other)
-
- =over
-
- =item $other: I<Cairo::FontOptions>
-
- =back
-
- =head4 $font_options->set_antialias ($antialias)
-
- =over
-
- =item $antialias: I<Cairo::AntiAlias>
-
- =back
-
- =head4 $antialias = $font_options->get_antialias
-
- =head4 $font_options->set_subpixel_order ($subpixel_order)
-
- =over
-
- =item $subpixel_order: I<Cairo::SubpixelOrder>
-
- =back
-
- =head4 $subpixel_order = $font_options->get_subpixel_order
-
- =head4 $font_options->set_hint_style ($hint_style)
-
- =over
-
- =item $hint_style: I<Cairo::HintStyle>
-
- =back
-
- =head4 $hint_style = $font_options->get_hint_style
-
- =head4 $font_options->set_hint_metrics ($hint_metrics)
-
- =over
-
- =item $hint_metrics: I<Cairo::HintMetrics>
-
- =back
-
- =head4 $hint_metrics = $font_options->get_hint_metrics
-
- =cut
-
- # --------------------------------------------------------------------------- #
-
- =head2 Utilities
-
- =head3 Version Information -- Run-time and compile-time version checks.
-
- =head4 $version = Cairo->version
-
- =head4 $string = Cairo->version_string
-
- =head4 $version_code = Cairo->VERSION
-
- =head4 $version_code = Cairo->VERSION_ENCODE ($major, $minor, $micro)
-
- =over
-
- =item $major: integer
-
- =item $minor: integer
-
- =item $micro: integer
-
- =back
-
- =cut
-
- # --------------------------------------------------------------------------- #
-
- =head1 SEE ALSO
-
- =over
-
- =item http://cairographics.org/documentation
-
- Lists many available resources including tutorials and examples
-
- =item http://cairographics.org/manual/
-
- Contains the reference manual
-
- =back
-
- =head1 AUTHORS
-
- =over
-
- =item Ross McFarland E<lt>rwmcfa1 at neces dot comE<gt>
-
- =item Torsten Schoenfeld E<lt>kaffeetisch at gmx dot deE<gt>
-
- =back
-
- =head1 COPYRIGHT
-
- Copyright (C) 2004-2006 by the cairo perl team
-
- =cut
-