Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. /***************************************************************************/
  2. /*                                                                         */
  3. /*  ftpfr.c                                                                */
  4. /*                                                                         */
  5. /*    FreeType API for accessing PFR-specific data (body).                 */
  6. /*                                                                         */
  7. /*  Copyright 2002-2004, 2008, 2010, 2013 by                               */
  8. /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
  9. /*                                                                         */
  10. /*  This file is part of the FreeType project, and may only be used,       */
  11. /*  modified, and distributed under the terms of the FreeType project      */
  12. /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
  13. /*  this file you indicate that you have read the license and              */
  14. /*  understand and accept it fully.                                        */
  15. /*                                                                         */
  16. /***************************************************************************/
  17.  
  18. #include <ft2build.h>
  19. #include FT_INTERNAL_DEBUG_H
  20.  
  21. #include FT_INTERNAL_OBJECTS_H
  22. #include FT_SERVICE_PFR_H
  23.  
  24.  
  25.   /* check the format */
  26.   static FT_Service_PfrMetrics
  27.   ft_pfr_check( FT_Face  face )
  28.   {
  29.     FT_Service_PfrMetrics  service = NULL;
  30.  
  31.  
  32.     if ( face )
  33.       FT_FACE_LOOKUP_SERVICE( face, service, PFR_METRICS );
  34.  
  35.     return service;
  36.   }
  37.  
  38.  
  39.   /* documentation is in ftpfr.h */
  40.  
  41.   FT_EXPORT_DEF( FT_Error )
  42.   FT_Get_PFR_Metrics( FT_Face    face,
  43.                       FT_UInt   *aoutline_resolution,
  44.                       FT_UInt   *ametrics_resolution,
  45.                       FT_Fixed  *ametrics_x_scale,
  46.                       FT_Fixed  *ametrics_y_scale )
  47.   {
  48.     FT_Error               error = FT_Err_Ok;
  49.     FT_Service_PfrMetrics  service;
  50.  
  51.  
  52.     if ( !face )
  53.       return FT_THROW( Invalid_Argument );
  54.  
  55.     service = ft_pfr_check( face );
  56.     if ( service )
  57.     {
  58.       error = service->get_metrics( face,
  59.                                     aoutline_resolution,
  60.                                     ametrics_resolution,
  61.                                     ametrics_x_scale,
  62.                                     ametrics_y_scale );
  63.     }
  64.     else
  65.     {
  66.       FT_Fixed  x_scale, y_scale;
  67.  
  68.  
  69.       /* this is not a PFR font */
  70.       if ( aoutline_resolution )
  71.         *aoutline_resolution = face->units_per_EM;
  72.  
  73.       if ( ametrics_resolution )
  74.         *ametrics_resolution = face->units_per_EM;
  75.  
  76.       x_scale = y_scale = 0x10000L;
  77.       if ( face->size )
  78.       {
  79.         x_scale = face->size->metrics.x_scale;
  80.         y_scale = face->size->metrics.y_scale;
  81.       }
  82.  
  83.       if ( ametrics_x_scale )
  84.         *ametrics_x_scale = x_scale;
  85.  
  86.       if ( ametrics_y_scale )
  87.         *ametrics_y_scale = y_scale;
  88.  
  89.       error = FT_THROW( Unknown_File_Format );
  90.     }
  91.  
  92.     return error;
  93.   }
  94.  
  95.  
  96.   /* documentation is in ftpfr.h */
  97.  
  98.   FT_EXPORT_DEF( FT_Error )
  99.   FT_Get_PFR_Kerning( FT_Face     face,
  100.                       FT_UInt     left,
  101.                       FT_UInt     right,
  102.                       FT_Vector  *avector )
  103.   {
  104.     FT_Error               error;
  105.     FT_Service_PfrMetrics  service;
  106.  
  107.  
  108.     if ( !face )
  109.       return FT_THROW( Invalid_Argument );
  110.  
  111.     service = ft_pfr_check( face );
  112.     if ( service )
  113.       error = service->get_kerning( face, left, right, avector );
  114.     else
  115.       error = FT_Get_Kerning( face, left, right,
  116.                               FT_KERNING_UNSCALED, avector );
  117.  
  118.     return error;
  119.   }
  120.  
  121.  
  122.   /* documentation is in ftpfr.h */
  123.  
  124.   FT_EXPORT_DEF( FT_Error )
  125.   FT_Get_PFR_Advance( FT_Face   face,
  126.                       FT_UInt   gindex,
  127.                       FT_Pos   *aadvance )
  128.   {
  129.     FT_Error               error;
  130.     FT_Service_PfrMetrics  service;
  131.  
  132.  
  133.     service = ft_pfr_check( face );
  134.     if ( service )
  135.     {
  136.       error = service->get_advance( face, gindex, aadvance );
  137.     }
  138.     else
  139.       /* XXX: TODO: PROVIDE ADVANCE-LOADING METHOD TO ALL FONT DRIVERS */
  140.       error = FT_THROW( Invalid_Argument );
  141.  
  142.     return error;
  143.   }
  144.  
  145.  
  146. /* END */
  147.