From bb3105e2569dd19c8a987c4cdd6bb2d1c57c194b Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Wed, 23 Apr 2003 15:17:43 +0000 Subject: [PATCH] Cleanups. --- ChangeLog | 67 +++++++++++++++++----- src/psaux/psobjs.c | 7 ++- src/pshinter/pshalgo3.c | 121 +++++++++++++++++++++------------------- 3 files changed, 119 insertions(+), 76 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3fa873fc5..dc11e3fd0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -103,8 +103,15 @@ * src/pfr/pfrsbit.c (pfr_slot_load_bitmap): Use `ft_glyphslot_alloc_bitmap'. - * src/sfnt/ttsbit.c, src/type42/t42objs.c, - src/winfonts/winfnt.c: + * src/sfnt/ttsbit.c (Load_SBit_Image): Change 5th argument to type + `FT_GlyphSlot'. + Adding argument `depth' to handle recursive calls. + Use `ft_glyphslot_alloc_bitmap'. + (tt_face_load_sbit_image): Remove unused variable `memory'. + Don't handle `FT_GLYPH_OWN_BITMAP'. + Update call to Load_SBit_Image. + + * src/type42/t42objs.c, src/winfonts/winfnt.c: * src/cache/ftlru.c (FT_LruList_Lookup): Fixed an invalid assertion check. @@ -126,8 +133,9 @@ 2003-03-14 David Turner - * src/truetype/ttdriver.c: Fixing the small TrueType native - rendering glitches, they came from a small rounding error. + * src/truetype/ttdriver.c (Set_Char_Sizes): Fixing the small + TrueType native rendering glitches, they came from a small rounding + error. 2003-03-13 David Turner @@ -161,10 +169,11 @@ leak) that only happened when a try to resize an array would end in an out-of-memory condition. - * src/smooth/ftgrays.c: Removed compiler warnings / volatile bug. + * src/smooth/ftgrays.c (gray_convert_glyph): Removed compiler + warnings / volatile bug. - * src/truetype/ttobjs.c: Removed segmentation fault that happened in - tight memory environments. + * src/truetype/ttobjs.c (tt_glyphzone_done): Removed segmentation + fault that happened in tight memory environments. 2003-02-28 Pixel @@ -232,8 +241,17 @@ * src/base/ftobjs.c (ft_recompute_scaled_metrics): Fix rounding. - * src/truetype/ttdriver.c, src/truetype/ttobjs.h, - src/truetype/ttobjs.c, src/truetype/ttinterp.c: + * src/truetype/ttdriver.c (Set_Char_Sizes): New variable `metrics2'. + [!TT_CONFIG_OPTION_BYTECODE_INTERPRETER]: Removed. + + * src/truetype/ttobjs.h (TT_SizeRec): New field `metrics'. + * src/truetype/ttobjs.c (Reset_Outline_Size): Fix initialization of + `metrics'. + [FT_CONFIG_CHESTER_ASCENDER]: Code removed. + (Reset_SBit_Size): Fix initialization of `metrics'. + + * src/truetype/ttinterp.c (TT_Load_Context): Fix initialization of + `exec->metrics'. * src/autohint/ahhint.c (ah_hinter_load): Disabled the advance width "correction" which seemed to provide more trouble than benefits. @@ -249,8 +267,14 @@ Allow metrics to be overridden. * src/cid/cidgload.c (cid_load_glyph) [FT_CONFIG_OPTION_INCREMENTAL]: Ditto. - * src/truetype/ttgload.c, src/type1/t1gload.c - [FT_CONFIG_OPTION_INCREMENTAL]: + + * src/truetype/ttgload.c (load_truetype_glyph) + [FT_CONFIG_OPTION_INCREMENTAL]: Simplify. + (compute_glyph_metrics) [FT_CONFIG_OPTION_INCREMENTAL]: Code block + moved down. + + * src/type1/t1gload.c [FT_CONFIG_OPTION_INCREMENTAL]: + * include/freetype/ftincrem.h: Updated. 2003-01-31 David Turner @@ -285,7 +309,12 @@ * src/base/ftobjs.c (FT_Set_Char_Size) [FT_CONFIG_CHESTER_BLUE_SCALE]: Round differently. - * src/truetype/ttobjs.c: + * src/truetype/ttdriver.c (Set_Char_Sizes) + [TT_CONFIG_OPTION_BYTECODE_INTERPRETER]: Do some rounding only + if this macro is defined. + + * src/truetype/ttobjs.c (Reset_Outline_Size) + [FT_CONFIG_CHESTER_ASCENDER]: Round differently. * src/pshinter/pshalgo3.c: Improved the Postscript hinter. Getting rid of stem snapping seems to work well here (though the stems are @@ -464,6 +493,11 @@ * src/truetype/ttgload.c: Fixing the TrueType loader to handle invalid composites correctly by limiting the recursion depth. + (TT_MAX_COMPOSITE_RECURSE): New macro. + (load_truetype_glyph): Add argument `recurse_count'. + Load a composite only if the numbers of contours is -1, emit error + otherwise. + (TT_Load_Glyph): Updated. 2003-01-08 David Turner @@ -517,6 +551,9 @@ * include/freetype/tttables.h (FT_Load_Sfnt_Table): New function. * src/base/ftobjs.c: Implement it. + * src/sfnt/sfdriver.c (sfnt_get_interface): Handle `load_sfnt' + module request. + 2002-12-17 David Turner * src/base/ftobjs.c (find_unicode_charmap): Added some comments to @@ -4244,7 +4281,7 @@ * include/freetype/internal/ftmemory.h, src/base/ftdbgmem.c: Improvements to the memory debugger to report more information in - case of errors. Also, some allocations that occured through REALLOC + case of errors. Also, some allocations that occurred through REALLOC couldn't be previously catched correctly. * src/autohint/ahglyph.c (ah_outline_compute_segments, @@ -4318,7 +4355,7 @@ * src/type1/t1load.c (parse_font_name, parse_subrs): Added a test for when loading synthetic fonts to make sure that the font name and subrotuines are not loaded twice. This is to remove a memory - leak that occured because the original memory blocks for these + leak that occurred because the original memory blocks for these objects were not deallocated when the objects were parsed the second time. @@ -5569,7 +5606,7 @@ * src/cff/cffobjs.c, src/cff/cffobjs.h, src/cff/cffparse.c, src/cff/cffdrivr.c, src/cff/cff.c, src/cff/cffload.c, src/cff/cffgload.c, src/cff/cffgload.h: Changed to use - cffgload.{c,h} instead of t2gload.{c,h}. All occurences of t2_ + cffgload.{c,h} instead of t2gload.{c,h}. All occurrences of t2_ (T2_) were replaced with cff_ (CFF_, respectively). * src/cff/t2gload.h: Renamed cffgload.h. diff --git a/src/psaux/psobjs.c b/src/psaux/psobjs.c index e930b7134..8deba51e0 100644 --- a/src/psaux/psobjs.c +++ b/src/psaux/psobjs.c @@ -4,7 +4,7 @@ /* */ /* Auxiliary functions for PostScript fonts (body). */ /* */ -/* Copyright 1996-2001, 2002 by */ +/* Copyright 1996-2001, 2002, 2003 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -178,8 +178,9 @@ while ( new_size < table->cursor + length ) { - /* increase size by 25% and round up to the nearest multiple of 1024 */ - new_size += (new_size >> 2) + 1; + /* increase size by 25% and round up to the nearest multiple + of 1024 */ + new_size += ( new_size >> 2 ) + 1; new_size = ( new_size + 1023 ) & -1024; } diff --git a/src/pshinter/pshalgo3.c b/src/pshinter/pshalgo3.c index 77f39bd64..03f6ce67b 100644 --- a/src/pshinter/pshalgo3.c +++ b/src/pshinter/pshalgo3.c @@ -4,7 +4,7 @@ /* */ /* PostScript hinting algorithm 3 (body). */ /* */ -/* Copyright 2001, 2002 by */ +/* Copyright 2001, 2002, 2003 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used */ @@ -458,9 +458,9 @@ return; } - /* perform stem snapping when requested - this is necessary - * for monochrome and LCD hinting modes only - */ + /* perform stem snapping when requested - this is necessary + * for monochrome and LCD hinting modes only + */ do_snapping = ( dimension == 0 && glyph->do_horz_snapping ) || ( dimension == 1 && glyph->do_vert_snapping ); @@ -520,22 +520,22 @@ hint->cur_pos = pos; hint->cur_len = fit_len; - /* stem adjustment tries to snap stem widths to standard - * ones. this is important to prevent unpleasant rounding - * artefacts... - */ + /* Stem adjustment tries to snap stem widths to standard + * ones. This is important to prevent unpleasant rounding + * artefacts. + */ if ( glyph->do_stem_adjust ) { if ( len <= 64 ) { - /* the stem is less than one pixel, we will center it - * around the nearest pixel center - */ + /* the stem is less than one pixel; we will center it + * around the nearest pixel center + */ #if 1 - pos = ( pos + (len >> 1) ) & -64; + pos = ( pos + ( len >> 1 ) ) & -64; #else - /* this seems to be a bug !! */ - pos = ( pos + ( (len >> 1) & -64 ) ); + /* this seems to be a bug! */ + pos = ( pos + ( ( len >> 1 ) & -64 ) ); #endif len = 64; } @@ -626,6 +626,7 @@ PSH_AlignmentRec align; + /* ignore stem alignments when requested through the hint flags */ if ( ( dimension == 0 && !glyph->do_horz_hints ) || ( dimension == 1 && !glyph->do_vert_hints ) ) @@ -684,53 +685,55 @@ if ( !psh3_hint_is_fitted( parent ) ) psh3_hint_align_light( parent, globals, dimension, glyph ); - par_org_center = parent->org_pos + ( parent->org_len / 2); - par_cur_center = parent->cur_pos + ( parent->cur_len / 2); - cur_org_center = hint->org_pos + ( hint->org_len / 2); + par_org_center = parent->org_pos + ( parent->org_len / 2 ); + par_cur_center = parent->cur_pos + ( parent->cur_len / 2 ); + cur_org_center = hint->org_pos + ( hint->org_len / 2 ); cur_delta = FT_MulFix( cur_org_center - par_org_center, scale ); pos = par_cur_center + cur_delta - ( len >> 1 ); } - /* Stems less than one pixel wide are easy - we want to - * make them as dark as possible, so they must fall within - * one pixel. If the stem is split between two pixels - * then snap the edge that is nearer to the pixel boundary - * to the pixel boundary - */ - if (len <= 64) + /* Stems less than one pixel wide are easy -- we want to + * make them as dark as possible, so they must fall within + * one pixel. If the stem is split between two pixels + * then snap the edge that is nearer to the pixel boundary + * to the pixel boundary. + */ + if ( len <= 64 ) { if ( ( pos + len + 63 ) / 64 != pos / 64 + 1 ) pos += psh3_hint_snap_stem_side_delta ( pos, len ); } - /* Position stems other to minimize the amount of mid-grays. - * There are, in general, two positions that do this, - * illustrated as A) and B) below. - * - * + + + + - * - * A) |--------------------------------| - * B) |--------------------------------| - * C) |--------------------------------| - * - * Position A) (split the excess stem equally) should be better - * for stems of width N + f where f < 0.5 - * - * Position B) (split the deficiency equally) should be better - * for stems of width N + f where f > 0.5 - * - * It turns out though that minimizing the total number of lit - * pixels is also important, so position C), with one edge - * aligned with a pixel boundary is actually preferable - * to A). There are also more possibile positions for C) than - * for A) or B), so it involves less distortion of the overall - * character shape. - */ + + /* Position stems other to minimize the amount of mid-grays. + * There are, in general, two positions that do this, + * illustrated as A) and B) below. + * + * + + + + + * + * A) |--------------------------------| + * B) |--------------------------------| + * C) |--------------------------------| + * + * Position A) (split the excess stem equally) should be better + * for stems of width N + f where f < 0.5. + * + * Position B) (split the deficiency equally) should be better + * for stems of width N + f where f > 0.5. + * + * It turns out though that minimizing the total number of lit + * pixels is also important, so position C), with one edge + * aligned with a pixel boundary is actually preferable + * to A). There are also more possibile positions for C) than + * for A) or B), so it involves less distortion of the overall + * character shape. + */ else /* len > 64 */ { - FT_Fixed frac_len = len & 63; - FT_Fixed center = pos + ( len >> 1 ); - FT_Fixed delta_a, delta_b; + FT_Fixed frac_len = len & 63; + FT_Fixed center = pos + ( len >> 1 ); + FT_Fixed delta_a, delta_b; + if ( ( len / 64 ) & 1 ) { @@ -743,18 +746,20 @@ delta_b = ( center & -64 ) + 32 - center; } - /* We choose between B) and C) above based on the amount - * of fractinal stem width; for small amounts, choose - * C) always, for large amounts, B) always, and inbetween, - * pick whichever one involves less stem movement. - */ - if (frac_len < 32) + /* We choose between B) and C) above based on the amount + * of fractinal stem width; for small amounts, choose + * C) always, for large amounts, B) always, and inbetween, + * pick whichever one involves less stem movement. + */ + if ( frac_len < 32 ) { pos += psh3_hint_snap_stem_side_delta ( pos, len ); } - else if (frac_len < 48) + else if ( frac_len < 48 ) { - FT_Fixed side_delta = psh3_hint_snap_stem_side_delta ( pos, len ); + FT_Fixed side_delta = psh3_hint_snap_stem_side_delta ( pos, + len ); + if ( ABS( side_delta ) < ABS( delta_b ) ) pos += side_delta;