summaryrefslogtreecommitdiff
path: root/Master/tlpkg/tlperl0/lib/Imager/Font/Truetype.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Master/tlpkg/tlperl0/lib/Imager/Font/Truetype.pm')
-rwxr-xr-xMaster/tlpkg/tlperl0/lib/Imager/Font/Truetype.pm127
1 files changed, 127 insertions, 0 deletions
diff --git a/Master/tlpkg/tlperl0/lib/Imager/Font/Truetype.pm b/Master/tlpkg/tlperl0/lib/Imager/Font/Truetype.pm
new file mode 100755
index 00000000000..24ffd098340
--- /dev/null
+++ b/Master/tlpkg/tlperl0/lib/Imager/Font/Truetype.pm
@@ -0,0 +1,127 @@
+package Imager::Font::Truetype;
+use strict;
+use vars qw(@ISA $VERSION);
+@ISA = qw(Imager::Font);
+
+$VERSION = "1.010";
+
+*_first = \&Imager::Font::_first;
+
+sub new {
+ my $class = shift;
+ my %hsh=(color=>Imager::Color->new(255,0,0,0),
+ size=>15,
+ @_);
+
+ unless ($hsh{file}) {
+ $Imager::ERRSTR = "No font file specified";
+ return;
+ }
+ unless (-e $hsh{file}) {
+ $Imager::ERRSTR = "Font file $hsh{file} not found";
+ return;
+ }
+ unless ($Imager::formats{tt}) {
+ $Imager::ERRSTR = "Type 1 fonts not supported in this build";
+ return;
+ }
+ my $id = Imager::i_tt_new($hsh{file});
+ unless ($id) { # the low-level code may miss some error handling
+ $Imager::ERRSTR = Imager::_error_as_msg();
+ return;
+ }
+ return bless {
+ id => $id,
+ aa => $hsh{aa} || 0,
+ file => $hsh{file},
+ type => 'tt',
+ size => $hsh{size},
+ color => $hsh{color},
+ }, $class;
+}
+
+sub _draw {
+ my $self = shift;
+ my %input = @_;
+
+ # note that the string length parameter is ignored and calculated in
+ # XS with SvPV(), since we want the number of bytes rather than the
+ # number of characters, which is what we'd get in perl for a UTF8
+ # encoded string in 5.6 and later
+
+ if ( exists $input{channel} ) {
+ Imager::i_tt_cp($self->{id},$input{image}{IMG},
+ $input{'x'}, $input{'y'}, $input{channel}, $input{size},
+ $input{string}, length($input{string}),$input{aa},
+ $input{utf8}, $input{align});
+ } else {
+ Imager::i_tt_text($self->{id}, $input{image}{IMG},
+ $input{'x'}, $input{'y'}, $input{color},
+ $input{size}, $input{string},
+ length($input{string}), $input{aa}, $input{utf8},
+ $input{align});
+ }
+}
+
+sub _bounding_box {
+ my $self = shift;
+ my %input = @_;
+ return Imager::i_tt_bbox($self->{id}, $input{size},
+ $input{string}, length($input{string}),
+ $input{utf8});
+}
+
+sub utf8 { 1 }
+
+# check if the font has the characters in the given string
+sub has_chars {
+ my ($self, %hsh) = @_;
+
+ unless (defined $hsh{string} && length $hsh{string}) {
+ $Imager::ERRSTR = "No string supplied to \$font->has_chars()";
+ return;
+ }
+ return Imager::i_tt_has_chars($self->{id}, $hsh{string},
+ _first($hsh{'utf8'}, $self->{utf8}, 0));
+}
+
+sub face_name {
+ my ($self) = @_;
+
+ Imager::i_tt_face_name($self->{id});
+}
+
+sub glyph_names {
+ my ($self, %input) = @_;
+
+ my $string = $input{string};
+ defined $string
+ or return Imager->_set_error("no string parameter passed to glyph_names");
+ my $utf8 = _first($input{utf8} || 0);
+
+ Imager::i_tt_glyph_name($self->{id}, $string, $utf8);
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+ Imager::Font::Truetype - low-level functions for Truetype fonts
+
+=head1 DESCRIPTION
+
+Imager::Font creates a Imager::Font::Truetype object when asked to create
+a font object based on a .ttf file.
+
+See Imager::Font to see how to use this type.
+
+This class provides low-level functions that require the caller to
+perform data validation.
+
+=head1 AUTHOR
+
+Addi, Tony
+
+=cut