More formatting.

About previous commitment: Added latest versions of (still unused)
config.guess and config.sub files.
This commit is contained in:
Werner Lemberg 2000-06-25 23:02:11 +00:00
parent dcd2e14c58
commit d7a046838f
8 changed files with 341 additions and 376 deletions

View File

@ -50,7 +50,7 @@
/* It is based on ideas that I initially found in Raph Levien's */ /* It is based on ideas that I initially found in Raph Levien's */
/* excellent LibArt graphics library (see http://www.levien.com/libart */ /* excellent LibArt graphics library (see http://www.levien.com/libart */
/* for more information, though the web pages do not tell anything */ /* for more information, though the web pages do not tell anything */
/* about the renderer; you'll have to dive into the source code to */ /* about the renderer; you will have to dive into the source code to */
/* understand how it works). */ /* understand how it works). */
/* */ /* */
/* Note, however, that this is a _very_ different implementation */ /* Note, however, that this is a _very_ different implementation */
@ -103,6 +103,7 @@
#include "ftimage.h" #include "ftimage.h"
#include "ftgrays.h" #include "ftgrays.h"
/* This macro is used to indicate that a function parameter is unused. */ /* This macro is used to indicate that a function parameter is unused. */
/* Its purpose is simply to reduce compiler warnings. Note also that */ /* Its purpose is simply to reduce compiler warnings. Note also that */
/* simply defining it as `(void)x' doesn't avoid warnings with certain */ /* simply defining it as `(void)x' doesn't avoid warnings with certain */
@ -135,6 +136,7 @@
/* define this to dump debugging information */ /* define this to dump debugging information */
#define xxxDEBUG_GRAYS #define xxxDEBUG_GRAYS
/* as usual, for the speed hungry :-) */ /* as usual, for the speed hungry :-) */
#ifndef FT_STATIC_RASTER #ifndef FT_STATIC_RASTER
@ -225,7 +227,7 @@
#endif /* GRAYS_COMPACT */ #endif /* GRAYS_COMPACT */
typedef struct TRaster_ typedef struct TRaster_
{ {
PCell cells; PCell cells;
int max_cells; int max_cells;
@ -965,8 +967,8 @@
#ifdef SHELL_SORT #ifdef SHELL_SORT
/* A simple shell sort algorithm that works directly on our */ /* a simple shell sort algorithm that works directly on our */
/* cells table.. */ /* cells table */
static static
void shell_sort ( PCell cells, void shell_sort ( PCell cells,
int count ) int count )
@ -1440,7 +1442,7 @@
/*************************************************************************/ /*************************************************************************/
/* */ /* */
/* The following function should only compile in stand_alone mode, */ /* The following function should only compile in stand_alone mode, */
/* i.e., when building this component without the rest of FreeType. */ /* i.e., if building this component without the rest of FreeType. */
/* */ /* */
/*************************************************************************/ /*************************************************************************/
@ -1684,8 +1686,8 @@
static static
FT_Outline_Funcs interface = FT_Outline_Funcs interface =
{ {
(FT_Outline_MoveTo_Func)Move_To, (FT_Outline_MoveTo_Func) Move_To,
(FT_Outline_LineTo_Func)Line_To, (FT_Outline_LineTo_Func) Line_To,
(FT_Outline_ConicTo_Func)Conic_To, (FT_Outline_ConicTo_Func)Conic_To,
(FT_Outline_CubicTo_Func)Cubic_To, (FT_Outline_CubicTo_Func)Cubic_To,
0, 0,
@ -1840,7 +1842,7 @@
return -1; return -1;
/* XXXX: this version does not support monochrome rendering yet! */ /* XXXX: this version does not support monochrome rendering yet! */
if ( !(params->flags & ft_raster_flag_aa) ) if ( !( params->flags & ft_raster_flag_aa ) )
return -1; return -1;
ras.outline = *outline; ras.outline = *outline;

View File

@ -15,35 +15,44 @@
/* */ /* */
/***************************************************************************/ /***************************************************************************/
#ifndef FTGRAYS_H #ifndef FTGRAYS_H
#define FTGRAYS_H #define FTGRAYS_H
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#ifdef _STANDALONE_ #ifdef _STANDALONE_
#include "ftimage.h" #include "ftimage.h"
#else #else
#include <freetype/ftimage.h> #include <freetype/ftimage.h>
#endif #endif
/*************************************************************************/ /*************************************************************************/
/* */ /* */
/* To make ftgrays.h independent from configuration files we check */ /* To make ftgrays.h independent from configuration files we check */
/* whether FT_EXPORT_DEF has been defined already. */ /* whether FT_EXPORT_VAR has been defined already. */
/* */ /* */
/* On some systems and compilers (Win32 mostly), an extra keyword is */ /* On some systems and compilers (Win32 mostly), an extra keyword is */
/* necessary to compile the library as a DLL. */ /* necessary to compile the library as a DLL. */
/* */ /* */
#ifndef FT_EXPORT_VAR #ifndef FT_EXPORT_VAR
#define FT_EXPORT_VAR(x) extern x #define FT_EXPORT_VAR( x ) extern x
#endif #endif
FT_EXPORT_VAR(FT_Raster_Funcs) ft_grays_raster; FT_EXPORT_VAR( FT_Raster_Funcs ) ft_grays_raster;
#ifdef __cplusplus
}
#endif
#ifdef __cplusplus
}
#endif #endif
#endif /* FTGRAYS_H */
/* END */

View File

@ -60,7 +60,7 @@
/* */ /* */
/* ^ ^ */ /* ^ ^ */
/* | | */ /* | | */
/* start of render pool top */ /* start of render pool top */
/* */ /* */
/* The top of the profile stack is kept in the `top' variable. */ /* The top of the profile stack is kept in the `top' variable. */
/* */ /* */
@ -236,6 +236,7 @@
typedef unsigned char Byte, *PByte; typedef unsigned char Byte, *PByte;
typedef char Bool; typedef char Bool;
typedef struct TPoint_ typedef struct TPoint_
{ {
Long x; Long x;
@ -303,6 +304,7 @@
#ifdef TT_STATIC_RASTER #ifdef TT_STATIC_RASTER
#define RAS_ARGS /* void */ #define RAS_ARGS /* void */
#define RAS_ARG /* void */ #define RAS_ARG /* void */
@ -311,8 +313,10 @@
#define UNUSED_RASTER do ; while ( 0 ) #define UNUSED_RASTER do ; while ( 0 )
#else /* TT_STATIC_RASTER */ #else /* TT_STATIC_RASTER */
#define RAS_ARGS TRaster_Instance* raster, #define RAS_ARGS TRaster_Instance* raster,
#define RAS_ARG TRaster_Instance* raster #define RAS_ARG TRaster_Instance* raster
@ -321,6 +325,7 @@
#define UNUSED_RASTER UNUSED( raster ) #define UNUSED_RASTER UNUSED( raster )
#endif /* TT_STATIC_RASTER */ #endif /* TT_STATIC_RASTER */

View File

@ -1,6 +1,6 @@
make_module_list: add_renderer_module make_module_list: add_renderer_module
# XXX: important, the standard renderer *MUST* be first on this list.. # XXX: important, the standard renderer *MUST* be first on this list!
# #
add_renderer_module: add_renderer_module:
$(OPEN_DRIVER)ft_standard_renderer_class$(CLOSE_DRIVER) $(OPEN_DRIVER)ft_standard_renderer_class$(CLOSE_DRIVER)

View File

@ -1,69 +1,98 @@
/***************************************************************************/
/* */
/* renderer.c */
/* */
/* FreeType renderer module (body). */
/* */
/* Copyright 2000 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. */
/* */
/***************************************************************************/
#include <freetype/internal/ftobjs.h> #include <freetype/internal/ftobjs.h>
/* initialise renderer - init its raster */
static FT_Error ft_renderer_init( FT_Renderer render ) /* initialize renderer - init its raster */
static
FT_Error ft_renderer_init( FT_Renderer render )
{ {
FT_Library library = FT_MODULE_LIBRARY(render); FT_Library library = FT_MODULE_LIBRARY( render );
render->clazz->raster_class->raster_reset( render->raster, render->clazz->raster_class->raster_reset( render->raster,
library->raster_pool, library->raster_pool_size ); library->raster_pool,
library->raster_pool_size );
return 0; return 0;
} }
/* set render-specific mode */
/* sets render-specific mode */ static
static FT_Error ft_renderer_set_mode( FT_Renderer render, FT_Error ft_renderer_set_mode( FT_Renderer render,
FT_ULong mode_tag, FT_ULong mode_tag,
FT_Pointer data ) FT_Pointer data )
{ {
/* we simply pass it to the raster */ /* we simply pass it to the raster */
return render->clazz->raster_class->raster_set_mode( return render->clazz->raster_class->raster_set_mode( render->raster,
render->raster, mode_tag, data ); mode_tag,
data );
} }
/* transform a given glyph image */
static FT_Error ft_renderer_transform( FT_Renderer render, /* transform a given glyph image */
FT_GlyphSlot slot, static
FT_Matrix* matrix, FT_Error ft_renderer_transform( FT_Renderer render,
FT_Vector* delta ) FT_GlyphSlot slot,
FT_Matrix* matrix,
FT_Vector* delta )
{ {
FT_Error error = FT_Err_Ok; FT_Error error = FT_Err_Ok;
if (slot->format != render->glyph_format)
if ( slot->format != render->glyph_format )
{ {
error = FT_Err_Invalid_Argument; error = FT_Err_Invalid_Argument;
goto Exit; goto Exit;
} }
if (matrix) if ( matrix )
FT_Outline_Transform( &slot->outline, matrix ); FT_Outline_Transform( &slot->outline, matrix );
if (delta) if ( delta )
FT_Outline_Translate( &slot->outline, delta->x, delta->y ); FT_Outline_Translate( &slot->outline, delta->x, delta->y );
Exit: Exit:
return error; return error;
} }
/* return the glyph's control box */
static void ft_renderer_get_cbox( FT_Renderer render,
FT_GlyphSlot slot,
FT_BBox *cbox )
{
MEM_Set( cbox, 0, sizeof(*cbox) );
if (slot->format == render->glyph_format) /* return the glyph's control box */
static
void ft_renderer_get_cbox( FT_Renderer render,
FT_GlyphSlot slot,
FT_BBox* cbox )
{
MEM_Set( cbox, 0, sizeof ( *cbox ) );
if ( slot->format == render->glyph_format )
FT_Outline_Get_CBox( &slot->outline, cbox ); FT_Outline_Get_CBox( &slot->outline, cbox );
} }
/* convert a slot's glyph image into a bitmap */ /* convert a slot's glyph image into a bitmap */
static FT_Error ft_renderer_render( FT_Renderer render, static
FT_GlyphSlot slot, FT_Error ft_renderer_render( FT_Renderer render,
FT_UInt mode, FT_GlyphSlot slot,
FT_Vector* origin ) FT_UInt mode,
FT_Vector* origin )
{ {
FT_Error error; FT_Error error;
FT_Outline* outline; FT_Outline* outline;
@ -74,8 +103,9 @@
FT_Raster_Params params; FT_Raster_Params params;
/* check glyph image format */ /* check glyph image format */
if (slot->format != render->glyph_format) if ( slot->format != render->glyph_format )
{ {
error = FT_Err_Invalid_Argument; error = FT_Err_Invalid_Argument;
goto Exit; goto Exit;
@ -84,7 +114,7 @@
outline = &slot->outline; outline = &slot->outline;
/* translate the outline to the new origin if needed */ /* translate the outline to the new origin if needed */
if (origin) if ( origin )
FT_Outline_Translate( outline, origin->x, origin->y ); FT_Outline_Translate( outline, origin->x, origin->y );
/* compute the control box, and grid fit it */ /* compute the control box, and grid fit it */
@ -92,18 +122,18 @@
cbox.xMin &= -64; cbox.xMin &= -64;
cbox.yMin &= -64; cbox.yMin &= -64;
cbox.xMax = (cbox.xMax+63) & -64; cbox.xMax = ( cbox.xMax + 63 ) & -64;
cbox.yMax = (cbox.yMax+63) & -64; cbox.yMax = ( cbox.yMax + 63 ) & -64;
width = (cbox.xMax - cbox.xMin) >> 6; width = ( cbox.xMax - cbox.xMin ) >> 6;
height = (cbox.yMax - cbox.yMin) >> 6; height = ( cbox.yMax - cbox.yMin ) >> 6;
bitmap = &slot->bitmap; bitmap = &slot->bitmap;
memory = slot->face->memory; memory = slot->face->memory;
/* release old bitmap buffer */ /* release old bitmap buffer */
if ((slot->flags & ft_glyph_own_bitmap)) if ( ( slot->flags & ft_glyph_own_bitmap ) )
{ {
FREE(bitmap->buffer); FREE( bitmap->buffer );
slot->flags &= ~ft_glyph_own_bitmap; slot->flags &= ~ft_glyph_own_bitmap;
} }
@ -116,7 +146,7 @@
} }
else else
{ {
pitch = (width+7) >> 3; pitch = ( width + 7 ) >> 3;
bitmap->pixel_mode = ft_pixel_mode_mono; bitmap->pixel_mode = ft_pixel_mode_mono;
} }
@ -124,7 +154,7 @@
bitmap->rows = height; bitmap->rows = height;
bitmap->pitch = pitch; bitmap->pitch = pitch;
if (ALLOC( bitmap->buffer, (FT_ULong)pitch * height )) if ( ALLOC( bitmap->buffer, (FT_ULong)pitch * height ) )
goto Exit; goto Exit;
slot->flags |= ft_glyph_own_bitmap; slot->flags |= ft_glyph_own_bitmap;
@ -142,7 +172,8 @@
/* render outline into the bitmap */ /* render outline into the bitmap */
error = render->raster_render( render->raster, &params ); error = render->raster_render( render->raster, &params );
if (error) goto Exit; if ( error )
goto Exit;
slot->format = ft_glyph_format_bitmap; slot->format = ft_glyph_format_bitmap;
slot->bitmap_left = cbox.xMin >> 6; slot->bitmap_left = cbox.xMin >> 6;
@ -152,68 +183,79 @@
return error; return error;
} }
#ifndef FT_CONFIG_OPTION_NO_STD_RASTER #ifndef FT_CONFIG_OPTION_NO_STD_RASTER
#include <ftraster.h> #include <ftraster.h>
const FT_Renderer_Class ft_standard_renderer_class =
const FT_Renderer_Class ft_standard_renderer_class =
{ {
{ {
ft_module_renderer, ft_module_renderer,
sizeof( FT_RendererRec ), sizeof ( FT_RendererRec ),
"standard renderer", "standard renderer",
0x10000, 0x10000L,
0x20000, 0x20000L,
0, /* module specific interface */ 0, /* module specific interface */
(FT_Module_Constructor) ft_renderer_init, (FT_Module_Constructor)ft_renderer_init,
(FT_Module_Destructor) 0, (FT_Module_Destructor) 0,
(FT_Module_Requester) 0 (FT_Module_Requester) 0
}, },
ft_glyph_format_outline, ft_glyph_format_outline,
(FTRenderer_render) ft_renderer_render, (FTRenderer_render) ft_renderer_render,
(FTRenderer_transform) ft_renderer_transform, (FTRenderer_transform)ft_renderer_transform,
(FTRenderer_getCBox) ft_renderer_get_cbox, (FTRenderer_getCBox) ft_renderer_get_cbox,
(FTRenderer_setMode) ft_renderer_set_mode, (FTRenderer_setMode) ft_renderer_set_mode,
(FT_Raster_Funcs*) &ft_standard_raster (FT_Raster_Funcs*) &ft_standard_raster
}; };
#endif /* !FT_CONFIG_OPTION_NO_STD_RASTER */ #endif /* !FT_CONFIG_OPTION_NO_STD_RASTER */
#ifndef FT_CONFIG_OPTION_NO_SMOOTH_RASTER #ifndef FT_CONFIG_OPTION_NO_SMOOTH_RASTER
#include <ftgrays.h> #include <ftgrays.h>
const FT_Renderer_Class ft_smooth_renderer_class = const FT_Renderer_Class ft_smooth_renderer_class =
{ {
{ {
ft_module_renderer, ft_module_renderer,
sizeof( FT_RendererRec ), sizeof ( FT_RendererRec ),
"smooth renderer", "smooth renderer",
0x10000, 0x10000L,
0x20000, 0x20000L,
0, /* module specific interface */ 0, /* module specific interface */
(FT_Module_Constructor) ft_renderer_init, (FT_Module_Constructor)ft_renderer_init,
(FT_Module_Destructor) 0, (FT_Module_Destructor) 0,
(FT_Module_Requester) 0 (FT_Module_Requester) 0
}, },
ft_glyph_format_outline, ft_glyph_format_outline,
(FTRenderer_render) ft_renderer_render, (FTRenderer_render) ft_renderer_render,
(FTRenderer_transform) ft_renderer_transform, (FTRenderer_transform)ft_renderer_transform,
(FTRenderer_getCBox) ft_renderer_get_cbox, (FTRenderer_getCBox) ft_renderer_get_cbox,
(FTRenderer_setMode) ft_renderer_set_mode, (FTRenderer_setMode) ft_renderer_set_mode,
(FT_Raster_Funcs*) &ft_grays_raster (FT_Raster_Funcs*) &ft_grays_raster
}; };
#endif /* !FT_CONFIG_OPTION_NO_SMOOTH_RASTER */ #endif /* !FT_CONFIG_OPTION_NO_SMOOTH_RASTER */
/* END */

View File

@ -1,14 +1,38 @@
/***************************************************************************/
/* */
/* renderer.h */
/* */
/* FreeType renderer module (specification). */
/* */
/* Copyright 2000 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. */
/* */
/***************************************************************************/
#ifndef RENDERER_H #ifndef RENDERER_H
#define RENDERER_H #define RENDERER_H
#include <freetype/ftrender.h> #include <freetype/ftrender.h>
#ifndef FT_CONFIG_OPTION_NO_STD_RASTER #ifndef FT_CONFIG_OPTION_NO_STD_RASTER
FT_EXPORT_VAR(const FT_Renderer_Class) ft_std_renderer_class; FT_EXPORT_VAR( const FT_Renderer_Class ) ft_std_renderer_class;
#endif #endif
#ifndef FT_CONFIG_OPTION_NO_SMOOTH_RASTER #ifndef FT_CONFIG_OPTION_NO_SMOOTH_RASTER
FT_EXPORT_VAR(const FT_Renderer_Class) ft_smooth_renderer_class; FT_EXPORT_VAR( const FT_Renderer_Class ) ft_smooth_renderer_class;
#endif #endif
#endif /* RENDERER_H */ #endif /* RENDERER_H */
/* END */

View File

@ -29,18 +29,18 @@ REND_CFLAGS := $(REND_INCLUDE:%=$I%)
REND_COMPILE := $(FT_COMPILE) $(REND_CFLAGS) REND_COMPILE := $(FT_COMPILE) $(REND_CFLAGS)
# REND driver sources (i.e., C files) # renderer driver sources (i.e., C files)
# #
REND_DRV_SRC := $(REND_DIR_)ftraster.c \ REND_DRV_SRC := $(REND_DIR_)ftraster.c \
$(REND_DIR_)ftgrays.c \ $(REND_DIR_)ftgrays.c \
$(REND_DIR_)renderer.c $(REND_DIR_)renderer.c
# REND driver headers # renderer driver headers
# #
REND_DRV_H := $(REND_DRV_SRC:%c=%h) REND_DRV_H := $(REND_DRV_SRC:%c=%h)
# REND driver object(s) # renderer driver object(s)
# #
# REND_DRV_OBJ_M is used during `multi' builds. # REND_DRV_OBJ_M is used during `multi' builds.
# REND_DRV_OBJ_S is used during `single' builds. # REND_DRV_OBJ_S is used during `single' builds.
@ -48,19 +48,19 @@ REND_DRV_H := $(REND_DRV_SRC:%c=%h)
REND_DRV_OBJ_M := $(REND_DRV_SRC:$(REND_DIR_)%.c=$(OBJ_)%.$O) REND_DRV_OBJ_M := $(REND_DRV_SRC:$(REND_DIR_)%.c=$(OBJ_)%.$O)
REND_DRV_OBJ_S := $(REND_DRV_OBJ_M) REND_DRV_OBJ_S := $(REND_DRV_OBJ_M)
# REND driver source file for single build # renderer driver source file for single build
# #
#REND_DRV_SRC_S := $(REND_DIR_)renderer.c #REND_DRV_SRC_S := $(REND_DIR_)renderer.c
# REND driver - single object # renderer driver - single object
# #
#$(REND_DRV_OBJ_S): $(REND_DRV_SRC_S) $(REND_DRV_SRC) \ #$(REND_DRV_OBJ_S): $(REND_DRV_SRC_S) $(REND_DRV_SRC) \
# $(FREETYPE_H) $(REND_DRV_H) # $(FREETYPE_H) $(REND_DRV_H)
# $(REND_COMPILE) $T$@ $(REND_DRV_SRC_S) # $(REND_COMPILE) $T$@ $(REND_DRV_SRC_S)
# REND driver - multiple objects # renderer driver - multiple objects
# #
$(OBJ_)%.$O: $(REND_DIR_)%.c $(FREETYPE_H) $(REND_DRV_H) $(OBJ_)%.$O: $(REND_DIR_)%.c $(FREETYPE_H) $(REND_DRV_H)
$(REND_COMPILE) $T$@ $< $(REND_COMPILE) $T$@ $<

View File

@ -1,24 +1,20 @@
/******************************************************************* /***************************************************************************/
* /* */
* t1hinter.h 1.2 /* t1hinter.h */
* /* */
* Type1 hinter. /* Type 1 hinter (body). */
* /* */
* Copyright 1996-1999 by /* Copyright 1996-2000 by */
* David Turner, Robert Wilhelm, and Werner Lemberg. /* David Turner, Robert Wilhelm, and Werner Lemberg. */
* /* */
* This file is part of the FreeType project, and may only be used /* This file is part of the FreeType project, and may only be used, */
* modified and distributed under the terms of the FreeType project /* modified, and distributed under the terms of the FreeType project */
* license, LICENSE.TXT. By continuing to use, modify, or distribute /* license, LICENSE.TXT. By continuing to use, modify, or distribute */
* this file you indicate that you have read the license and /* this file you indicate that you have read the license and */
* understand and accept it fully. /* understand and accept it fully. */
* /* */
* /***************************************************************************/
* The Hinter is in charge of fitting th scaled outline to the
* pixel grid in order to considerably improve the quality of
* the Type 1 font driver's output..
*
******************************************************************/
#ifndef T1HINTER_H #ifndef T1HINTER_H
#define T1HINTER_H #define T1HINTER_H
@ -31,29 +27,30 @@
#endif #endif
/************************************************************************ /*************************************************************************/
* /* */
* <Struct> /* <Struct> */
* T1_Snap_Zone /* T1_Snap_Zone */
* /* */
* <Description> /* <Description> */
* A "snap zone" is used to model either a blue zone or a stem width /* A `snap zone' is used to model either a blue zone or a stem width */
* at a given character size. It is made of a minimum and maximum /* at a given character size. It is made of a minimum and maximum */
* edge, defined in 26.6 pixels, as well as one "original" and /* edge, defined in 26.6 pixels, as well as an `original' and */
* "scaled" position. /* `scaled' position. */
* /* */
* the position corresponds to the stem width (for stem snap zones) /* The position corresponds to the stem width (for stem snap zones) */
* or to the blue position (for blue zones) /* or to the blue position (for blue zones). */
* /* */
* <Fields> /* <Fields> */
* orus :: original position in font units /* orus :: The original position in font units. */
* pix :: current position in sub-pixel units /* */
* min :: minimum boundary in sub-pixel units /* pix :: The current position in sub-pixel units. */
* max :: maximim boundary in sub-pixel units /* */
* /* min :: The minimum boundary in sub-pixel units. */
************************************************************************/ /* */
/* max :: The maximum boundary in sub-pixel units. */
typedef struct T1_Snap_Zone_ /* */
typedef struct T1_Snap_Zone_
{ {
FT_Pos orus; FT_Pos orus;
FT_Pos pix; FT_Pos pix;
@ -63,21 +60,20 @@
} T1_Snap_Zone; } T1_Snap_Zone;
/************************************************************************ /*************************************************************************/
* /* */
* <Struct> /* <Struct> */
* T1_Edge /* T1_Edge */
* /* */
* <Description> /* <Description> */
* A very simply structure used to model an stem edge /* A very simple structure used to model a stem edge. */
* /* */
* <Fields> /* <Fields> */
* orus :: original edge position in font units /* orus :: The original edge position in font units. */
* pix :: scaled edge position in sub-pixel units /* */
* /* pix :: The scaled edge position in sub-pixel units. */
************************************************************************/ /* */
typedef struct T1_Edge_
typedef struct T1_Edge_
{ {
FT_Pos orus; FT_Pos orus;
FT_Pos pix; FT_Pos pix;
@ -85,26 +81,26 @@
} T1_Edge; } T1_Edge;
/************************************************************************ /*************************************************************************/
* /* */
* <Struct> /* <Struct> */
* T1_Stem_Hint /* T1_Stem_Hint */
* /* */
* <Description> /* <Description> */
* A simple structure used to model a stem hint /* A simple structure used to model a stem hint. */
* /* */
* <Fields> /* <Fields> */
* min_edge :: the hint's minimum edge /* min_edge :: The hint's minimum edge. */
* max_edge :: the hint's maximum edge /* */
* hint_flags :: some flags describing the stem properties /* max_edge :: The hint's maximum edge. */
* /* */
* <Note> /* hint_flags :: Some flags describing the stem properties. */
* the min and max edges of a ghost stem have the same position, /* */
* even if they're coded in a weird way in the charstrings /* <Note> */
* /* The min and max edges of a ghost stem have the same position, */
************************************************************************/ /* even if they are coded in a weird way in the charstrings. */
/* */
typedef struct T1_Stem_Hint_ typedef struct T1_Stem_Hint_
{ {
T1_Edge min_edge; T1_Edge min_edge;
T1_Edge max_edge; T1_Edge max_edge;
@ -114,109 +110,105 @@
#define T1_HINT_FLAG_ACTIVE 1 /* indicates an active stem */ #define T1_HINT_FLAG_ACTIVE 1 /* indicates an active stem */
#define T1_HINT_FLAG_MIN_BORDER 2 /* unused for now.. */ #define T1_HINT_FLAG_MIN_BORDER 2 /* unused for now */
#define T1_HINT_FLAG_MAX_BORDER 4 /* unused for now.. */ #define T1_HINT_FLAG_MAX_BORDER 4 /* unused for now */
/* hinter's configuration constants */
#define T1_HINTER_MAX_BLUES 24 /* maximum number of blue zones */
#define T1_HINTER_MAX_SNAPS 16 /* maximum number of stem snap zones */
#define T1_HINTER_MAX_EDGES 64 /* maximum number of stem hints */
/* hinter's configuration constants */ /*************************************************************************/
#define T1_HINTER_MAX_BLUES 24 /* maximum number of blue zones */ /* */
#define T1_HINTER_MAX_SNAPS 16 /* maximum number of stem snap zones */ /* <Struct> */
#define T1_HINTER_MAX_EDGES 64 /* maximum number of stem hints */ /* T1_Size_Hints */
/* */
/* <Description> */
/************************************************************************ /* A structure used to model the hinting information related to a size */
* /* object. */
* <Struct> /* */
* T1_Size_Hints /* <Fields> */
* /* supress_overshoots :: A boolean flag to tell whether overshoot */
* <Description> /* supression should occur. */
* A structure used to model the hinting information related to /* */
* a size object /* num_blue_zones :: The total number of blue zones (top+bottom). */
* /* */
* <Fields> /* num_bottom_zones :: The number of bottom zones. */
* supress_overshoots :: a boolean flag to tell when overshoot /* */
* supression should occur. /* blue_zones :: The blue zones table. Bottom zones are */
* /* stored first in the table, followed by all */
* num_blue_zones :: the total number of blue zones (top+bottom) /* top zones. */
* num_bottom_zones :: the number of bottom zones /* */
* /* num_snap_widths :: The number of horizontal stem snap zones. */
* blue_zones :: the blue zones table. bottom zones are /* */
* stored first in the table, followed by /* snap_widths :: An array of horizontal stem snap zones. */
* all top zones /* */
* /* num_snap_heights :: The number of vertical stem snap zones. */
* num_stem_snapH :: number of horizontal stem snap zones /* */
* stem_snapH :: horizontal stem snap zones /* snap_heights :: An array of vertical stem snap zones. */
* /* */
* num_stem_snapV :: number of vertical stem snap zones struct T1_Size_Hints_
* stem_snapV :: vertical stem snap zones
*
************************************************************************/
struct T1_Size_Hints_
{ {
FT_Bool supress_overshoots; FT_Bool supress_overshoots;
FT_Int num_blue_zones; FT_Int num_blue_zones;
FT_Int num_bottom_zones; FT_Int num_bottom_zones;
T1_Snap_Zone blue_zones[ T1_HINTER_MAX_BLUES ]; T1_Snap_Zone blue_zones[T1_HINTER_MAX_BLUES];
FT_Int num_snap_widths; FT_Int num_snap_widths;
T1_Snap_Zone snap_widths[ T1_HINTER_MAX_SNAPS ]; T1_Snap_Zone snap_widths[T1_HINTER_MAX_SNAPS];
FT_Int num_snap_heights; FT_Int num_snap_heights;
T1_Snap_Zone snap_heights[ T1_HINTER_MAX_SNAPS ]; T1_Snap_Zone snap_heights[T1_HINTER_MAX_SNAPS];
}; };
/*************************************************************************/
/************************************************************************ /* */
* /* <Struct> */
* <Struct> /* T1_Stem_Table */
* T1_Stem_Table /* */
* /* <Description> */
* <Description> /* A simple structure used to model a set of stem hints in a single */
* A simple structure used to model a set of stem hints in a /* direction during the loading of a given glyph outline. Not all */
* single direction during the loading of a given glyph outline. /* stem hints are active at a time. Moreover, stems must be sorted */
* Not all stem hints are active at a time. Moreover, stems must /* regularly. */
* be sorted regularly /* */
* /* <Fields> */
* <Fields> /* num_stems :: The total number of stems in the table. */
* num_stems :: total number of stems in table /* */
* num_active :: number of active stems in table /* num_active :: The number of active stems in the table. */
* /* */
* stems :: the table of all stems /* stems :: A table of all stems. */
* sort :: a table of indices into the stems table, used /* */
* to keep a sorted list of the active stems /* sort :: A table of indices into the stems table, used to */
* /* keep a sorted list of the active stems. */
************************************************************************/ /* */
typedef struct T1_Stem_Table_
typedef struct T1_Stem_Table_
{ {
FT_Int num_stems; FT_Int num_stems;
FT_Int num_active; FT_Int num_active;
T1_Stem_Hint stems[ T1_HINTER_MAX_EDGES ]; T1_Stem_Hint stems[T1_HINTER_MAX_EDGES];
FT_Int sort [ T1_HINTER_MAX_EDGES ]; FT_Int sort [T1_HINTER_MAX_EDGES];
} T1_Stem_Table; } T1_Stem_Table;
/*************************************************************************/
/************************************************************************ /* */
* /* <Struct> */
* <Struct> /* T1_Glyph_Hints */
* T1_Glyph_Hints /* */
* /* <Description> */
* <Description> /* A structure used to model the stem hints of a given glyph outline */
* A structure used to model the stem hints of a given glyph outline /* during glyph loading. */
* during glyph loading. /* */
* /* <Fields> */
* <Fields> /* hori_stems :: The horizontal stem hints table. */
* hori_stems :: horizontal stem hints table /* vert_stems :: The vertical stem hints table. */
* vert_stems :: vertical stem hints table /* */
*
************************************************************************/
struct T1_Glyph_Hints_ struct T1_Glyph_Hints_
{ {
T1_Stem_Table hori_stems; T1_Stem_Table hori_stems;
@ -224,157 +216,48 @@
}; };
/*************************************************************************/
/************************************************************************ /* */
* /* <Data> */
* <Data> /* t1_hinter_funcs */
* t1_hinter_funcs /* */
* /* <Description> */
* <Description> /* A table containing the address of various functions used during */
* A table containing the address of various functions used during /* the loading of an hinted scaled outline. */
* the loading of an hinted scaled outline /* */
*
************************************************************************/
LOCAL_DEF LOCAL_DEF
const T1_Hinter_Funcs t1_hinter_funcs; const T1_Hinter_Funcs t1_hinter_funcs;
/************************************************************************
*
* <Function>
* T1_New_Size_Hinter
*
* <Description>
* Allocates a new hinter structure for a given size object
*
* <Input>
* size :: handle to target size object
*
* <Return>
* Error code. 0 means success
*
************************************************************************/
LOCAL_DEF LOCAL_DEF
FT_Error T1_New_Size_Hinter( T1_Size size ); FT_Error T1_New_Size_Hinter( T1_Size size );
/************************************************************************
*
* <Function>
* T1_Done_Size_Hinter
*
* <Description>
* Releases a given size object's hinter structure
*
* <Input>
* size :: handle to target size object
*
************************************************************************/
LOCAL_DEF LOCAL_DEF
void T1_Done_Size_Hinter( T1_Size size ); void T1_Done_Size_Hinter( T1_Size size );
/************************************************************************
*
* <Function>
* T1_Reset_Size_Hinter
*
* <Description>
* Recomputes hinting information when a given size object has
* changed its resolutions/char sizes/pixel sizes
*
* <Input>
* size :: handle to size object
*
* <Return>
* Error code. 0 means success
*
************************************************************************/
LOCAL_DEF LOCAL_DEF
FT_Error T1_Reset_Size_Hinter( T1_Size size ); FT_Error T1_Reset_Size_Hinter( T1_Size size );
/************************************************************************
*
* <Function>
* T1_New_Glyph_Hinter
*
* <Description>
* Allocates a new hinter structure for a given glyph slot
*
* <Input>
* glyph :: handle to target glyph slot
*
* <Return>
* Error code. 0 means success
*
************************************************************************/
LOCAL_DEF LOCAL_DEF
FT_Error T1_New_Glyph_Hinter( T1_GlyphSlot glyph ); FT_Error T1_New_Glyph_Hinter( T1_GlyphSlot glyph );
/************************************************************************
*
* <Function>
* T1_Done_Glyph_Hinter
*
* <Description>
* Releases a given glyph slot's hinter structure
*
* <Input>
* glyph :: handle to glyph slot
*
************************************************************************/
LOCAL_DEF LOCAL_DEF
void T1_Done_Glyph_Hinter( T1_GlyphSlot glyph ); void T1_Done_Glyph_Hinter( T1_GlyphSlot glyph );
/************************************************************************
*
* <Function>
* T1_Hint_Points
*
* <Description>
* this function grid-fits several points in a given Type 1 builder
* at once.
*
* <Input>
* builder :: handle to target Type 1 builder
*
************************************************************************/
LOCAL_DEF LOCAL_DEF
void T1_Hint_Points( T1_Builder* builder ); void T1_Hint_Points( T1_Builder* builder );
/************************************************************************
*
* <Function>
* T1_Hint_Stems
*
* <Description>
* This function is used to compute the location of each stem hint
* between the first and second passes of the glyph loader on the
* charstring.
*
* <Input>
* builder :: handle to target builder
*
************************************************************************/
LOCAL_DEF LOCAL_DEF
void T1_Hint_Stems( T1_Builder* builder ); void T1_Hint_Stems( T1_Builder* builder );
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif /* T1HINTER_H */ #endif /* T1HINTER_H */
/* END */