/[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 1114 - (hide annotations)
Mon Jun 29 18:28:26 2009 UTC (14 years, 10 months ago) by dpavlin
File size: 1600 byte(s)
fix critique: eval, we require it in Makefile.PL anyway
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 dpavlin 1114 use Font::FreeType;
10 dpavlin 829
11     has path => (
12     is => 'rw',
13     isa => 'Str',
14     required => 1,
15     default => 'var/cairo/telop.png',
16     );
17    
18     has width => (
19     is => 'rw',
20     isa => 'Int',
21     required => 1,
22     default => 200,
23     );
24    
25     has height => (
26     is => 'rw',
27     isa => 'Int',
28     required => 1,
29     default => 40,
30     );
31    
32     has font_size => (
33     is => 'rw',
34     isa => 'Int',
35     required => 1,
36     default => 23,
37     );
38    
39     has x => (
40     is => 'rw',
41     isa => 'Int',
42     required => 1,
43     default => 20,
44     );
45    
46     has y => (
47     is => 'rw',
48     isa => 'Int',
49     required => 1,
50     default => 25,
51     );
52    
53     has text => (
54     is => 'rw',
55     isa => 'Str',
56     required => 1,
57     default => 'Hello, world!',
58     );
59    
60     sub as_markup {
61     my ($self) = @_;
62    
63 dpavlin 833 my @fonts = (
64     '/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf',
65     '/usr/share/fonts/truetype/ttf-inconsolata/Inconsolata.otf',
66     '/usr/share/fonts/truetype/ttf-bitstream-vera/Vera.ttf',
67     );
68    
69     my $ttf_path;
70     foreach my $font ( @fonts ) {
71     $ttf_path ||= $font if -e $font;
72 dpavlin 829 }
73 dpavlin 833 die "Can't find font $ttf_path" unless -r $ttf_path;
74 dpavlin 829
75     my $ft_face = Font::FreeType->new->face($ttf_path);
76     my $cr_face = Cairo::FtFontFace->create($ft_face);
77    
78     my $surface = Cairo::ImageSurface->create('argb32', $self->width, $self->height);
79    
80     my $cr = Cairo::Context->create($surface);
81     $cr->set_font_face($cr_face);
82     $cr->set_font_size( $self->font_size );
83     $cr->move_to( $self->x, $self->y );
84     $cr->show_text( $self->text );
85     $cr->show_page;
86    
87     $self->mkbasepath( $self->path );
88     $surface->write_to_png( $self->path );
89    
90     return qq|<img src="/| . $self->path . qq|">|;
91     }
92    
93     1;

  ViewVC Help
Powered by ViewVC 1.1.26