Formatting.
This commit is contained in:
parent
4a2f8f1faf
commit
a0f3a1f25a
28
ChangeLog
28
ChangeLog
|
@ -2,25 +2,25 @@
|
||||||
|
|
||||||
[smooth] Sub-banding protocol revision.
|
[smooth] Sub-banding protocol revision.
|
||||||
|
|
||||||
Rasterization sub-banding is utilized at large sizes while using
|
Rasterization sub-banding is utilized at large sizes while using a
|
||||||
rather small fixed memory pool. Indeed it is possible to make an
|
rather small fixed memory pool. Indeed it is possible to make an
|
||||||
educated guess how much memory is necessary at a given size for a
|
educated guess how much memory is necessary at a given size for a
|
||||||
given glyph. It turns out that, for large majority of European glyphs,
|
given glyph. It turns out that, for a large majority of European
|
||||||
you should store about 8 times more boundary pixels than their height.
|
glyphs, you should store about 8 times more boundary pixels than
|
||||||
Or, vice versa, if your memory pool can hold 800 pixels the band
|
their height. Or, vice versa, if your memory pool can hold 800
|
||||||
height should be 100 and you should sub-band anything larger than
|
pixels the band height should be 100 and you should sub-band
|
||||||
that. Should you still run out of memory, FreeType bisects the band
|
anything larger than that. Should you still run out of memory,
|
||||||
but you have wasted some time. This is what has been implemented in
|
FreeType bisects the band but you have wasted some time. This is
|
||||||
FreeType since the beginning.
|
what has been implemented in FreeType since the beginning.
|
||||||
|
|
||||||
It was overlooked, however, that the top band could grow to twice the
|
It was overlooked, however, that the top band could grow to twice
|
||||||
default band size leading to unnecessary memory overflows there. This
|
the default band size leading to unnecessary memory overflows there.
|
||||||
commit fixes that. Now the bands are distributed more evenly and
|
This commit fixes that. Now the bands are distributed more evenly
|
||||||
cannot exceed the default size.
|
and cannot exceed the default size.
|
||||||
|
|
||||||
Now the magic number 8 is really suitable for rather simple European
|
Now the magic number 8 is really suitable for rather simple European
|
||||||
scripts. For complex Chinese logograms the magic number should be 13
|
scripts. For complex Chinese logograms the magic number should be
|
||||||
but that is subject for another day.
|
13 but that is subject for another day.
|
||||||
|
|
||||||
* src/smooth/ftgrays.c (gray_convert_glyph): Revise sub-banding
|
* src/smooth/ftgrays.c (gray_convert_glyph): Revise sub-banding
|
||||||
protocol.
|
protocol.
|
||||||
|
|
|
@ -143,6 +143,7 @@
|
||||||
|
|
||||||
|
|
||||||
#define ft_atol atol
|
#define ft_atol atol
|
||||||
|
#define ft_getenv getenv
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************/
|
/**********************************************************************/
|
||||||
|
|
|
@ -226,6 +226,123 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
|
||||||
|
|
||||||
|
#define MAX_LENGTH 128
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The `FREETYPE_PROPERTIES' environment variable has the following
|
||||||
|
* syntax form (broken here into multiple lines for better readability)
|
||||||
|
*
|
||||||
|
* <whitespace>
|
||||||
|
* <module-name1> ':'
|
||||||
|
* <property-name1> '=' <property-value1>
|
||||||
|
* <whitespace>
|
||||||
|
* <module-name2> ':'
|
||||||
|
* <property-name2> '=' <property-value2>
|
||||||
|
* ...
|
||||||
|
*
|
||||||
|
* Example:
|
||||||
|
*
|
||||||
|
* FREETYPE_PROPERTIES=truetype:interpreter-version=35 \
|
||||||
|
* cff:no-stem-darkening=1 \
|
||||||
|
* autofitter:warping=1
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void
|
||||||
|
ft_get_default_properties( FT_Library library )
|
||||||
|
{
|
||||||
|
const char* env;
|
||||||
|
const char* p;
|
||||||
|
const char* q;
|
||||||
|
|
||||||
|
char module_name[MAX_LENGTH + 1];
|
||||||
|
char property_name[MAX_LENGTH + 1];
|
||||||
|
char property_value[MAX_LENGTH + 1];
|
||||||
|
|
||||||
|
int i;
|
||||||
|
|
||||||
|
|
||||||
|
env = getenv( "FREETYPE_PROPERTIES" );
|
||||||
|
if ( !env )
|
||||||
|
return;
|
||||||
|
|
||||||
|
for ( p = env; *p; p++ )
|
||||||
|
{
|
||||||
|
module_name[0] = '\0';
|
||||||
|
property_name[0] = '\0';
|
||||||
|
property_value[0] = '\0';
|
||||||
|
|
||||||
|
/* skip leading whitespace and separators */
|
||||||
|
if ( *p == ' ' || *p == '\t' )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* read module name, followed by `:' */
|
||||||
|
q = p;
|
||||||
|
for ( i = 0; i < MAX_LENGTH; i++ )
|
||||||
|
{
|
||||||
|
if ( !*p || *p == ':' )
|
||||||
|
break;
|
||||||
|
module_name[i] = *p++;
|
||||||
|
}
|
||||||
|
module_name[i] = '\0';
|
||||||
|
|
||||||
|
if ( !*p )
|
||||||
|
break;
|
||||||
|
if ( *p != ':' || p == q )
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* read property name, followed by `=' */
|
||||||
|
q = p;
|
||||||
|
for ( i = 0; i < MAX_LENGTH; i++ )
|
||||||
|
{
|
||||||
|
if ( !*p || *p == '=' )
|
||||||
|
break;
|
||||||
|
property_name[i] = *p++;
|
||||||
|
}
|
||||||
|
property_name[i] = '\0';
|
||||||
|
|
||||||
|
if ( !*p )
|
||||||
|
break;
|
||||||
|
if ( *p != '=' || p == q )
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* read property value, followed by whitespace (if any) */
|
||||||
|
q = p;
|
||||||
|
for ( i = 0; i < MAX_LENGTH; i++ )
|
||||||
|
{
|
||||||
|
if ( !*p || *p == ' ' || *p == '\t' )
|
||||||
|
break;
|
||||||
|
property_value[i] = *p++;
|
||||||
|
}
|
||||||
|
property_value[i] = '\0';
|
||||||
|
|
||||||
|
if ( !( *p == '\0' || *p == ' ' || *p == '\t' ) || p == q )
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* we have all data; resolve them into a call to FT_Property_Set */
|
||||||
|
/* if possible */
|
||||||
|
|
||||||
|
/* we completely ignore errors */
|
||||||
|
FT_Property_Set( library,
|
||||||
|
module_name,
|
||||||
|
property_name,
|
||||||
|
property_value );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
static void
|
||||||
|
ft_get_default_properties( FT_Library library )
|
||||||
|
{
|
||||||
|
FT_UNUSED( library );
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* documentation is in freetype.h */
|
/* documentation is in freetype.h */
|
||||||
|
|
||||||
FT_EXPORT_DEF( FT_Error )
|
FT_EXPORT_DEF( FT_Error )
|
||||||
|
@ -256,6 +373,8 @@
|
||||||
else
|
else
|
||||||
FT_Add_Default_Modules( *alibrary );
|
FT_Add_Default_Modules( *alibrary );
|
||||||
|
|
||||||
|
ft_get_default_properties( *alibrary );
|
||||||
|
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1911,7 +1911,7 @@ typedef ptrdiff_t FT_PtrDist;
|
||||||
min = ras.min_ey;
|
min = ras.min_ey;
|
||||||
max_y = ras.max_ey;
|
max_y = ras.max_ey;
|
||||||
|
|
||||||
for (; min < max_y; min = max )
|
for ( ; min < max_y; min = max )
|
||||||
{
|
{
|
||||||
max = min + band_size;
|
max = min + band_size;
|
||||||
if ( max > max_y )
|
if ( max > max_y )
|
||||||
|
|
Loading…
Reference in New Issue