/[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

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

Parent Directory Parent Directory | Revision Log Revision Log


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

1 dpavlin 829 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 dpavlin 833 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 dpavlin 829 }
77 dpavlin 833 die "Can't find font $ttf_path" unless -r $ttf_path;
78 dpavlin 829
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