use Imager::Color;
use vars qw(@ISA $VERSION);
@ISA = qw(Imager::Font);
+use Scalar::Util ();
BEGIN {
- $VERSION = "1.018";
+ $VERSION = "1.026";
require XSLoader;
XSLoader::load('Imager::Font::T1', $VERSION);
sub _draw {
my $self = shift;
+
+ $self->_valid
+ or return;
+
my %input = @_;
my $flags = '';
$flags .= 'u' if $input{underline};
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;
}
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 {
}
if (ref $self) {
+ $self->_valid
+ or return;
+
$self->{t1aa} = $new_t1aa;
}
else {
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__