tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

fttrigon.h (7411B)


      1 /****************************************************************************
      2 *
      3 * fttrigon.h
      4 *
      5 *   FreeType trigonometric functions (specification).
      6 *
      7 * Copyright (C) 2001-2025 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 <freetype/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   * @section:
     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 the 2d
    178   *   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 `angle2-angle1`.
    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 `cos(angle)`, and the value of
    229   *   `vec.y` will be `sin(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 input 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 input 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 */