~ubuntu-branches/ubuntu/vivid/emscripten/vivid

« back to all changes in this revision

Viewing changes to tests/freetype/src/pfr/pfrdrivr.c

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2013-05-02 13:11:51 UTC
  • Revision ID: package-import@ubuntu.com-20130502131151-q8dvteqr1ef2x7xz
Tags: upstream-1.4.1~20130504~adb56cb
ImportĀ upstreamĀ versionĀ 1.4.1~20130504~adb56cb

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/***************************************************************************/
 
2
/*                                                                         */
 
3
/*  pfrdrivr.c                                                             */
 
4
/*                                                                         */
 
5
/*    FreeType PFR driver interface (body).                                */
 
6
/*                                                                         */
 
7
/*  Copyright 2002, 2003, 2004, 2006, 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
 
 
19
#include <ft2build.h>
 
20
#include FT_INTERNAL_DEBUG_H
 
21
#include FT_INTERNAL_STREAM_H
 
22
#include FT_SERVICE_PFR_H
 
23
#include FT_SERVICE_XFREE86_NAME_H
 
24
#include "pfrdrivr.h"
 
25
#include "pfrobjs.h"
 
26
 
 
27
#include "pfrerror.h"
 
28
 
 
29
 
 
30
  FT_CALLBACK_DEF( FT_Error )
 
31
  pfr_get_kerning( FT_Face     pfrface,     /* PFR_Face */
 
32
                   FT_UInt     left,
 
33
                   FT_UInt     right,
 
34
                   FT_Vector  *avector )
 
35
  {
 
36
    PFR_Face     face = (PFR_Face)pfrface;
 
37
    PFR_PhyFont  phys = &face->phy_font;
 
38
 
 
39
 
 
40
    pfr_face_get_kerning( pfrface, left, right, avector );
 
41
 
 
42
    /* convert from metrics to outline units when necessary */
 
43
    if ( phys->outline_resolution != phys->metrics_resolution )
 
44
    {
 
45
      if ( avector->x != 0 )
 
46
        avector->x = FT_MulDiv( avector->x, phys->outline_resolution,
 
47
                                            phys->metrics_resolution );
 
48
 
 
49
      if ( avector->y != 0 )
 
50
        avector->y = FT_MulDiv( avector->x, phys->outline_resolution,
 
51
                                            phys->metrics_resolution );
 
52
    }
 
53
 
 
54
    return PFR_Err_Ok;
 
55
  }
 
56
 
 
57
 
 
58
 /*
 
59
  *  PFR METRICS SERVICE
 
60
  *
 
61
  */
 
62
 
 
63
  FT_CALLBACK_DEF( FT_Error )
 
64
  pfr_get_advance( FT_Face   pfrface,       /* PFR_Face */
 
65
                   FT_UInt   gindex,
 
66
                   FT_Pos   *anadvance )
 
67
  {
 
68
    PFR_Face  face  = (PFR_Face)pfrface;
 
69
    FT_Error  error = PFR_Err_Invalid_Argument;
 
70
 
 
71
 
 
72
    *anadvance = 0;
 
73
 
 
74
    if ( !gindex )
 
75
      goto Exit;
 
76
 
 
77
    gindex--;
 
78
 
 
79
    if ( face )
 
80
    {
 
81
      PFR_PhyFont  phys = &face->phy_font;
 
82
 
 
83
 
 
84
      if ( gindex < phys->num_chars )
 
85
      {
 
86
        *anadvance = phys->chars[gindex].advance;
 
87
        error = PFR_Err_Ok;
 
88
      }
 
89
    }
 
90
 
 
91
  Exit:
 
92
    return error;
 
93
  }
 
94
 
 
95
 
 
96
  FT_CALLBACK_DEF( FT_Error )
 
97
  pfr_get_metrics( FT_Face    pfrface,      /* PFR_Face */
 
98
                   FT_UInt   *anoutline_resolution,
 
99
                   FT_UInt   *ametrics_resolution,
 
100
                   FT_Fixed  *ametrics_x_scale,
 
101
                   FT_Fixed  *ametrics_y_scale )
 
102
  {
 
103
    PFR_Face     face = (PFR_Face)pfrface;
 
104
    PFR_PhyFont  phys = &face->phy_font;
 
105
    FT_Fixed     x_scale, y_scale;
 
106
    FT_Size      size = face->root.size;
 
107
 
 
108
 
 
109
    if ( anoutline_resolution )
 
110
      *anoutline_resolution = phys->outline_resolution;
 
111
 
 
112
    if ( ametrics_resolution )
 
113
      *ametrics_resolution = phys->metrics_resolution;
 
114
 
 
115
    x_scale = 0x10000L;
 
116
    y_scale = 0x10000L;
 
117
 
 
118
    if ( size )
 
119
    {
 
120
      x_scale = FT_DivFix( size->metrics.x_ppem << 6,
 
121
                           phys->metrics_resolution );
 
122
 
 
123
      y_scale = FT_DivFix( size->metrics.y_ppem << 6,
 
124
                           phys->metrics_resolution );
 
125
    }
 
126
 
 
127
    if ( ametrics_x_scale )
 
128
      *ametrics_x_scale = x_scale;
 
129
 
 
130
    if ( ametrics_y_scale )
 
131
      *ametrics_y_scale = y_scale;
 
132
 
 
133
    return PFR_Err_Ok;
 
134
  }
 
135
 
 
136
 
 
137
  FT_CALLBACK_TABLE_DEF
 
138
  const FT_Service_PfrMetricsRec  pfr_metrics_service_rec =
 
139
  {
 
140
    pfr_get_metrics,
 
141
    pfr_face_get_kerning,
 
142
    pfr_get_advance
 
143
  };
 
144
 
 
145
 
 
146
 /*
 
147
  *  SERVICE LIST
 
148
  *
 
149
  */
 
150
 
 
151
  static const FT_ServiceDescRec  pfr_services[] =
 
152
  {
 
153
    { FT_SERVICE_ID_PFR_METRICS, &pfr_metrics_service_rec },
 
154
    { FT_SERVICE_ID_XF86_NAME,   FT_XF86_FORMAT_PFR },
 
155
    { NULL, NULL }
 
156
  };
 
157
 
 
158
 
 
159
  FT_CALLBACK_DEF( FT_Module_Interface )
 
160
  pfr_get_service( FT_Module         module,
 
161
                   const FT_String*  service_id )
 
162
  {
 
163
    FT_UNUSED( module );
 
164
 
 
165
    return ft_service_list_lookup( pfr_services, service_id );
 
166
  }
 
167
 
 
168
 
 
169
  FT_CALLBACK_TABLE_DEF
 
170
  const FT_Driver_ClassRec  pfr_driver_class =
 
171
  {
 
172
    {
 
173
      FT_MODULE_FONT_DRIVER     |
 
174
      FT_MODULE_DRIVER_SCALABLE,
 
175
 
 
176
      sizeof( FT_DriverRec ),
 
177
 
 
178
      "pfr",
 
179
      0x10000L,
 
180
      0x20000L,
 
181
 
 
182
      NULL,
 
183
 
 
184
      0,
 
185
      0,
 
186
      pfr_get_service
 
187
    },
 
188
 
 
189
    sizeof( PFR_FaceRec ),
 
190
    sizeof( PFR_SizeRec ),
 
191
    sizeof( PFR_SlotRec ),
 
192
 
 
193
    pfr_face_init,
 
194
    pfr_face_done,
 
195
    0,                  /* FT_Size_InitFunc */
 
196
    0,                  /* FT_Size_DoneFunc */
 
197
    pfr_slot_init,
 
198
    pfr_slot_done,
 
199
 
 
200
#ifdef FT_CONFIG_OPTION_OLD_INTERNALS
 
201
    ft_stub_set_char_sizes,
 
202
    ft_stub_set_pixel_sizes,
 
203
#endif
 
204
    pfr_slot_load,
 
205
 
 
206
    pfr_get_kerning,
 
207
    0,                  /* FT_Face_AttachFunc      */
 
208
    0,                   /* FT_Face_GetAdvancesFunc */
 
209
    0,                  /* FT_Size_RequestFunc */
 
210
    0,                  /* FT_Size_SelectFunc  */
 
211
  };
 
212
 
 
213
 
 
214
/* END */