]> git.imager.perl.org - imager.git/blobdiff - T1/T1.pm
Changes updates
[imager.git] / T1 / T1.pm
index d184b83a57a8c1f81a70a68777e62a6fb2835a76..c03757d7dc05546ee46b1418401f5d66b2f011de 100644 (file)
--- a/T1/T1.pm
+++ b/T1/T1.pm
@@ -3,9 +3,10 @@ use strict;
 use Imager::Color;
 use vars qw(@ISA $VERSION);
 @ISA = qw(Imager::Font);
+use Scalar::Util ();
 
 BEGIN {
-  $VERSION = "1.018";
+  $VERSION = "1.023";
 
   require XSLoader;
   XSLoader::load('Imager::Font::T1', $VERSION);
@@ -73,6 +74,10 @@ sub new {
 
 sub _draw {
   my $self = shift;
+
+  $self->_valid
+    or return;
+
   my %input = @_;
   my $flags = '';
   $flags .= 'u' if $input{underline};
@@ -82,14 +87,13 @@ sub _draw {
   if (exists $input{channel}) {
     $self->{t1font}->cp($input{image}{IMG}, $input{'x'}, $input{'y'},
                    $input{channel}, $input{size},
-                   $input{string}, length($input{string}), $input{align},
+                   $input{string}, $input{align},
                     $input{utf8}, $flags, $aa)
       or return;
   } else {
     $self->{t1font}->text($input{image}{IMG}, $input{'x'}, $input{'y'}, 
                      $input{color}, $input{size}, 
-                     $input{string}, length($input{string}), 
-                     $input{align}, $input{utf8}, $flags, $aa)
+                     $input{string}, $input{align}, $input{utf8}, $flags, $aa)
       or return;
   }
 
@@ -98,46 +102,92 @@ sub _draw {
 
 sub _bounding_box {
   my $self = shift;
+
+  $self->_valid
+    or return;
+
   my %input = @_;
   my $flags = '';
   $flags .= 'u' if $input{underline};
   $flags .= 's' if $input{strikethrough};
   $flags .= 'o' if $input{overline};
-  return $self->{t1font}->bbox($input{size}, $input{string},
-                          length($input{string}), $input{utf8}, $flags);
+  my @bbox =  $self->{t1font}->bbox($input{size}, $input{string},
+                                   $input{utf8}, $flags);
+  unless (@bbox) {
+    Imager->_set_error(Imager->_error_as_msg);
+    return;
+  }
+
+  return @bbox;
 }
 
 # check if the font has the characters in the given string
 sub has_chars {
   my ($self, %hsh) = @_;
 
-  unless (defined $hsh{string} && length $hsh{string}) {
+  $self->_valid
+    or return;
+
+  unless (defined $hsh{string}) {
     $Imager::ERRSTR = "No string supplied to \$font->has_chars()";
     return;
   }
-  return $self->{t1font}->has_chars($hsh{string}, 
-                                   _first($hsh{'utf8'}, $self->{utf8}, 0));
+  if (wantarray) {
+    my @result = $self->{t1font}
+      ->has_chars($hsh{string}, _first($hsh{'utf8'}, $self->{utf8}, 0));
+    unless (@result) {
+      Imager->_set_error(Imager->_error_as_msg);
+      return;
+    }
+
+    return @result;
+  }
+  else {
+    my $result = $self->{t1font}
+      ->has_chars($hsh{string}, _first($hsh{'utf8'}, $self->{utf8}, 0));
+    unless (defined $result) {
+      Imager->_set_error(Imager->_error_as_msg);
+      return;
+    }
+    return $result;
+  }
 }
 
 sub utf8 {
   1;
 }
 
+sub can_glyph_names {
+  1;
+}
+
 sub face_name {
   my ($self) = @_;
 
+  $self->_valid
+    or return;
+
   return $self->{t1font}->face_name();
 }
 
 sub glyph_names {
   my ($self, %input) = @_;
 
+  $self->_valid
+    or return;
+
   my $string = $input{string};
   defined $string
     or return Imager->_set_error("no string parameter passed to glyph_names");
   my $utf8 = _first($input{utf8} || 0);
 
-  return $self->{t1font}->glyph_name($string, $utf8);
+  my @result = $self->{t1font}->glyph_names($string, $utf8);
+  unless (@result) {
+    Imager->_set_error(Imager->_error_as_msg);
+    return;
+  }
+
+  return @result;
 }
 
 sub set_aa_level {
@@ -150,6 +200,9 @@ sub set_aa_level {
   }
 
   if (ref $self) {
+    $self->_valid
+      or return;
+
     $self->{t1aa} = $new_t1aa;
   }
   else {
@@ -159,6 +212,17 @@ sub set_aa_level {
   return 1;
 }
 
+sub _valid {
+  my $self = shift;
+
+  unless ($self->{t1font} && Scalar::Util::blessed($self->{t1font})) {
+    Imager->_set_error("font object was created in another thread");
+    return;
+  }
+
+  return 1;
+}
+
 1;
 
 __END__