use
5.006;
our
@ISA
=
qw(Imager::Font)
;
our
$VERSION
=
"1.013"
;
*_first
= \
&Imager::Font::_first
;
sub
new {
my
$class
=
shift
;
my
%hsh
=(
color
=>Imager::Color->new(255,0,0,255),
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
) {
$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
=
@_
;
if
(
exists
$input
{channel} ) {
Imager::i_tt_cp(
$self
->{id},
$input
{image}{IMG},
$input
{
'x'
},
$input
{
'y'
},
$input
{channel},
$input
{size},
$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},
$input
{aa},
$input
{utf8},
$input
{align});
}
}
sub
_bounding_box {
my
$self
=
shift
;
my
%input
=
@_
;
my
@result
=
Imager::i_tt_bbox(
$self
->{id},
$input
{size},
$input
{string},
$input
{utf8});
unless
(
@result
) {
Imager->_set_error(Imager->_error_as_msg);
return
;
}
return
@result
;
}
sub
utf8 { 1 }
sub
has_chars {
my
(
$self
,
%hsh
) =
@_
;
unless
(
defined
$hsh
{string}) {
$Imager::ERRSTR
=
"No string supplied to \$font->has_chars()"
;
return
;
}
if
(
wantarray
) {
my
@result
= Imager::i_tt_has_chars(
$self
->{id},
$hsh
{string},
_first(
$hsh
{
'utf8'
},
$self
->{utf8}, 0));
unless
(
@result
) {
Imager->_set_error(Imager->_error_as_msg);
return
;
}
return
@result
;
}
else
{
my
$result
= Imager::i_tt_has_chars(
$self
->{id},
$hsh
{string},
_first(
$hsh
{
'utf8'
},
$self
->{utf8}, 0));
unless
(
defined
$result
) {
Imager->_set_error(Imager->_error_as_msg);
return
;
}
return
$result
;
}
}
sub
face_name {
my
(
$self
) =
@_
;
Imager::i_tt_face_name(
$self
->{id});
}
sub
can_glyph_names {
1;
}
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);
my
@names
= Imager::i_tt_glyph_name(
$self
->{id},
$string
,
$utf8
);
unless
(
@names
) {
Imager->_set_error(Imager->_error_as_msg);
return
;
}
return
@names
;
}
1;