ref: 3475e7fba3bc57acde8ff0ec8091ea02ba1dd774
parent: e49ab25c0822e1043be29e836944c7886f4e8990
author: David Turner <[email protected]>
date: Wed May 17 16:56:01 EDT 2000
removed TT_MAX_SUBGLYPHS macro, there is no static limit on the number of subglyphs in a TrueType font.. changed the default number of gray levels used by the smooth renderer to 256 (instead of 128). Of course, the human eye can't tell a difference ;-)
--- a/CHANGES
+++ b/CHANGES
@@ -1,4 +1,14 @@
-LATEST CHANGES -
+LATEST_CHANGES
+
+ - changed the default number of gray levels of the smooth renderer to
+ 256 (instead of the previous 128). Of course, the human eye can't
+ see any difference ;-)
+
+ - removed TT_MAX_SUBGLYPHS, there is no static limit on the number of
+ subglyphs in a TrueType font now..
+
+=============================================================================
+OLD CHANGES 16 May 2000
- tagged "BETA-6" in the CVS tree. This one is a serious release candidate
even though it doesn't incorporate the auto-hinter yet..
--- a/demos/graph/grobjs.c
+++ b/demos/graph/grobjs.c
@@ -98,8 +98,8 @@
pixel_mode >= gr_pixel_mode_max )
goto Fail;
- if ( pixel_mode != gr_pixel_mode_gray ||
- ( num_grays >= 2 && num_grays < 256 ) )
+ if ( pixel_mode != gr_pixel_mode_gray ||
+ ( num_grays >= 2 && num_grays <= 256 ) )
return 0;
Fail:
--- a/demos/src/ftstring.c
+++ b/demos/src/ftstring.c
@@ -57,7 +57,7 @@
static int res = 72; /* default resolution in dpi */
- static grColor fore_color = { 127 };
+ static grColor fore_color = { 255 };
static int graph_init = 0;
static int render_mode = 1;
@@ -158,7 +158,7 @@
bit.mode = gr_pixel_mode_gray;
bit.width = DIM_X;
bit.rows = DIM_Y;
- bit.grays = 128;
+ bit.grays = 256;
surface = grNewSurface( 0, &bit );
if (!surface)
@@ -254,7 +254,7 @@
if( !hinted )
load_flags |= FT_LOAD_NO_HINTING;
- num_grays = 128;
+ num_grays = 256;
if (!antialias)
num_grays = 0;
--- a/demos/src/ftview.c
+++ b/demos/src/ftview.c
@@ -66,7 +66,7 @@
int res = 72;
- static grColor fore_color = { 127 };
+ static grColor fore_color = { 255 };
int Fail;
unsigned char autorun;
@@ -127,7 +127,7 @@
bit.mode = gr_pixel_mode_gray;
bit.width = DIM_X;
bit.rows = DIM_Y;
- bit.grays = 128;
+ bit.grays = 256;
surface = grNewSurface( 0, &bit );
if (!surface)
@@ -185,7 +185,7 @@
bit3.pitch = bit2.pitch;
bit3.mode = antialias ? bit.mode : gr_pixel_mode_mono;
bit3.buffer = bit_buffer;
- bit3.grays = 128;
+ bit3.grays = 256;
FT_Outline_Translate( &glyph->outline, -left, -bottom );
memset( bit_buffer, 0, size );
--- a/include/freetype/config/ftoption.h
+++ b/include/freetype/config/ftoption.h
@@ -349,8 +349,6 @@
/* */
#define TT_CONFIG_OPTION_INTERPRETER_SWITCH
- /* The maximum number of sub-glyphs in a TrueType composite glyph */
-#define TT_MAX_SUBGLYPHS 96
/*************************************************************************/
/*************************************************************************/
--- a/src/base/ftgrays.c
+++ b/src/base/ftgrays.c
@@ -1016,13 +1016,13 @@
{
if (spans->coverage)
#if 1
- memset( p + spans->x, (spans->coverage+1) >> 1, spans->len );
+ memset( p + spans->x, (unsigned char)spans->coverage, spans->len );
#else
{
q = p + spans->x;
limit = q + spans->len;
for ( ; q < limit; q++ )
- q[0] = (spans->coverage+1) >> 1;
+ q[0] = (unsigned char)spans->coverage;
}
#endif
}
--- a/src/base/ftraster.c
+++ b/src/base/ftraster.c
@@ -2866,7 +2866,7 @@
/* set default 5-levels gray palette */
for ( n = 0; n < 5; n++ )
- raster->grays[n] = (n*127/4);
+ raster->grays[n] = (n*255/4);
raster->gray_width = RASTER_GRAY_LINES/2;
}
--- a/src/truetype/ttgload.c
+++ b/src/truetype/ttgload.c
@@ -467,7 +467,6 @@
TT_Error error;
TT_Face face = loader->face;
TT_ULong offset;
- FT_SubGlyph subglyphs[ TT_MAX_SUBGLYPHS ];
TT_Int num_subglyphs = 0, contours_count;
TT_UInt index, num_points, num_contours, count;
TT_Fixed x_scale, y_scale;
@@ -632,7 +631,8 @@
else /* otherwise, load a composite !! */
{
/* for each subglyph, read composite header */
- FT_SubGlyph* subglyph = subglyphs;
+ TT_GlyphSlot glyph = loader->glyph;
+ FT_SubGlyph* subglyph = glyph->subglyphs + glyph->num_subglyphs;
if (ACCESS_Frame(count)) goto Fail;
@@ -640,7 +640,26 @@
do
{
TT_Fixed xx, xy, yy, yx;
+ FT_UInt total_subglyphs;
+ /* grow the 'glyph->subglyphs' table if necessary */
+ total_subglyphs = glyph->num_subglyphs + num_subglyphs;
+ if ( total_subglyphs >= glyph->max_subglyphs )
+ {
+ FT_UInt new_max = glyph->max_subglyphs;
+ FT_Memory memory = loader->face->root.memory;
+
+ while (new_max <= total_subglyphs)
+ new_max += 4;
+
+ if ( REALLOC_ARRAY( glyph->subglyphs, glyph->max_subglyphs,
+ new_max, FT_SubGlyph ) )
+ goto Fail;
+
+ glyph->max_subglyphs = new_max;
+ subglyph = glyph->subglyphs + glyph->num_subglyphs + num_subglyphs;
+ }
+
subglyph->arg1 = subglyph->arg2 = 0;
subglyph->flags = GET_UShort();
@@ -687,8 +706,6 @@
subglyph++;
num_subglyphs++;
- if (num_subglyphs >= TT_MAX_SUBGLYPHS)
- break;
}
while (subglyph[-1].flags & MORE_COMPONENTS);
@@ -707,27 +724,9 @@
/* responsible for interpreting this data..) */
if ( loader->load_flags & FT_LOAD_NO_RECURSE )
{
- FT_GlyphSlot glyph = loader->glyph;
-
- /* reallocate subglyph array if necessary */
- if (glyph->max_subglyphs < num_subglyphs)
- {
- FT_Memory memory = loader->face->root.memory;
-
- if ( REALLOC_ARRAY( glyph->subglyphs, glyph->max_subglyphs,
- num_subglyphs, FT_SubGlyph ) )
- goto Fail;
-
- glyph->max_subglyphs = num_subglyphs;
- }
-
- /* copy subglyph array */
- MEM_Copy( glyph->subglyphs, subglyphs,
- num_subglyphs*sizeof(FT_SubGlyph));
-
/* set up remaining glyph fields */
- glyph->num_subglyphs = num_subglyphs;
- glyph->format = ft_glyph_format_composite;
+ glyph->num_subglyphs += num_subglyphs;
+ glyph->format = ft_glyph_format_composite;
goto Load_End;
}
@@ -741,7 +740,9 @@
{
TT_Int n, num_base_points, num_new_points;
- subglyph = subglyphs;
+ subglyph = glyph->subglyphs + glyph->num_subglyphs;
+ glyph->num_subglyphs += num_subglyphs;
+
for ( n = 0; n < num_subglyphs; n++, subglyph++ )
{
TT_Vector pp1, pp2;
@@ -753,6 +754,8 @@
num_base_points = loader->base.n_points;
error = load_truetype_glyph( loader, subglyph->index );
+ if (error) goto Fail;
+
if ( subglyph->flags & USE_MY_METRICS )
{
pp1 = loader->pp1;
@@ -935,8 +938,8 @@
loader->pp2 = pp1[1];
}
#endif
-
}
+ /* end of composite loading */
}
/*************************************************************************/
@@ -1326,7 +1329,8 @@
#endif
/* Main loading loop */
- glyph->format = ft_glyph_format_outline;
+ glyph->format = ft_glyph_format_outline;
+ glyph->num_subglyphs = 0;
error = load_truetype_glyph( &loader, glyph_index );
if (!error)
compute_glyph_metrics( &loader, glyph_index );