shithub: freetype+ttf2subf

Download patch

ref: f9fccbee8b265a7576b358191e940299ebe60827
parent: eaab4a3c3bccd39e0aeb7108d295574cffcf6c22
author: Werner Lemberg <[email protected]>
date: Thu May 19 03:20:24 EDT 2005

* src/raster/ftmisc.h: New file.  Only needed if ftraster.c is
compiled as stand-alone.

* src/raster/ftraster.c: Add comment how to compile as stand-alone.
s/FT_CONFIG_OPTION_STATIC_RASTER/FT_STATIC_RASTER/.
s/TT_STATIC_RASTER/FT_STATIC_RASTER/.
[_STANDALONE_]: Include ftimage.h and ftmisc.h.
(FT_TRACE1, FT_TRACE6, ft_memset, FT_MEM_ZERO): Define
conditionally.
(Render_Glyph, Render_Gray_Glyph): Return Raster_Err_None (or
Raster_Err_Unsupported).
(ft_black_new) [_STANDALONE_]: Fix type of `the_raster'.
(ft_black_init, ft_black_reset, ft_black_set_mode, ft_black_render):
Use `ras', not `raster'.
(ft_black_done): Use FT_UNUSED_RASTER.
(Horizontal_Sweep_Init, Horizontal_Sweep_Step,
Horizontal_Gray_Sweep_Span): Use FT_UNUSED_RASTER.


* docs/CHANGES: Updated.

git/fs: mount .git/fs: mount/attach disallowed
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,8 +1,30 @@
-2004-05-18  Werner Lemberg  <[email protected]>
+2005-05-18  Kirill Smelkov  <[email protected]>
 
+	* src/raster/ftmisc.h: New file.  Only needed if ftraster.c is
+	compiled as stand-alone.
+
+	* src/raster/ftraster.c: Add comment how to compile as stand-alone.
+	s/FT_CONFIG_OPTION_STATIC_RASTER/FT_STATIC_RASTER/.
+	s/TT_STATIC_RASTER/FT_STATIC_RASTER/.
+	[_STANDALONE_]: Include ftimage.h and ftmisc.h.
+	(FT_TRACE1, FT_TRACE6, ft_memset, FT_MEM_ZERO): Define
+	conditionally.
+	(Render_Glyph, Render_Gray_Glyph): Return Raster_Err_None (or
+	Raster_Err_Unsupported).
+	(ft_black_new) [_STANDALONE_]: Fix type of `the_raster'.
+	(ft_black_init, ft_black_reset, ft_black_set_mode, ft_black_render):
+	Use `ras', not `raster'.
+	(ft_black_done): Use FT_UNUSED_RASTER.
+	(Horizontal_Sweep_Init, Horizontal_Sweep_Step,
+	Horizontal_Gray_Sweep_Span): Use FT_UNUSED_RASTER.
+
+2005-05-18  Werner Lemberg  <[email protected]>
+
 	* docs/announce: Start updating.
 
-2004-05-16  Vitaliy Pasternak  <[email protected]>
+	* docs/CHANGES: Updated.
+
+2005-05-16  Vitaliy Pasternak  <[email protected]>
 
 	* builds/win32/visualc/freetype.vcproj: Updated.
 	Exclude debug info for `Release' versions to reduce library size.
--- a/docs/CHANGES
+++ b/docs/CHANGES
@@ -100,6 +100,9 @@
       compressed form (as a trie) which saves about 20KByte of code as
       well.
 
+    - Kyrill  Smelkov provided  patches to make  src/raster/ftraster.c
+      compile stand-alone again.
+
 
 ======================================================================
 
--- /dev/null
+++ b/src/raster/ftmisc.h
@@ -1,0 +1,83 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftmisc.h                                                               */
+/*                                                                         */
+/*    Miscellaneous macros for stand-alone rasterizer (specification       */
+/*    only).                                                               */
+/*                                                                         */
+/*  Copyright 2005 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 file is *not* portable!  You have to adapt */
+  /* its definitions to your platform.               */
+  /*                                                 */
+  /***************************************************/
+
+#ifndef __FTMISC_H__
+#define __FTMISC_H__
+
+#include <string.h> /* memset */
+
+#define FT_BEGIN_HEADER
+#define FT_END_HEADER
+
+#define FT_LOCAL_DEF( x )   static x
+
+  /* from include/freetype2/fttypes.h */
+
+  typedef unsigned char  FT_Byte;
+  typedef signed int     FT_Int;
+  typedef unsigned int   FT_UInt;
+  typedef signed long    FT_Long;
+  typedef unsigned long  FT_ULong;
+  typedef signed long    FT_F26Dot6;
+  typedef int            FT_Error;
+
+#define FT_MAKE_TAG( _x1, _x2, _x3, _x4 ) \
+          ( ( (FT_ULong)_x1 << 24 ) |     \
+            ( (FT_ULong)_x2 << 16 ) |     \
+            ( (FT_ULong)_x3 <<  8 ) |     \
+              (FT_ULong)_x4         )
+
+
+  /* from src/ftcalc.c */
+
+#include <inttypes.h>
+
+  typedef int64_t  FT_Int64;
+
+  static FT_Long
+  FT_MulDiv( FT_Long  a,
+             FT_Long  b,
+             FT_Long  c )
+  {
+    FT_Int   s;
+    FT_Long  d;
+
+
+    s = 1;
+    if ( a < 0 ) { a = -a; s = -1; }
+    if ( b < 0 ) { b = -b; s = -s; }
+    if ( c < 0 ) { c = -c; s = -s; }
+
+    d = (FT_Long)( c > 0 ? ( (FT_Int64)a * b + ( c >> 1 ) ) / c
+                         : 0x7FFFFFFFL );
+
+    return ( s > 0 ) ? d : -d;
+  }
+
+#endif /* __FTMISC_H__ */
+
+
+/* END */
--- a/src/raster/ftraster.c
+++ b/src/raster/ftraster.c
@@ -17,16 +17,50 @@
 
   /*************************************************************************/
   /*                                                                       */
+  /* This file can be compiled without the rest of the FreeType engine, by */
+  /* defining the _STANDALONE_ macro when compiling it.  You also need to  */
+  /* put the files `ftimage.h' and `ftmisc.h' into the $(incdir)           */
+  /* directory.  Typically, you should do something like                   */
+  /*                                                                       */
+  /* - copy `src/raster/ftraster.c' (this file) to your current directory  */
+  /*                                                                       */
+  /* - copy `include/freetype/ftimage.h' and `src/raster/ftmisc.h'         */
+  /*   to your current directory                                           */
+  /*                                                                       */
+  /* - compile `ftraster' with the _STANDALONE_ macro defined, as in       */
+  /*                                                                       */
+  /*     cc -c -D_STANDALONE_ ftraster.c                                   */
+  /*                                                                       */
+  /* The renderer can be initialized with a call to                        */
+  /* `ft_standard_raster.raster_new'; a bitmap can be generated            */
+  /* with a call to `ft_standard_raster.raster_render'.                    */
+  /*                                                                       */
+  /* See the comments and documentation in the file `ftimage.h' for more   */
+  /* details on how the raster works.                                      */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
   /* This is a rewrite of the FreeType 1.x scan-line converter             */
   /*                                                                       */
   /*************************************************************************/
 
+#ifdef _STANDALONE_
 
+#include "ftmisc.h"
+#include "ftimage.h"
+
+#else /* !_STANDALONE_ */
+
 #include <ft2build.h>
 #include "ftraster.h"
 #include FT_INTERNAL_CALC_H   /* for FT_MulDiv only */
 
+#endif /* !_STANDALONE_ */
 
+
   /*************************************************************************/
   /*                                                                       */
   /* A simple technical note on how the raster works                       */
@@ -153,7 +187,9 @@
 #endif
 
 #ifndef FT_TRACE
-#define FT_TRACE( x )  do ; while ( 0 )     /* nothing */
+#define FT_TRACE( x )   do ; while ( 0 )    /* nothing */
+#define FT_TRACE1( x )  do ; while ( 0 )    /* nothing */
+#define FT_TRACE6( x )  do ; while ( 0 )    /* nothing */
 #endif
 
 #define Raster_Err_None          0
@@ -163,6 +199,7 @@
 #define Raster_Err_Invalid      -4
 #define Raster_Err_Unsupported  -5
 
+#define ft_memset   memset
 
 #else /* _STANDALONE_ */
 
@@ -187,6 +224,9 @@
 #define FT_MEM_SET( d, s, c )  ft_memset( d, s, c )
 #endif
 
+#ifndef FT_MEM_ZERO
+#define FT_MEM_ZERO( dest, count )  FT_MEM_SET( dest, 0, count )
+#endif
 
   /* FMulDiv means `Fast MulDiv'; it is used in case where `b' is       */
   /* typically a small value and the result of a*b is known to fit into */
@@ -323,7 +363,7 @@
   ( ( sizeof ( TProfile ) + sizeof ( Alignment ) - 1 ) / sizeof ( long ) )
 
 
-#ifdef TT_STATIC_RASTER
+#ifdef FT_STATIC_RASTER
 
 
 #define RAS_ARGS       /* void */
@@ -335,7 +375,7 @@
 #define FT_UNUSED_RASTER  do ; while ( 0 )
 
 
-#else /* TT_STATIC_RASTER */
+#else /* FT_STATIC_RASTER */
 
 
 #define RAS_ARGS       TRaster_Instance*  raster,
@@ -347,7 +387,7 @@
 #define FT_UNUSED_RASTER  FT_UNUSED( raster )
 
 
-#endif /* TT_STATIC_RASTER */
+#endif /* FT_STATIC_RASTER */
 
 
   typedef struct TRaster_Instance_  TRaster_Instance;
@@ -495,7 +535,7 @@
   };
 
 
-#ifdef FT_CONFIG_OPTION_STATIC_RASTER
+#ifdef FT_STATIC_RASTER
 
   static TRaster_Instance  cur_ras;
 #define ras  cur_ras
@@ -504,7 +544,7 @@
 
 #define ras  (*raster)
 
-#endif /* FT_CONFIG_OPTION_STATIC_RASTER */
+#endif /* FT_STATIC_RASTER */
 
 
   /*************************************************************************/
@@ -2250,7 +2290,7 @@
                                   Short*  max )
   {
     /* nothing, really */
-    FT_UNUSED( raster );
+    FT_UNUSED_RASTER;
     FT_UNUSED( min );
     FT_UNUSED( max );
   }
@@ -2399,7 +2439,7 @@
   Horizontal_Sweep_Step( RAS_ARG )
   {
     /* Nothing, really */
-    FT_UNUSED( raster );
+    FT_UNUSED_RASTER;
   }
 
 
@@ -2546,7 +2586,7 @@
                                        PProfile    right )
   {
     /* nothing, really */
-    FT_UNUSED( raster );
+    FT_UNUSED_RASTER;
     FT_UNUSED( y );
     FT_UNUSED( x1 );
     FT_UNUSED( x2 );
@@ -3020,7 +3060,7 @@
         return error;
     }
 
-    return Raster_Err_Ok;
+    return Raster_Err_None;
   }
 
 
@@ -3096,7 +3136,7 @@
         return error;
     }
 
-    return Raster_Err_Ok;
+    return Raster_Err_None;
   }
 
 #else /* !FT_RASTER_OPTION_ANTI_ALIASING */
@@ -3106,7 +3146,7 @@
   {
     FT_UNUSED_RASTER;
 
-    return Raster_Err_Cannot_Render_Glyph;
+    return Raster_Err_Unsupported;
   }
 
 #endif /* !FT_RASTER_OPTION_ANTI_ALIASING */
@@ -3129,7 +3169,7 @@
           ( ( c << 2 ) & 0x0030 ) |
                    (c  & 0x0003 );
 
-      raster->count_table[n] = (UInt)c;
+      ras.count_table[n] = (UInt)c;
     }
 
 #ifdef FT_RASTER_OPTION_ANTI_ALIASING
@@ -3138,7 +3178,7 @@
     for ( n = 0; n < 5; n++ )
       raster->grays[n] = n * 255 / 4;
 
-    raster->gray_width = RASTER_GRAY_LINES / 2;
+    ras.gray_width = RASTER_GRAY_LINES / 2;
 
 #endif
   }
@@ -3155,10 +3195,10 @@
   ft_black_new( void*      memory,
                 FT_Raster  *araster )
   {
-     static FT_RasterRec_  the_raster;
+     static TRaster_Instance  the_raster;
 
 
-     *araster = &the_raster;
+     *araster = (FT_Raster)&the_raster;
      FT_MEM_ZERO( &the_raster, sizeof ( the_raster ) );
      ft_black_init( &the_raster );
 
@@ -3170,7 +3210,7 @@
   ft_black_done( FT_Raster  raster )
   {
     /* nothing */
-    raster->init = 0;
+    FT_UNUSED( raster );
   }
 
 
@@ -3214,11 +3254,11 @@
                   const char*        pool_base,
                   long               pool_size )
   {
-    if ( raster && pool_base && pool_size >= 4096 )
+    if ( (&ras) && pool_base && pool_size >= 4096 )
     {
       /* save the pool */
-      raster->buff     = (PLong)pool_base;
-      raster->sizeBuff = raster->buff + pool_size / sizeof ( Long );
+      ras.buff     = (PLong)pool_base;
+      ras.sizeBuff = ras.buff + pool_size / sizeof ( Long );
     }
   }
 
@@ -3233,11 +3273,11 @@
     if ( mode == FT_MAKE_TAG( 'p', 'a', 'l', '5' ) )
     {
       /* set 5-levels gray palette */
-      raster->grays[0] = palette[0];
-      raster->grays[1] = palette[1];
-      raster->grays[2] = palette[2];
-      raster->grays[3] = palette[3];
-      raster->grays[4] = palette[4];
+      ras.grays[0] = palette[0];
+      ras.grays[1] = palette[1];
+      ras.grays[2] = palette[2];
+      ras.grays[3] = palette[3];
+      ras.grays[4] = palette[4];
     }
 
 #else
@@ -3258,7 +3298,7 @@
     const FT_Bitmap*  target_map = params->target;
 
 
-    if ( !raster || !raster->buff || !raster->sizeBuff )
+    if ( !(&ras) || !ras.buff || !ras.sizeBuff )
       return Raster_Err_Not_Ini;
 
     /* return immediately if the outline is empty */
@@ -3282,8 +3322,8 @@
     ras.target   = *target_map;
 
     return ( ( params->flags & FT_RASTER_FLAG_AA )
-               ? Render_Gray_Glyph( raster )
-               : Render_Glyph( raster ) );
+               ? Render_Gray_Glyph( RAS_VAR )
+               : Render_Glyph( RAS_VAR ) );
   }