821 |
} |
} |
822 |
|
|
823 |
|
|
824 |
static char* |
static void |
825 |
error_message( FT_Error error_code ) |
write_header( FT_Error error_code ) |
826 |
{ |
{ |
827 |
FT_Face face; |
FT_Face face; |
828 |
const char* basename; |
const char* basename; |
829 |
|
const char* format; |
830 |
|
|
831 |
|
|
832 |
error = FTC_Manager_LookupFace( handle->cache_manager, |
error = FTC_Manager_LookupFace( handle->cache_manager, |
834 |
if ( error ) |
if ( error ) |
835 |
PanicZ( "can't access font file" ); |
PanicZ( "can't access font file" ); |
836 |
|
|
837 |
basename = ft_basename( handle->current_font->filepathname ); |
if ( !status.header ) |
|
|
|
|
switch ( error_code ) |
|
838 |
{ |
{ |
839 |
|
basename = ft_basename( handle->current_font->filepathname ); |
840 |
|
|
841 |
|
switch ( error_code ) |
842 |
|
{ |
843 |
case FT_Err_Ok: |
case FT_Err_Ok: |
844 |
sprintf( status.header_buffer, "%s %s (file `%s')", face->family_name, |
sprintf( status.header_buffer, "%s %s (file `%s')", face->family_name, |
845 |
face->style_name, basename ); |
face->style_name, basename ); |
846 |
break; |
break; |
847 |
case FT_Err_Invalid_Pixel_Size: |
case FT_Err_Invalid_Pixel_Size: |
848 |
sprintf( status.header_buffer, "Invalid pixel size (file `%s')", basename ); |
sprintf( status.header_buffer, "Invalid pixel size (file `%s')", basename ); |
852 |
break; |
break; |
853 |
default: |
default: |
854 |
sprintf( status.header_buffer, "File `%s': error 0x%04x", basename, |
sprintf( status.header_buffer, "File `%s': error 0x%04x", basename, |
855 |
(FT_UShort)error_code ); |
(FT_UShort)error_code ); |
856 |
break; |
break; |
857 |
|
} |
858 |
|
|
859 |
|
status.header = status.header_buffer; |
860 |
} |
} |
861 |
|
|
862 |
return status.header_buffer; |
grWriteCellString( display->bitmap, 0, 0, status.header, display->fore_color ); |
863 |
|
|
864 |
|
format = ( status.encoding != FT_ENCODING_NONE ) |
865 |
|
? "at %d points, first char code = 0x%x" |
866 |
|
: "at %d points, first glyph index = %d"; |
867 |
|
|
868 |
|
snprintf( status.header_buffer, 256, format, status.ptsize, status.Num ); |
869 |
|
|
870 |
|
if ( FT_HAS_GLYPH_NAMES( face ) ) |
871 |
|
{ |
872 |
|
char* p; |
873 |
|
int format_len, gindex, size; |
874 |
|
|
875 |
|
|
876 |
|
size = strlen( status.header_buffer ); |
877 |
|
p = status.header_buffer + size; |
878 |
|
size = 256 - size; |
879 |
|
|
880 |
|
format = ", name = "; |
881 |
|
format_len = strlen( format ); |
882 |
|
|
883 |
|
if ( size >= format_len + 2 ) |
884 |
|
{ |
885 |
|
gindex = status.Num; |
886 |
|
if ( status.encoding != FT_ENCODING_NONE ) |
887 |
|
gindex = FTDemo_Get_Index( handle, status.Num ); |
888 |
|
|
889 |
|
strcpy( p, format ); |
890 |
|
if ( FT_Get_Glyph_Name( face, gindex, p + format_len, size - format_len ) ) |
891 |
|
*p = '\0'; |
892 |
|
} |
893 |
|
} |
894 |
|
|
895 |
|
status.header = status.header_buffer; |
896 |
|
grWriteCellString( display->bitmap, 0, HEADER_HEIGHT, status.header_buffer, |
897 |
|
display->fore_color ); |
898 |
|
|
899 |
|
grRefreshSurface( display->surface ); |
900 |
} |
} |
901 |
|
|
902 |
|
|
903 |
static void |
static void |
904 |
usage( char* execname ) |
usage( char* execname ) |
905 |
{ |
{ |
993 |
char* argv[] ) |
char* argv[] ) |
994 |
{ |
{ |
995 |
grEvent event; |
grEvent event; |
|
const char* header_format; |
|
996 |
|
|
997 |
|
|
998 |
parse_cmdline( &argc, &argv ); |
parse_cmdline( &argc, &argv ); |
1018 |
} |
} |
1019 |
#endif |
#endif |
1020 |
|
|
|
header_format = status.encoding != FT_ENCODING_NONE |
|
|
? "at %d points, first char code = 0x%x" |
|
|
: "at %d points, first glyph index = %d"; |
|
|
|
|
1021 |
/* Initialize engine */ |
/* Initialize engine */ |
1022 |
handle = FTDemo_New( status.encoding ); |
handle = FTDemo_New( status.encoding ); |
1023 |
|
|
1066 |
break; |
break; |
1067 |
} |
} |
1068 |
|
|
1069 |
if ( !status.header ) |
write_header( error ); |
|
status.header = error_message( error ); |
|
|
|
|
|
/* write header */ |
|
|
grWriteCellString( display->bitmap, 0, 0, status.header, display->fore_color ); |
|
|
sprintf( status.header_buffer, header_format, status.ptsize, status.Num ); |
|
|
grWriteCellString( display->bitmap, 0, HEADER_HEIGHT, status.header_buffer, |
|
|
display->fore_color ); |
|
|
|
|
|
grRefreshSurface( display->surface ); |
|
1070 |
|
|
1071 |
if ( status.dump_cache_stats ) |
if ( status.dump_cache_stats ) |
1072 |
{ |
{ |