]> git.imager.perl.org - imager.git/blobdiff - lib/Imager/Font.pm
update FT2 Changes
[imager.git] / lib / Imager / Font.pm
index 1dedbaacd06171a430b36006a4e888713b4b521e..0c0699f7a80f448bd6c1bf9251ae079b4221ea9f 100644 (file)
@@ -4,7 +4,7 @@ use Imager::Color;
 use strict;
 use vars qw($VERSION);
 
-$VERSION = "1.034";
+$VERSION = "1.038";
 
 # the aim here is that we can:
 #  - add file based types in one place: here
@@ -21,11 +21,10 @@ my %drivers =
        checktype => 1,
        },
    t1=>{
-        class=>'Imager::Font::Type1',
-        module=>'Imager/Font/Type1.pm',
+        class=>'Imager::Font::T1',
+        module=>'Imager/Font/T1.pm',
         files=>'.*\.pfb$',
        description => 'T1Lib',
-       checktype => 1,
        },
    ft2=>{
          class=>'Imager::Font::FT2',
@@ -52,7 +51,7 @@ sub new {
   my $class = shift;
   my $self = {};
   my ($file, $type, $id);
-  my %hsh=(color => Imager::Color->new(255,0,0,0),
+  my %hsh=(color => Imager::Color->new(255,0,0,255),
           size => 15,
           @_);
 
@@ -78,7 +77,7 @@ sub new {
         undef $type;
         my $re = $drivers{$drv}{files} or next;
         if ($file =~ /$re/i) {
-         if (eval { require $drivers{$drv}{module}; 1 }) {
+         if (eval { require $drivers{$drv}{module}; 1 } and !( $drivers{$drv}{checktype} && !$Imager::formats{$drv} )) {
            $type = $drv;
            last;
          }
@@ -250,7 +249,8 @@ sub bounding_box {
   $input{sizew} = _first($input{sizew}, $self->{sizew}, 0);
   $input{utf8} = _first($input{utf8}, $self->{utf8}, 0);
 
-  my @box = $self->_bounding_box(%input);
+  my @box = $self->_bounding_box(%input)
+    or return;
 
   if (wantarray) {
     if(@box && exists $input{'x'} and exists $input{'y'}) {
@@ -260,7 +260,7 @@ sub bounding_box {
       $box[0]+=$input{'x'};
       $box[2]+=$input{'x'};
     } elsif (@box && $input{'canon'}) {
-      $box[3]-=$box[1];    # make it cannoical (ie (0,0) - (width, height))
+      $box[3]-=$box[1];    # make it canonical (ie (0,0) - (width, height))
       $box[2]-=$box[0];
     }
     return @box;
@@ -545,9 +545,10 @@ the FreeType 2.x driver by setting C<type> to C<'ft2'>:
 
 =back
 
+Returns the new font object on success. Returns C<undef> on failure
+and sets an error message readable with C<< Imager->errstr >>.
 
-
-=item bounding_box
+=item bounding_box()
 
 Returns the bounding box for the specified string.  Example:
 
@@ -653,7 +654,7 @@ parameter.
 C<utf8> - For drivers that support it, treat the string as UTF-8 encoded.
 For versions of perl that support Unicode (5.6 and later), this will
 be enabled automatically if the 'string' parameter is already a UTF-8
-string. See L<UTF-8> for more information.  Default: the C<utf8> value
+string. See L</UTF-8> for more information.  Default: the C<utf8> value
 passed to Imager::Font->new(...) or 0.
 
 =item *
@@ -669,10 +670,18 @@ and height of the text instead.
 
 =back
 
+On success returns either the list of bounds, or a bounding box object
+in scalar context.  Returns an empty list or C<undef> on failure and
+sets an error message readable with C<< Imager->errstr >>.
+
+The transformation matrix set by L</transform()> has no effect on the
+result of this method - the bounds of the untransformed text is
+returned.
+
 =item string()
 
 The $img->string(...) method is now documented in
-L<Imager::Draw/string>
+L<Imager::Draw/string()>
 
 =item align(string=>$text,size=>$size,x=>...,y=>...,valign => ...,halign=>...)
 
@@ -750,7 +759,10 @@ still calculate the bounding box.
 
 =back
 
-Returns a list specifying the bounds of the drawn text.
+Returns a list specifying the bounds of the drawn text on success.
+Returns an empty list on failure, if an C<image> parameter was
+supplied the error message can be read with C<< $image->errstr >>,
+otherwise it's available as C<< Imager->errstr >>.
 
 =item dpi()
 
@@ -778,9 +790,13 @@ C<dpi> - set both horizontal and vertical resolution to this value.
 
 =back
 
-Returns a list containing the previous C<xdpi>, C<ydpi> values.
+Returns a list containing the previous C<xdpi>, C<ydpi> values on
+success.  Returns an empty list on failure, with an error message
+returned in C<< Imager->errstr >>.
+
+=item transform()
 
-=item transform(matrix=>$matrix)
+  $font->transform(matrix=>$matrix);
 
 Applies a transformation to the font, where matrix is an array ref of
 numbers representing a 2 x 3 matrix:
@@ -803,6 +819,11 @@ Note that the transformation is done in font co-ordinates where y
 increases as you move up, not image co-ordinates where y decreases as
 you move up.
 
+C<transform()> has no effect on the results of L</bounding_box()>.
+
+Returns true on success.  Returns false on failure with the cause
+readable from C<< Imager->errstr >>.
+
 =item has_chars(string=>$text)
 
 Checks if the characters in $text are defined by the font.
@@ -815,6 +836,9 @@ characters.  Supports UTF-8 where the font driver supports UTF-8.
 Not all fonts support this method (use $font->can("has_chars") to
 check.)
 
+On error, returns an empty list or undef in scalar context, and sets
+an error message readable with C<< Imager->errstr >>.
+
 =over
 
 =item *
@@ -827,7 +851,7 @@ at least one character.
 C<utf8> - For drivers that support it, treat the string as UTF-8
 encoded.  For versions of perl that support Unicode (5.6 and later),
 this will be enabled automatically if the 'string' parameter is
-already a UTF-8 string. See L<UTF-8> for more information.  Default:
+already a UTF-8 string. See L</UTF-8> for more information.  Default:
 the C<utf8> value passed to Imager::Font->new(...) or 0.
 
 =back
@@ -835,7 +859,8 @@ the C<utf8> value passed to Imager::Font->new(...) or 0.
 =item face_name()
 
 Returns the internal name of the face.  Not all font types support
-this method yet.
+this method yet, so you should check with C<< $font->can("face_name")
+>> before calling C<face_name>.
 
 =item glyph_names(string=>$string [, utf8=>$utf8 ][, reliable_only=>0 ] );
 
@@ -857,10 +882,23 @@ say how those name tables are unreliable, or how FT2 handles them.
 Both FreeType 1.x and 2.x allow support for glyph names to not be
 included.
 
+If the supplied C<string> is marked as UTF-8 or the C<utf8> parameter
+is true and the supplied string does not contain valid UTF-8, returns
+an empty string and set an error message readable from C<<
+Imager->errstr >>,
+
+=item can_glyph_names()
+
+As a class method, returns true if the underlying library supports
+returning glyph names.
+
+As an object method, returns true if the supplied font supports
+returning glyph names.
+
 =item draw
 
 This is used by Imager's string() method to implement drawing text.
-See L<Imager::Draw/string>.
+See L<Imager::Draw/string()>.
 
 =back
 
@@ -958,7 +996,7 @@ For example:
 
  $x = pack("C*", 0xE2, 0x80, 0x90); # character code 0x2010 HYPHEN
 
-You need to be be careful with versions of perl that have UTF-8
+You need to be careful with versions of perl that have UTF-8
 support, since your string may end up doubly UTF-8 encoded.
 
 For example:
@@ -968,7 +1006,7 @@ For example:
  # at this point $x is has the UTF-8 flag set, but has 5 characters,
  # none, of which is the constructed UTF-8 character
 
-The test script t/t38ft2font.t has a small example of this after the 
+The test script t/t38ft2font.t has a small example of this after the
 comment:
 
   # an attempt using emulation of UTF-8