< prev index next >

src/java.desktop/share/native/libfreetype/src/base/fttrigon.c

Print this page

        

@@ -1,35 +1,35 @@
-/***************************************************************************/
-/*                                                                         */
-/*  fttrigon.c                                                             */
-/*                                                                         */
-/*    FreeType trigonometric functions (body).                             */
-/*                                                                         */
-/*  Copyright 2001-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-/*                                                                         */
-/*  This file is part of the FreeType project, and may only be used,       */
-/*  modified, and distributed under the terms of the FreeType project      */
-/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-/*  this file you indicate that you have read the license and              */
-/*  understand and accept it fully.                                        */
-/*                                                                         */
-/***************************************************************************/
-
-  /*************************************************************************/
-  /*                                                                       */
-  /* This is a fixed-point CORDIC implementation of trigonometric          */
-  /* functions as well as transformations between Cartesian and polar      */
-  /* coordinates.  The angles are represented as 16.16 fixed-point values  */
-  /* in degrees, i.e., the angular resolution is 2^-16 degrees.  Note that */
-  /* only vectors longer than 2^16*180/pi (or at least 22 bits) on a       */
-  /* discrete Cartesian grid can have the same or better angular           */
-  /* resolution.  Therefore, to maintain this precision, some functions    */
-  /* require an interim upscaling of the vectors, whereas others operate   */
-  /* with 24-bit long vectors directly.                                    */
-  /*                                                                       */
-  /*************************************************************************/
+/****************************************************************************
+ *
+ * fttrigon.c
+ *
+ *   FreeType trigonometric functions (body).
+ *
+ * Copyright (C) 2001-2019 by
+ * David Turner, Robert Wilhelm, and Werner Lemberg.
+ *
+ * This file is part of the FreeType project, and may only be used,
+ * modified, and distributed under the terms of the FreeType project
+ * license, LICENSE.TXT.  By continuing to use, modify, or distribute
+ * this file you indicate that you have read the license and
+ * understand and accept it fully.
+ *
+ */
+
+  /**************************************************************************
+   *
+   * This is a fixed-point CORDIC implementation of trigonometric
+   * functions as well as transformations between Cartesian and polar
+   * coordinates.  The angles are represented as 16.16 fixed-point values
+   * in degrees, i.e., the angular resolution is 2^-16 degrees.  Note that
+   * only vectors longer than 2^16*180/pi (or at least 22 bits) on a
+   * discrete Cartesian grid can have the same or better angular
+   * resolution.  Therefore, to maintain this precision, some functions
+   * require an interim upscaling of the vectors, whereas others operate
+   * with 24-bit long vectors directly.
+   *
+   */
 
 #include <ft2build.h>
 #include FT_INTERNAL_OBJECTS_H
 #include FT_INTERNAL_CALC_H
 #include FT_TRIGONOMETRY_H

@@ -323,14 +323,14 @@
   /* documentation is in fttrigon.h */
 
   FT_EXPORT_DEF( FT_Fixed )
   FT_Tan( FT_Angle  angle )
   {
-    FT_Vector  v;
+    FT_Vector  v = { 1 << 24, 0 };
 
 
-    FT_Vector_Unit( &v, angle );
+    ft_trig_pseudo_rotate( &v, angle );
 
     return FT_DivFix( v.y, v.x );
   }
 
 

@@ -370,18 +370,10 @@
     vec->x = ( vec->x + 0x80L ) >> 8;
     vec->y = ( vec->y + 0x80L ) >> 8;
   }
 
 
-  /* these macros return 0 for positive numbers,
-     and -1 for negative ones */
-#define FT_SIGN_LONG( x )   ( (x) >> ( FT_SIZEOF_LONG * 8 - 1 ) )
-#define FT_SIGN_INT( x )    ( (x) >> ( FT_SIZEOF_INT * 8 - 1 ) )
-#define FT_SIGN_INT32( x )  ( (x) >> 31 )
-#define FT_SIGN_INT16( x )  ( (x) >> 15 )
-
-
   /* documentation is in fttrigon.h */
 
   FT_EXPORT_DEF( void )
   FT_Vector_Rotate( FT_Vector*  vec,
                     FT_Angle    angle )

@@ -406,12 +398,12 @@
     if ( shift > 0 )
     {
       FT_Int32  half = (FT_Int32)1L << ( shift - 1 );
 
 
-      vec->x = ( v.x + half + FT_SIGN_LONG( v.x ) ) >> shift;
-      vec->y = ( v.y + half + FT_SIGN_LONG( v.y ) ) >> shift;
+      vec->x = ( v.x + half - ( v.x < 0 ) ) >> shift;
+      vec->y = ( v.y + half - ( v.y < 0 ) ) >> shift;
     }
     else
     {
       shift  = -shift;
       vec->x = (FT_Pos)( (FT_ULong)v.x << shift );
< prev index next >