123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- /***************************************************************************/
- /* */
- /* ahoptim.h */
- /* */
- /* FreeType auto hinting outline optimization (declaration). */
- /* */
- /* Copyright 2000-2001 Catharon Productions Inc. */
- /* Author: David Turner */
- /* */
- /* This file is part of the Catharon Typography Project and shall only */
- /* be used, modified, and distributed under the terms of the Catharon */
- /* Open Source License that should come with this file under the name */
- /* `CatharonLicense.txt'. By continuing to use, modify, or distribute */
- /* this file you indicate that you have read the license and */
- /* understand and accept it fully. */
- /* */
- /* Note that this license is compatible with the FreeType license. */
- /* */
- /***************************************************************************/
- #ifndef __AHOPTIM_H__
- #define __AHOPTIM_H__
- #include <ft2build.h>
- #include "ahtypes.h"
- FT_BEGIN_HEADER
- /* the maximal number of stem configurations to record */
- /* during optimization */
- #define AH_MAX_CONFIGS 8
- typedef struct AH_Stem_
- {
- FT_Pos pos; /* current position */
- FT_Pos velocity; /* current velocity */
- FT_Pos force; /* sum of current forces */
- FT_Pos width; /* normalized width */
- FT_Pos min_pos; /* minimum grid position */
- FT_Pos max_pos; /* maximum grid position */
- AH_Edge edge1; /* left/bottom edge */
- AH_Edge edge2; /* right/top edge */
- FT_Pos opos; /* original position */
- FT_Pos owidth; /* original width */
- FT_Pos min_coord; /* minimum coordinate */
- FT_Pos max_coord; /* maximum coordinate */
- } AH_Stem;
- /* A spring between two stems */
- typedef struct AH_Spring_
- {
- AH_Stem* stem1;
- AH_Stem* stem2;
- FT_Pos owidth; /* original width */
- FT_Pos tension; /* current tension */
- } AH_Spring;
- /* A configuration records the position of each stem at a given time */
- /* as well as the associated distortion */
- typedef struct AH_Configuration_
- {
- FT_Pos* positions;
- FT_Long distortion;
- } AH_Configuration;
- typedef struct AH_Optimizer_
- {
- FT_Memory memory;
- AH_Outline outline;
- FT_Int num_hstems;
- AH_Stem* horz_stems;
- FT_Int num_vstems;
- AH_Stem* vert_stems;
- FT_Int num_hsprings;
- FT_Int num_vsprings;
- AH_Spring* horz_springs;
- AH_Spring* vert_springs;
- FT_Int num_configs;
- AH_Configuration configs[AH_MAX_CONFIGS];
- FT_Pos* positions;
- /* during each pass, use these instead */
- FT_Int num_stems;
- AH_Stem* stems;
- FT_Int num_springs;
- AH_Spring* springs;
- FT_Bool vertical;
- FT_Fixed tension_scale;
- FT_Pos tension_threshold;
- } AH_Optimizer;
- /* loads the outline into the optimizer */
- int
- AH_Optimizer_Init( AH_Optimizer* optimizer,
- AH_Outline outline,
- FT_Memory memory );
- /* compute optimal outline */
- void
- AH_Optimizer_Compute( AH_Optimizer* optimizer );
- /* release the optimization data */
- void
- AH_Optimizer_Done( AH_Optimizer* optimizer );
- FT_END_HEADER
- #endif /* __AHOPTIM_H__ */
- /* END */
|