modules/freetype2/include/fttrigon.h

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     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 /***************************************************************************/
    19 #ifndef __FTTRIGON_H__
    20 #define __FTTRIGON_H__
    22 #include FT_FREETYPE_H
    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
    31 FT_BEGIN_HEADER
    34   /*************************************************************************/
    35   /*                                                                       */
    36   /* <Section>                                                             */
    37   /*   computations                                                        */
    38   /*                                                                       */
    39   /*************************************************************************/
    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;
    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 )
    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 )
    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 )
    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 )
   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 );
   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 );
   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 );
   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 );
   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 );
   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 );
   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 );
   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 );
   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 );
   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 );
   342   /* */
   345 FT_END_HEADER
   347 #endif /* __FTTRIGON_H__ */
   350 /* END */

mercurial