/[Frey]/trunk/lib/Frey/Cairo.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /trunk/lib/Frey/Cairo.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 833 - (show annotations)
Sat Dec 13 16:52:50 2008 UTC (15 years, 4 months ago) by dpavlin
File size: 1710 byte(s)
 r922@eeepy:  dpavlin | 2008-12-13 17:49:46 +0100
 check more fonts

1 package Frey::Cairo;
2 use Moose;
3
4 extends 'Frey';
5 with 'Frey::Web';
6 #with 'Frey::Storage';
7
8 use Cairo;
9
10 has path => (
11 is => 'rw',
12 isa => 'Str',
13 required => 1,
14 default => 'var/cairo/telop.png',
15 );
16
17 has width => (
18 is => 'rw',
19 isa => 'Int',
20 required => 1,
21 default => 200,
22 );
23
24 has height => (
25 is => 'rw',
26 isa => 'Int',
27 required => 1,
28 default => 40,
29 );
30
31 has font_size => (
32 is => 'rw',
33 isa => 'Int',
34 required => 1,
35 default => 23,
36 );
37
38 has x => (
39 is => 'rw',
40 isa => 'Int',
41 required => 1,
42 default => 20,
43 );
44
45 has y => (
46 is => 'rw',
47 isa => 'Int',
48 required => 1,
49 default => 25,
50 );
51
52 has text => (
53 is => 'rw',
54 isa => 'Str',
55 required => 1,
56 default => 'Hello, world!',
57 );
58
59 sub as_markup {
60 my ($self) = @_;
61
62
63 unless (Cairo::HAS_FT_FONT && eval 'use Font::FreeType; 1;') {
64 die 'need Cairo with FreeType support and Font::FreeType';
65 }
66
67 my @fonts = (
68 '/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf',
69 '/usr/share/fonts/truetype/ttf-inconsolata/Inconsolata.otf',
70 '/usr/share/fonts/truetype/ttf-bitstream-vera/Vera.ttf',
71 );
72
73 my $ttf_path;
74 foreach my $font ( @fonts ) {
75 $ttf_path ||= $font if -e $font;
76 }
77 die "Can't find font $ttf_path" unless -r $ttf_path;
78
79 my $ft_face = Font::FreeType->new->face($ttf_path);
80 my $cr_face = Cairo::FtFontFace->create($ft_face);
81
82 my $surface = Cairo::ImageSurface->create('argb32', $self->width, $self->height);
83
84 my $cr = Cairo::Context->create($surface);
85 $cr->set_font_face($cr_face);
86 $cr->set_font_size( $self->font_size );
87 $cr->move_to( $self->x, $self->y );
88 $cr->show_text( $self->text );
89 $cr->show_page;
90
91 $self->mkbasepath( $self->path );
92 $surface->write_to_png( $self->path );
93
94 return qq|<img src="/| . $self->path . qq|">|;
95 }
96
97 1;

  ViewVC Help
Powered by ViewVC 1.1.26