#!/usr/bin/perl use strict; use warnings; my $surface = Cairo::ImageSurface->create ('argb32', 1000, 1000); my $context = CustomContext->create ($surface); $context->draw_star; $context->show_page; $surface->write_to_png ($0 . '.png'); package CustomContext; use strict; use warnings; use Cairo; use Math::Trig qw/pi/; use base qw/Cairo::Context/; sub create { my ($package, $surface) = @_; my $self = $package->SUPER::create($surface); return bless $self, $package; } sub draw_star { my ($self) = @_; my $width = $self->get_target()->get_width(); my $height = $self->get_target()->get_height(); $self->rectangle (0, 0, $width, $height); $self->set_source_rgb (1, 1, 1); $self->fill; $self->save; { $self->set_source_rgba (0, 0, 0, 0.5); $self->translate ($width / 2, $height / 2); my $mx = $width / 3.0; my $count = 100; foreach (0 .. $count-1) { $self->new_path; $self->move_to (0, 0); $self->rel_line_to (-$mx, 0); $self->stroke; $self->rotate ((pi() * 2) / $count); } } $self->restore; }