Add more characters to ttf demo

This commit is contained in:
Crayon2000 2019-04-28 04:52:55 -04:00
parent 7c9523b27e
commit d758a9fdbe
3 changed files with 22 additions and 19 deletions

View file

@ -1,5 +1,5 @@
/*------------------------------------------------------------------------------ /*------------------------------------------------------------------------------
Copyright (c) 2009-2017 The GRRLIB Team Copyright (c) 2009-2019 The GRRLIB Team
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal
@ -37,7 +37,7 @@ static void DrawBitmap(FT_Bitmap *bitmap, int offset, int top, const u8 cR, cons
* @return int 0=OK; -1=Failed * @return int 0=OK; -1=Failed
*/ */
int GRRLIB_InitTTF () { int GRRLIB_InitTTF () {
if (FT_Init_FreeType(&ftLibrary)) { if (FT_Init_FreeType(&ftLibrary) != 0) {
return -1; return -1;
} }
return 0; return 0;
@ -59,13 +59,13 @@ void GRRLIB_ExitTTF (void) {
*/ */
GRRLIB_ttfFont* GRRLIB_LoadTTF (const u8* file_base, s32 file_size) { GRRLIB_ttfFont* GRRLIB_LoadTTF (const u8* file_base, s32 file_size) {
FT_Face Face; FT_Face Face;
if (FT_New_Memory_Face(ftLibrary, file_base, file_size, 0, &Face)) { if (FT_New_Memory_Face(ftLibrary, file_base, file_size, 0, &Face) != 0) {
return NULL; return NULL;
} }
GRRLIB_ttfFont* myFont = (GRRLIB_ttfFont*)malloc(sizeof(GRRLIB_ttfFont)); GRRLIB_ttfFont* myFont = (GRRLIB_ttfFont*)malloc(sizeof(GRRLIB_ttfFont));
myFont->kerning = FT_HAS_KERNING(Face); myFont->kerning = FT_HAS_KERNING(Face);
/* /*
if (FT_Set_Pixel_Sizes(Face, 0, fontSize)) { if (FT_Set_Pixel_Sizes(Face, 0, fontSize) != 0) {
FT_Set_Pixel_Sizes(Face, 0, 12); FT_Set_Pixel_Sizes(Face, 0, 12);
} }
*/ */
@ -135,7 +135,7 @@ void GRRLIB_PrintfTTFW(int x, int y, GRRLIB_ttfFont *myFont, const wchar_t *utf3
FT_UInt previousGlyph = 0; FT_UInt previousGlyph = 0;
u8 cR = R(color), cG = G(color), cB = B(color); u8 cR = R(color), cG = G(color), cB = B(color);
if (FT_Set_Pixel_Sizes(Face, 0, fontSize)) { if (FT_Set_Pixel_Sizes(Face, 0, fontSize) != 0) {
FT_Set_Pixel_Sizes(Face, 0, 12); FT_Set_Pixel_Sizes(Face, 0, 12);
} }
@ -149,7 +149,7 @@ void GRRLIB_PrintfTTFW(int x, int y, GRRLIB_ttfFont *myFont, const wchar_t *utf3
FT_Get_Kerning(myFont->face, previousGlyph, glyphIndex, FT_KERNING_DEFAULT, &delta); FT_Get_Kerning(myFont->face, previousGlyph, glyphIndex, FT_KERNING_DEFAULT, &delta);
penX += delta.x >> 6; penX += delta.x >> 6;
} }
if (FT_Load_Glyph(myFont->face, glyphIndex, FT_LOAD_RENDER)) { if (FT_Load_Glyph(myFont->face, glyphIndex, FT_LOAD_RENDER) != 0) {
continue; continue;
} }
@ -194,11 +194,11 @@ static void DrawBitmap(FT_Bitmap *bitmap, int offset, int top, const u8 cR, cons
* @param fontSize The size of the font. * @param fontSize The size of the font.
* @return The width of a text in pixel. * @return The width of a text in pixel.
*/ */
unsigned int GRRLIB_WidthTTF(GRRLIB_ttfFont *myFont, const char *string, unsigned int fontSize) { u32 GRRLIB_WidthTTF(GRRLIB_ttfFont *myFont, const char *string, unsigned int fontSize) {
if (myFont == NULL || string == NULL) { if (myFont == NULL || string == NULL) {
return 0; return 0;
} }
unsigned int penX; u32 penX;
size_t length = strlen(string) + 1; size_t length = strlen(string) + 1;
wchar_t *utf32 = (wchar_t*)malloc(length * sizeof(wchar_t)); wchar_t *utf32 = (wchar_t*)malloc(length * sizeof(wchar_t));
length = mbstowcs(utf32, string, length); length = mbstowcs(utf32, string, length);
@ -218,17 +218,17 @@ unsigned int GRRLIB_WidthTTF(GRRLIB_ttfFont *myFont, const char *string, unsigne
* @param fontSize The size of the font. * @param fontSize The size of the font.
* @return The width of a text in pixel. * @return The width of a text in pixel.
*/ */
unsigned int GRRLIB_WidthTTFW(GRRLIB_ttfFont *myFont, const wchar_t *utf32, unsigned int fontSize) { u32 GRRLIB_WidthTTFW(GRRLIB_ttfFont *myFont, const wchar_t *utf32, unsigned int fontSize) {
if (myFont == NULL || utf32 == NULL) { if (myFont == NULL || utf32 == NULL) {
return 0; return 0;
} }
FT_Face Face = (FT_Face)myFont->face; FT_Face Face = (FT_Face)myFont->face;
unsigned int penX = 0; u32 penX = 0;
FT_UInt glyphIndex; FT_UInt glyphIndex;
FT_UInt previousGlyph = 0; FT_UInt previousGlyph = 0;
if (FT_Set_Pixel_Sizes(myFont->face, 0, fontSize)) { if (FT_Set_Pixel_Sizes(myFont->face, 0, fontSize) != 0) {
FT_Set_Pixel_Sizes(myFont->face, 0, 12); FT_Set_Pixel_Sizes(myFont->face, 0, 12);
} }
@ -240,7 +240,7 @@ unsigned int GRRLIB_WidthTTFW(GRRLIB_ttfFont *myFont, const wchar_t *utf32, unsi
FT_Get_Kerning(Face, previousGlyph, glyphIndex, FT_KERNING_DEFAULT, &delta); FT_Get_Kerning(Face, previousGlyph, glyphIndex, FT_KERNING_DEFAULT, &delta);
penX += delta.x >> 6; penX += delta.x >> 6;
} }
if (FT_Load_Glyph(Face, glyphIndex, FT_LOAD_RENDER)) { if (FT_Load_Glyph(Face, glyphIndex, FT_LOAD_RENDER) != 0) {
continue; continue;
} }

View file

@ -177,8 +177,8 @@ GRRLIB_ttfFont* GRRLIB_LoadTTF(const u8* file_base, s32 file_size);
void GRRLIB_FreeTTF(GRRLIB_ttfFont *myFont); void GRRLIB_FreeTTF(GRRLIB_ttfFont *myFont);
void GRRLIB_PrintfTTF(int x, int y, GRRLIB_ttfFont *myFont, const char *string, unsigned int fontSize, const u32 color); void GRRLIB_PrintfTTF(int x, int y, GRRLIB_ttfFont *myFont, const char *string, unsigned int fontSize, const u32 color);
void GRRLIB_PrintfTTFW(int x, int y, GRRLIB_ttfFont *myFont, const wchar_t *string, unsigned int fontSize, const u32 color); void GRRLIB_PrintfTTFW(int x, int y, GRRLIB_ttfFont *myFont, const wchar_t *string, unsigned int fontSize, const u32 color);
unsigned int GRRLIB_WidthTTF(GRRLIB_ttfFont *myFont, const char *, unsigned int); u32 GRRLIB_WidthTTF(GRRLIB_ttfFont *myFont, const char *, unsigned int);
unsigned int GRRLIB_WidthTTFW(GRRLIB_ttfFont *myFont, const wchar_t *, unsigned int); u32 GRRLIB_WidthTTFW(GRRLIB_ttfFont *myFont, const wchar_t *, unsigned int);
#endif // __GRRLIB_FNLIB_H__ #endif // __GRRLIB_FNLIB_H__
/** @} */ // end of group /** @} */ // end of group

View file

@ -15,7 +15,6 @@ static u8 CalculateFrameRate();
static bool ScreenShot(); static bool ScreenShot();
int main(int argc, char **argv) { int main(int argc, char **argv) {
char FPS[255] = "";
bool ShowFPS = false; bool ShowFPS = false;
// Initialise the Graphics & Video subsystem // Initialise the Graphics & Video subsystem
@ -31,11 +30,14 @@ int main(int argc, char **argv) {
// Fill a table with characters // Fill a table with characters
u32 i, n = 0; u32 i, n = 0;
wchar_t charTable[450]; wchar_t charTable[460];
for(i=33; i<=126; i++) { // 0 to 93 for(i=33; i<=126; i++) { // 0 to 93
charTable[n++] = i; charTable[n++] = i;
} }
for(i=161; i<=516; i++) { // 94 to 449 for(i=161; i<=518; i++) { // 94 to 451
charTable[n++] = i;
}
for(i=9824; i<=9831; i++) { // 452 to 459
charTable[n++] = i; charTable[n++] = i;
} }
@ -54,7 +56,7 @@ int main(int argc, char **argv) {
// Loop forever // Loop forever
while(1) { while(1) {
GRRLIB_DrawImg(0, 0, CopiedImg, 0, 1, 1, 0xFFFFFFFF); GRRLIB_DrawImg(0, 0, CopiedImg, 0, 1, 1, 0xFFFFFFFF);
Letter[0] = charTable[rand() % 449]; Letter[0] = charTable[rand() % 459];
GRRLIB_PrintfTTFW(rand() % rmode->fbWidth - 50, GRRLIB_PrintfTTFW(rand() % rmode->fbWidth - 50,
rand() % rmode->efbHeight - 50, rand() % rmode->efbHeight - 50,
myFont, myFont,
@ -63,7 +65,8 @@ int main(int argc, char **argv) {
((rand() % 0xFFFFFF) << 8) | 0xFF); ((rand() % 0xFFFFFF) << 8) | 0xFF);
GRRLIB_Screen2Texture(0, 0, CopiedImg, false); GRRLIB_Screen2Texture(0, 0, CopiedImg, false);
if(ShowFPS) { if(ShowFPS == true) {
char FPS[255];
sprintf(FPS, "Current FPS: %d", CalculateFrameRate()); sprintf(FPS, "Current FPS: %d", CalculateFrameRate());
GRRLIB_PrintfTTF(500+1, 25+1, myFont, FPS, 12, 0x000000FF); GRRLIB_PrintfTTF(500+1, 25+1, myFont, FPS, 12, 0x000000FF);
GRRLIB_PrintfTTF(500, 25, myFont, FPS, 12, 0xFFFFFFFF); GRRLIB_PrintfTTF(500, 25, myFont, FPS, 12, 0xFFFFFFFF);