ReactOS Fundraising Campaign 2012
 
€ 3,303 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

ftcalc.h

Go to the documentation of this file.
00001 /***************************************************************************/
00002 /*                                                                         */
00003 /*  ftcalc.h                                                               */
00004 /*                                                                         */
00005 /*    Arithmetic computations (specification).                             */
00006 /*                                                                         */
00007 /*  Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2008, 2009 by       */
00008 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
00009 /*                                                                         */
00010 /*  This file is part of the FreeType project, and may only be used,       */
00011 /*  modified, and distributed under the terms of the FreeType project      */
00012 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
00013 /*  this file you indicate that you have read the license and              */
00014 /*  understand and accept it fully.                                        */
00015 /*                                                                         */
00016 /***************************************************************************/
00017 
00018 
00019 #ifndef __FTCALC_H__
00020 #define __FTCALC_H__
00021 
00022 
00023 #include <ft2build.h>
00024 #include FT_FREETYPE_H
00025 
00026 
00027 FT_BEGIN_HEADER
00028 
00029 
00030   /*************************************************************************/
00031   /*                                                                       */
00032   /* <Function>                                                            */
00033   /*    FT_FixedSqrt                                                       */
00034   /*                                                                       */
00035   /* <Description>                                                         */
00036   /*    Computes the square root of a 16.16 fixed point value.             */
00037   /*                                                                       */
00038   /* <Input>                                                               */
00039   /*    x :: The value to compute the root for.                            */
00040   /*                                                                       */
00041   /* <Return>                                                              */
00042   /*    The result of `sqrt(x)'.                                           */
00043   /*                                                                       */
00044   /* <Note>                                                                */
00045   /*    This function is not very fast.                                    */
00046   /*                                                                       */
00047   FT_BASE( FT_Int32 )
00048   FT_SqrtFixed( FT_Int32  x );
00049 
00050 
00051 #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
00052 
00053   /*************************************************************************/
00054   /*                                                                       */
00055   /* <Function>                                                            */
00056   /*    FT_Sqrt32                                                          */
00057   /*                                                                       */
00058   /* <Description>                                                         */
00059   /*    Computes the square root of an Int32 integer (which will be        */
00060   /*    handled as an unsigned long value).                                */
00061   /*                                                                       */
00062   /* <Input>                                                               */
00063   /*    x :: The value to compute the root for.                            */
00064   /*                                                                       */
00065   /* <Return>                                                              */
00066   /*    The result of `sqrt(x)'.                                           */
00067   /*                                                                       */
00068   FT_EXPORT( FT_Int32 )
00069   FT_Sqrt32( FT_Int32  x );
00070 
00071 #endif /* FT_CONFIG_OPTION_OLD_INTERNALS */
00072 
00073 
00074   /*************************************************************************/
00075   /*                                                                       */
00076   /* FT_MulDiv() and FT_MulFix() are declared in freetype.h.               */
00077   /*                                                                       */
00078   /*************************************************************************/
00079 
00080 
00081 #ifdef TT_USE_BYTECODE_INTERPRETER
00082 
00083   /*************************************************************************/
00084   /*                                                                       */
00085   /* <Function>                                                            */
00086   /*    FT_MulDiv_No_Round                                                 */
00087   /*                                                                       */
00088   /* <Description>                                                         */
00089   /*    A very simple function used to perform the computation `(a*b)/c'   */
00090   /*    (without rounding) with maximal accuracy (it uses a 64-bit         */
00091   /*    intermediate integer whenever necessary).                          */
00092   /*                                                                       */
00093   /*    This function isn't necessarily as fast as some processor specific */
00094   /*    operations, but is at least completely portable.                   */
00095   /*                                                                       */
00096   /* <Input>                                                               */
00097   /*    a :: The first multiplier.                                         */
00098   /*    b :: The second multiplier.                                        */
00099   /*    c :: The divisor.                                                  */
00100   /*                                                                       */
00101   /* <Return>                                                              */
00102   /*    The result of `(a*b)/c'.  This function never traps when trying to */
00103   /*    divide by zero; it simply returns `MaxInt' or `MinInt' depending   */
00104   /*    on the signs of `a' and `b'.                                       */
00105   /*                                                                       */
00106   FT_BASE( FT_Long )
00107   FT_MulDiv_No_Round( FT_Long  a,
00108                       FT_Long  b,
00109                       FT_Long  c );
00110 
00111 #endif /* TT_USE_BYTECODE_INTERPRETER */
00112 
00113 
00114   /*
00115    *  A variant of FT_Matrix_Multiply which scales its result afterwards.
00116    *  The idea is that both `a' and `b' are scaled by factors of 10 so that
00117    *  the values are as precise as possible to get a correct result during
00118    *  the 64bit multiplication.  Let `sa' and `sb' be the scaling factors of
00119    *  `a' and `b', respectively, then the scaling factor of the result is
00120    *  `sa*sb'.
00121    */
00122   FT_BASE( void )
00123   FT_Matrix_Multiply_Scaled( const FT_Matrix*  a,
00124                              FT_Matrix        *b,
00125                              FT_Long           scaling );
00126 
00127 
00128   /*
00129    *  A variant of FT_Vector_Transform.  See comments for
00130    *  FT_Matrix_Multiply_Scaled.
00131    */
00132 
00133   FT_BASE( void )
00134   FT_Vector_Transform_Scaled( FT_Vector*        vector,
00135                               const FT_Matrix*  matrix,
00136                               FT_Long           scaling );
00137 
00138 
00139   /*
00140    *  Return -1, 0, or +1, depending on the orientation of a given corner.
00141    *  We use the Cartesian coordinate system, with positive vertical values
00142    *  going upwards.  The function returns +1 if the corner turns to the
00143    *  left, -1 to the right, and 0 for undecidable cases.
00144    */
00145   FT_BASE( FT_Int )
00146   ft_corner_orientation( FT_Pos  in_x,
00147                          FT_Pos  in_y,
00148                          FT_Pos  out_x,
00149                          FT_Pos  out_y );
00150 
00151   /*
00152    *  Return TRUE if a corner is flat or nearly flat.  This is equivalent to
00153    *  saying that the angle difference between the `in' and `out' vectors is
00154    *  very small.
00155    */
00156   FT_BASE( FT_Int )
00157   ft_corner_is_flat( FT_Pos  in_x,
00158                      FT_Pos  in_y,
00159                      FT_Pos  out_x,
00160                      FT_Pos  out_y );
00161 
00162 
00163 #define INT_TO_F26DOT6( x )    ( (FT_Long)(x) << 6  )
00164 #define INT_TO_F2DOT14( x )    ( (FT_Long)(x) << 14 )
00165 #define INT_TO_FIXED( x )      ( (FT_Long)(x) << 16 )
00166 #define F2DOT14_TO_FIXED( x )  ( (FT_Long)(x) << 2  )
00167 #define FLOAT_TO_FIXED( x )    ( (FT_Long)( x * 65536.0 ) )
00168 #define FIXED_TO_INT( x )      ( FT_RoundFix( x ) >> 16 )
00169 
00170 #define ROUND_F26DOT6( x )     ( x >= 0 ? (    ( (x) + 32 ) & -64 )     \
00171                                         : ( -( ( 32 - (x) ) & -64 ) ) )
00172 
00173 
00174 FT_END_HEADER
00175 
00176 #endif /* __FTCALC_H__ */
00177 
00178 
00179 /* END */

Generated on Tue May 15 04:58:07 2012 for ReactOS by doxygen 1.6.3

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.