Edit

kc3-lang/freetype/src/base/ftpfr.c

Branch :

  • Show log

    Commit

  • Author : Werner Lemberg
    Date : 2003-10-20 08:29:46
    Hash : 17d75819
    Message : * src/autohint/ahhint.c (ah_hinter_load_glyph): Patch from 2003-08-18 introduced a severe bug (FT_Render_Glyph was called twice under some circumstances, causing strange results). This is fixed now by clearing the FT_LOAD_RENDER bit of `load_flags'. * src/base/ftpfr.c (FT_Get_PFR_Metrics): Initialize `error'. * src/psaux/psobjs.c (ps_tobytes): Initialize `n'. * src/type42/t42parse.c (t42_parse_sfnts): Initialize `string_size'.

  • src/base/ftpfr.c
  • /***************************************************************************/
    /*                                                                         */
    /*  ftpfr.c                                                                */
    /*                                                                         */
    /*    FreeType API for accessing PFR-specific data (body).                 */
    /*                                                                         */
    /*  Copyright 2002, 2003 by                                                */
    /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
    /*                                                                         */
    /*  This file is part of the FreeType project, and may only be used,       */
    /*  modified, and distributed under the terms of the FreeType project      */
    /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
    /*  this file you indicate that you have read the license and              */
    /*  understand and accept it fully.                                        */
    /*                                                                         */
    /***************************************************************************/
    
    #include <ft2build.h>
    #include FT_INTERNAL_OBJECTS_H
    #include FT_SERVICE_PFR_H
    
    
      /* check the format */
      static FT_Service_PfrMetrics
      ft_pfr_check( FT_Face  face )
      {
        FT_Service_PfrMetrics  service;
    
    
        FT_FACE_LOOKUP_SERVICE( face, service, PFR_METRICS );
    
        return service;
      }
    
    
      FT_EXPORT_DEF( FT_Error )
      FT_Get_PFR_Metrics( FT_Face    face,
                          FT_UInt   *aoutline_resolution,
                          FT_UInt   *ametrics_resolution,
                          FT_Fixed  *ametrics_x_scale,
                          FT_Fixed  *ametrics_y_scale )
      {
        FT_Error               error = FT_Err_Ok;
        FT_Service_PfrMetrics  service;
    
    
        service = ft_pfr_check( face );
        if ( service )
        {
          error = service->get_metrics( face,
                                        aoutline_resolution,
                                        ametrics_resolution,
                                        ametrics_x_scale,
                                        ametrics_y_scale );
        }
        else if ( face )
        {
          FT_Fixed  x_scale, y_scale;
    
    
          /* this is not a PFR font */
          *aoutline_resolution = face->units_per_EM;
          *ametrics_resolution = face->units_per_EM;
    
          x_scale = y_scale = 0x10000L;
          if ( face->size )
          {
            x_scale = face->size->metrics.x_scale;
            y_scale = face->size->metrics.y_scale;
          }
          *ametrics_x_scale = x_scale;
          *ametrics_y_scale = y_scale;
        }
        else
          error = FT_Err_Invalid_Argument;
    
        return error;
      }
    
    
      FT_EXPORT_DEF( FT_Error )
      FT_Get_PFR_Kerning( FT_Face     face,
                          FT_UInt     left,
                          FT_UInt     right,
                          FT_Vector  *avector )
      {
        FT_Error               error;
        FT_Service_PfrMetrics  service;
    
    
        service = ft_pfr_check( face );
        if ( service )
          error = service->get_kerning( face, left, right, avector );
        else if ( face )
          error = FT_Get_Kerning( face, left, right,
                                  FT_KERNING_UNSCALED, avector );
        else
          error = FT_Err_Invalid_Argument;
    
        return error;
      }
    
    
      FT_EXPORT_DEF( FT_Error )
      FT_Get_PFR_Advance( FT_Face   face,
                          FT_UInt   gindex,
                          FT_Pos   *aadvance )
      {
        FT_Error               error;
        FT_Service_PfrMetrics  service;
    
    
        service = ft_pfr_check( face );
        if ( service )
        {
          error = service->get_advance( face, gindex, aadvance );
        }
        else
          /* XXX: TODO: PROVIDE ADVANCE-LOADING METHOD TO ALL FONT DRIVERS */
          error = FT_Err_Invalid_Argument;
    
        return error;
      }
    
    
    /* END */