PageRenderTime 15ms CodeModel.GetById 2ms app.highlight 9ms RepoModel.GetById 1ms app.codeStats 0ms

/src/freetype/src/base/ftpfr.c

https://bitbucket.org/cabalistic/ogredeps/
C | 144 lines | 86 code | 35 blank | 23 comment | 11 complexity | be7060b6a162a94f85a75784746f73fe MD5 | raw file
  1/***************************************************************************/
  2/*                                                                         */
  3/*  ftpfr.c                                                                */
  4/*                                                                         */
  5/*    FreeType API for accessing PFR-specific data (body).                 */
  6/*                                                                         */
  7/*  Copyright 2002, 2003, 2004, 2008, 2010 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_OBJECTS_H
 20#include FT_SERVICE_PFR_H
 21
 22
 23  /* check the format */
 24  static FT_Service_PfrMetrics
 25  ft_pfr_check( FT_Face  face )
 26  {
 27    FT_Service_PfrMetrics  service = NULL;
 28
 29
 30    if ( face )
 31      FT_FACE_LOOKUP_SERVICE( face, service, PFR_METRICS );
 32
 33    return service;
 34  }
 35
 36
 37  /* documentation is in ftpfr.h */
 38
 39  FT_EXPORT_DEF( FT_Error )
 40  FT_Get_PFR_Metrics( FT_Face    face,
 41                      FT_UInt   *aoutline_resolution,
 42                      FT_UInt   *ametrics_resolution,
 43                      FT_Fixed  *ametrics_x_scale,
 44                      FT_Fixed  *ametrics_y_scale )
 45  {
 46    FT_Error               error = FT_Err_Ok;
 47    FT_Service_PfrMetrics  service;
 48
 49
 50    if ( !face )
 51      return FT_Err_Invalid_Argument;
 52
 53    service = ft_pfr_check( face );
 54    if ( service )
 55    {
 56      error = service->get_metrics( face,
 57                                    aoutline_resolution,
 58                                    ametrics_resolution,
 59                                    ametrics_x_scale,
 60                                    ametrics_y_scale );
 61    }
 62    else
 63    {
 64      FT_Fixed  x_scale, y_scale;
 65
 66
 67      /* this is not a PFR font */
 68      if ( aoutline_resolution )
 69        *aoutline_resolution = face->units_per_EM;
 70
 71      if ( ametrics_resolution )
 72        *ametrics_resolution = face->units_per_EM;
 73
 74      x_scale = y_scale = 0x10000L;
 75      if ( face->size )
 76      {
 77        x_scale = face->size->metrics.x_scale;
 78        y_scale = face->size->metrics.y_scale;
 79      }
 80
 81      if ( ametrics_x_scale )
 82        *ametrics_x_scale = x_scale;
 83
 84      if ( ametrics_y_scale )
 85        *ametrics_y_scale = y_scale;
 86
 87      error = FT_Err_Unknown_File_Format;
 88    }
 89
 90    return error;
 91  }
 92
 93
 94  /* documentation is in ftpfr.h */
 95
 96  FT_EXPORT_DEF( FT_Error )
 97  FT_Get_PFR_Kerning( FT_Face     face,
 98                      FT_UInt     left,
 99                      FT_UInt     right,
100                      FT_Vector  *avector )
101  {
102    FT_Error               error;
103    FT_Service_PfrMetrics  service;
104
105
106    if ( !face )
107      return FT_Err_Invalid_Argument;
108
109    service = ft_pfr_check( face );
110    if ( service )
111      error = service->get_kerning( face, left, right, avector );
112    else
113      error = FT_Get_Kerning( face, left, right,
114                              FT_KERNING_UNSCALED, avector );
115
116    return error;
117  }
118
119
120  /* documentation is in ftpfr.h */
121
122  FT_EXPORT_DEF( FT_Error )
123  FT_Get_PFR_Advance( FT_Face   face,
124                      FT_UInt   gindex,
125                      FT_Pos   *aadvance )
126  {
127    FT_Error               error;
128    FT_Service_PfrMetrics  service;
129
130
131    service = ft_pfr_check( face );
132    if ( service )
133    {
134      error = service->get_advance( face, gindex, aadvance );
135    }
136    else
137      /* XXX: TODO: PROVIDE ADVANCE-LOADING METHOD TO ALL FONT DRIVERS */
138      error = FT_Err_Invalid_Argument;
139
140    return error;
141  }
142
143
144/* END */