Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
3918 Serge 1
/***************************************************************************/
2
/*                                                                         */
3
/*  fttrigon.h                                                             */
4
/*                                                                         */
5
/*    FreeType trigonometric functions (specification).                    */
6
/*                                                                         */
7
/*  Copyright 2001, 2003, 2005, 2007, 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
 
19
#ifndef __FTTRIGON_H__
20
#define __FTTRIGON_H__
21
 
22
#include FT_FREETYPE_H
23
 
24
#ifdef FREETYPE_H
25
#error "freetype.h of FreeType 1 has been loaded!"
26
#error "Please fix the directory search order for header files"
27
#error "so that freetype.h of FreeType 2 is found first."
28
#endif
29
 
30
 
31
FT_BEGIN_HEADER
32
 
33
 
34
  /*************************************************************************/
35
  /*                                                                       */
36
  /* 
*/
37
  /*   computations                                                        */
38
  /*                                                                       */
39
  /*************************************************************************/
40
 
41
 
42
  /*************************************************************************
43
   *
44
   * @type:
45
   *   FT_Angle
46
   *
47
   * @description:
48
   *   This type is used to model angle values in FreeType.  Note that the
49
   *   angle is a 16.16 fixed-point value expressed in degrees.
50
   *
51
   */
52
  typedef FT_Fixed  FT_Angle;
53
 
54
 
55
  /*************************************************************************
56
   *
57
   * @macro:
58
   *   FT_ANGLE_PI
59
   *
60
   * @description:
61
   *   The angle pi expressed in @FT_Angle units.
62
   *
63
   */
64
#define FT_ANGLE_PI  ( 180L << 16 )
65
 
66
 
67
  /*************************************************************************
68
   *
69
   * @macro:
70
   *   FT_ANGLE_2PI
71
   *
72
   * @description:
73
   *   The angle 2*pi expressed in @FT_Angle units.
74
   *
75
   */
76
#define FT_ANGLE_2PI  ( FT_ANGLE_PI * 2 )
77
 
78
 
79
  /*************************************************************************
80
   *
81
   * @macro:
82
   *   FT_ANGLE_PI2
83
   *
84
   * @description:
85
   *   The angle pi/2 expressed in @FT_Angle units.
86
   *
87
   */
88
#define FT_ANGLE_PI2  ( FT_ANGLE_PI / 2 )
89
 
90
 
91
  /*************************************************************************
92
   *
93
   * @macro:
94
   *   FT_ANGLE_PI4
95
   *
96
   * @description:
97
   *   The angle pi/4 expressed in @FT_Angle units.
98
   *
99
   */
100
#define FT_ANGLE_PI4  ( FT_ANGLE_PI / 4 )
101
 
102
 
103
  /*************************************************************************
104
   *
105
   * @function:
106
   *   FT_Sin
107
   *
108
   * @description:
109
   *   Return the sinus of a given angle in fixed-point format.
110
   *
111
   * @input:
112
   *   angle ::
113
   *     The input angle.
114
   *
115
   * @return:
116
   *   The sinus value.
117
   *
118
   * @note:
119
   *   If you need both the sinus and cosinus for a given angle, use the
120
   *   function @FT_Vector_Unit.
121
   *
122
   */
123
  FT_EXPORT( FT_Fixed )
124
  FT_Sin( FT_Angle  angle );
125
 
126
 
127
  /*************************************************************************
128
   *
129
   * @function:
130
   *   FT_Cos
131
   *
132
   * @description:
133
   *   Return the cosinus of a given angle in fixed-point format.
134
   *
135
   * @input:
136
   *   angle ::
137
   *     The input angle.
138
   *
139
   * @return:
140
   *   The cosinus value.
141
   *
142
   * @note:
143
   *   If you need both the sinus and cosinus for a given angle, use the
144
   *   function @FT_Vector_Unit.
145
   *
146
   */
147
  FT_EXPORT( FT_Fixed )
148
  FT_Cos( FT_Angle  angle );
149
 
150
 
151
  /*************************************************************************
152
   *
153
   * @function:
154
   *   FT_Tan
155
   *
156
   * @description:
157
   *   Return the tangent of a given angle in fixed-point format.
158
   *
159
   * @input:
160
   *   angle ::
161
   *     The input angle.
162
   *
163
   * @return:
164
   *   The tangent value.
165
   *
166
   */
167
  FT_EXPORT( FT_Fixed )
168
  FT_Tan( FT_Angle  angle );
169
 
170
 
171
  /*************************************************************************
172
   *
173
   * @function:
174
   *   FT_Atan2
175
   *
176
   * @description:
177
   *   Return the arc-tangent corresponding to a given vector (x,y) in
178
   *   the 2d plane.
179
   *
180
   * @input:
181
   *   x ::
182
   *     The horizontal vector coordinate.
183
   *
184
   *   y ::
185
   *     The vertical vector coordinate.
186
   *
187
   * @return:
188
   *   The arc-tangent value (i.e. angle).
189
   *
190
   */
191
  FT_EXPORT( FT_Angle )
192
  FT_Atan2( FT_Fixed  x,
193
            FT_Fixed  y );
194
 
195
 
196
  /*************************************************************************
197
   *
198
   * @function:
199
   *   FT_Angle_Diff
200
   *
201
   * @description:
202
   *   Return the difference between two angles.  The result is always
203
   *   constrained to the ]-PI..PI] interval.
204
   *
205
   * @input:
206
   *   angle1 ::
207
   *     First angle.
208
   *
209
   *   angle2 ::
210
   *     Second angle.
211
   *
212
   * @return:
213
   *   Constrained value of `value2-value1'.
214
   *
215
   */
216
  FT_EXPORT( FT_Angle )
217
  FT_Angle_Diff( FT_Angle  angle1,
218
                 FT_Angle  angle2 );
219
 
220
 
221
  /*************************************************************************
222
   *
223
   * @function:
224
   *   FT_Vector_Unit
225
   *
226
   * @description:
227
   *   Return the unit vector corresponding to a given angle.  After the
228
   *   call, the value of `vec.x' will be `sin(angle)', and the value of
229
   *   `vec.y' will be `cos(angle)'.
230
   *
231
   *   This function is useful to retrieve both the sinus and cosinus of a
232
   *   given angle quickly.
233
   *
234
   * @output:
235
   *   vec ::
236
   *     The address of target vector.
237
   *
238
   * @input:
239
   *   angle ::
240
   *     The address of angle.
241
   *
242
   */
243
  FT_EXPORT( void )
244
  FT_Vector_Unit( FT_Vector*  vec,
245
                  FT_Angle    angle );
246
 
247
 
248
  /*************************************************************************
249
   *
250
   * @function:
251
   *   FT_Vector_Rotate
252
   *
253
   * @description:
254
   *   Rotate a vector by a given angle.
255
   *
256
   * @inout:
257
   *   vec ::
258
   *     The address of target vector.
259
   *
260
   * @input:
261
   *   angle ::
262
   *     The address of angle.
263
   *
264
   */
265
  FT_EXPORT( void )
266
  FT_Vector_Rotate( FT_Vector*  vec,
267
                    FT_Angle    angle );
268
 
269
 
270
  /*************************************************************************
271
   *
272
   * @function:
273
   *   FT_Vector_Length
274
   *
275
   * @description:
276
   *   Return the length of a given vector.
277
   *
278
   * @input:
279
   *   vec ::
280
   *     The address of target vector.
281
   *
282
   * @return:
283
   *   The vector length, expressed in the same units that the original
284
   *   vector coordinates.
285
   *
286
   */
287
  FT_EXPORT( FT_Fixed )
288
  FT_Vector_Length( FT_Vector*  vec );
289
 
290
 
291
  /*************************************************************************
292
   *
293
   * @function:
294
   *   FT_Vector_Polarize
295
   *
296
   * @description:
297
   *   Compute both the length and angle of a given vector.
298
   *
299
   * @input:
300
   *   vec ::
301
   *     The address of source vector.
302
   *
303
   * @output:
304
   *   length ::
305
   *     The vector length.
306
   *
307
   *   angle ::
308
   *     The vector angle.
309
   *
310
   */
311
  FT_EXPORT( void )
312
  FT_Vector_Polarize( FT_Vector*  vec,
313
                      FT_Fixed   *length,
314
                      FT_Angle   *angle );
315
 
316
 
317
  /*************************************************************************
318
   *
319
   * @function:
320
   *   FT_Vector_From_Polar
321
   *
322
   * @description:
323
   *   Compute vector coordinates from a length and angle.
324
   *
325
   * @output:
326
   *   vec ::
327
   *     The address of source vector.
328
   *
329
   * @input:
330
   *   length ::
331
   *     The vector length.
332
   *
333
   *   angle ::
334
   *     The vector angle.
335
   *
336
   */
337
  FT_EXPORT( void )
338
  FT_Vector_From_Polar( FT_Vector*  vec,
339
                        FT_Fixed    length,
340
                        FT_Angle    angle );
341
 
342
  /* */
343
 
344
 
345
FT_END_HEADER
346
 
347
#endif /* __FTTRIGON_H__ */
348
 
349
 
350
/* END */