simple update to allow several rendering modes
(useful for testing the Unicode charmaps)
This commit is contained in:
parent
1e7f843261
commit
c64f644264
@ -38,6 +38,10 @@
|
||||
char Header[128];
|
||||
char* new_header = 0;
|
||||
|
||||
const unsigned char* Text =
|
||||
"The quick brown fox jumped over the lazy dog 0123456789 \
|
||||
âêîûôäëïöüÿàùéèç &#~\"'(-`_^@)=+° ABCDEFGHIJKLMNOPQRSTUVWXYZ $£^¨*µù%!§:/;.,?<>";
|
||||
|
||||
FT_Library library; /* the FreeType library */
|
||||
FT_Face face; /* the font face */
|
||||
FT_Size size; /* the font size */
|
||||
@ -66,6 +70,8 @@
|
||||
|
||||
int graph_init = 0;
|
||||
|
||||
int render_mode = 1;
|
||||
|
||||
#define DEBUGxxx
|
||||
|
||||
#ifdef DEBUG
|
||||
@ -188,7 +194,7 @@
|
||||
bit3.buffer = glyph->bitmap.buffer;
|
||||
bit3.grays = 0;
|
||||
}
|
||||
|
||||
|
||||
/* Then, blit the image to the target surface */
|
||||
x_top = x_offset + TRUNC(left);
|
||||
y_top = y_offset - TRUNC(top);
|
||||
@ -292,6 +298,68 @@
|
||||
}
|
||||
|
||||
|
||||
static FT_Error Render_Text( int first_glyph, int ptsize )
|
||||
{
|
||||
FT_F26Dot6 start_x, start_y, step_x, step_y, x, y;
|
||||
int i;
|
||||
|
||||
FT_Error error;
|
||||
const unsigned char* p;
|
||||
|
||||
start_x = 4;
|
||||
start_y = 12 + size->metrics.y_ppem;
|
||||
|
||||
step_x = size->metrics.x_ppem + 4;
|
||||
step_y = size->metrics.y_ppem + 10;
|
||||
|
||||
x = start_x;
|
||||
y = start_y;
|
||||
|
||||
i = first_glyph;
|
||||
p = Text;
|
||||
while (i > 0 && *p) { p++; i--; }
|
||||
|
||||
while ( *p )
|
||||
{
|
||||
if ( !(error = LoadChar( FT_Get_Char_Index( face, (unsigned char)*p ), hinted )) )
|
||||
{
|
||||
#ifdef DEBUG
|
||||
if (i <= first_glyph+6)
|
||||
{
|
||||
LOG(( "metrics[%02d] = [%x %x]\n",
|
||||
i,
|
||||
glyph->metrics.horiBearingX,
|
||||
glyph->metrics.horiAdvance ));
|
||||
|
||||
if (i == first_glyph+6)
|
||||
LOG(( "-------------------------\n"));
|
||||
}
|
||||
|
||||
#endif
|
||||
Render_Glyph( x, y );
|
||||
|
||||
x += ( glyph->metrics.horiAdvance >> 6 ) + 1;
|
||||
|
||||
if ( x + size->metrics.x_ppem > bit.width )
|
||||
{
|
||||
x = start_x;
|
||||
y += step_y;
|
||||
|
||||
if ( y >= bit.rows )
|
||||
return FT_Err_Ok;
|
||||
}
|
||||
}
|
||||
else
|
||||
Fail++;
|
||||
|
||||
i++;
|
||||
p++;
|
||||
}
|
||||
|
||||
return FT_Err_Ok;
|
||||
}
|
||||
|
||||
|
||||
static void Help( )
|
||||
{
|
||||
grEvent dummy_event;
|
||||
@ -313,6 +381,7 @@
|
||||
grWriteln(" h : toggle outline hinting" );
|
||||
grWriteln(" b : toggle embedded bitmaps" );
|
||||
grWriteln(" l : toggle low precision rendering" );
|
||||
grWriteln(" space : toggle rendering mode" );
|
||||
grLn();
|
||||
grWriteln(" Up : increase pointsize by 1 unit" );
|
||||
grWriteln(" Down : decrease pointsize by 1 unit" );
|
||||
@ -379,6 +448,13 @@
|
||||
: "glyph hinting is now ignored" );
|
||||
break;
|
||||
|
||||
case grKEY(' '):
|
||||
render_mode ^= 1;
|
||||
new_header = ( render_mode
|
||||
? "rendering all glyphs in font"
|
||||
: "rendering test text string" );
|
||||
break;
|
||||
|
||||
case grKeyF1:
|
||||
case grKEY('?'):
|
||||
Help();
|
||||
@ -575,7 +651,15 @@
|
||||
|
||||
if ( file_loaded >= 1 )
|
||||
{
|
||||
Render_All( Num, ptsize );
|
||||
switch (render_mode)
|
||||
{
|
||||
case 0:
|
||||
Render_Text( Num, ptsize );
|
||||
break;
|
||||
|
||||
default:
|
||||
Render_All( Num, ptsize );
|
||||
}
|
||||
|
||||
sprintf( Header, "%s %s (file %s)",
|
||||
face->family_name,
|
||||
|
Loading…
Reference in New Issue
Block a user