~ubuntu-branches/ubuntu/wily/hedgewars/wily

« back to all changes in this revision

Viewing changes to misc/libfreetype/src/pfr/pfrdrivr.c

  • Committer: Package Import Robot
  • Author(s): Dmitry E. Oboukhov
  • Date: 2011-09-23 10:16:55 UTC
  • mfrom: (1.2.11 upstream)
  • Revision ID: package-import@ubuntu.com-20110923101655-3977th2gc5n0a3pv
Tags: 0.9.16-1
* New upstream version.
 + Downloadable content! Simply click to install any content.
   New voices, hats, maps, themes, translations, music, scripts...
   Hedgewars is now more customisable than ever before! As time goes
   by we will be soliciting community content to feature on this page,
   so remember to check it from time to time. If you decide you want
   to go back to standard Hedgewars, just remove the Data directory
   from your Hedgewars config directory.
 + 3-D rendering! Diorama-like rendering of the game in a variety
   of 3D modes. Let us know which ones work best for you, we didn't
   really have the equipment to test them all.
 + Resizable game window.
 + New utilities! The Time Box will remove one of your hedgehogs
   from the game for a while, protecting from attack until it returns,
   somewhere else on the map. Land spray will allow you to build bridges,
   seal up holes, or just make life unpleasant for your enemies.
 + New single player: Bamboo Thicket, That Sinking Feeling, Newton and
   the Tree and multi-player: The Specialists, Space Invaders,
   Racer - scripts! And a ton more script hooks for scripters
 + New twists on old weapons. Drill strike, seduction and fire have
   been adjusted. Defective mines have been added, rope can attach to
   hogs/crates/barrels again, grenades now have variable bounce (use
   precise key + 1-5). Portal gun is now more usable in flight and
   all game actions are a lot faster.
 + New theme - Golf, dozens of new community hats and a new
   localised Default voice, Ukranian.

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 */