#!/usr/bin/perl
use strict;
use warnings;
use Cairo;
use constant
{
WIDTH => 450,
HEIGHT => 900,
NUM_STRINGS => 3,
M_PI => 4 * atan2(1, 1),
};
{
my $surface = Cairo::ImageSurface->create ('argb32', WIDTH, HEIGHT);
my $cr = Cairo::Context->create ($surface);
$cr->set_source_rgb (0.0, 0.0, 0.0);
$cr->translate (40, 40);
$cr->select_font_face ('mono', 'normal', 'normal');
$cr->set_font_size (12);
$cr->show_text ('+CTM rotation');
$cr->save;
$cr->select_font_face ('serif', 'normal', 'normal');
$cr->set_font_size (40);
for (my $i = 0; $i < NUM_STRINGS; $i++) {
my $angle = $i * 0.5 * M_PI / (NUM_STRINGS - 1);
$cr->save;
$cr->rotate ($angle);
$cr->move_to (100, 0);
$cr->show_text ("Text");
$cr->restore;
}
$cr->restore;
$cr->translate (0, HEIGHT / 3);
$cr->move_to (0, 0);
$cr->show_text ('+CTM rotation');
$cr->rel_move_to (0, 12);
$cr->show_text ('-font rotation');
$cr->save;
$cr->select_font_face ('serif', 'normal', 'normal');
$cr->set_font_size (40);
for (my $i = 0; $i < NUM_STRINGS; $i++) {
my $angle = $i * 0.5 * M_PI / (NUM_STRINGS - 1);
$cr->save;
$cr->rotate ($angle);
my $matrix = Cairo::Matrix->init_identity;
$matrix->scale (40, 40);
$matrix->rotate (-$angle);
$cr->set_font_matrix ($matrix);
$cr->move_to (100, 0);
$cr->show_text ('Text');
$cr->restore;
}
$cr->restore;
$cr->translate (0, HEIGHT / 3);
$cr->move_to (0, 0);
$cr->show_text ('+CTM rotation');
$cr->rel_move_to (0, 12);
$cr->show_text ('-CTM rotation');
$cr->save;
$cr->select_font_face ('serif', 'normal', 'normal');
$cr->set_font_size (40);
for (my $i = 0; $i < NUM_STRINGS; $i++) {
my $angle = $i * 0.5 * M_PI / (NUM_STRINGS - 1);
$cr->save;
$cr->rotate ($angle);
$cr->move_to (100, 0);
$cr->rotate (-$angle);
$cr->show_text ('Text');
$cr->restore;
}
$cr->restore;
$surface->write_to_png ('text-rotate.png');
}