diff --git a/src/gfx.c b/src/gfx.c index a4208d4..62f15bf 100644 --- a/src/gfx.c +++ b/src/gfx.c @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -// Fonts not ready yet +// TODO: Not ready yet #define NOFONT #include @@ -236,7 +236,7 @@ int gfx_renderUnicodeBase(const char *in, int x, int y, int fontColor, int wrap, char testStr[STRMAX]; char currentLine[STRMAX]; int nCurrentLine; - char remainingStr[STRMAX]; + const utf8proc_uint8_t remainingStr[STRMAX]; int state; int errorcode; int i, j; @@ -244,9 +244,9 @@ int gfx_renderUnicodeBase(const char *in, int x, int y, int fontColor, int wrap, SDL_Rect area; int nextline_y = y; - color.r = fontColor & 0xff0000; - color.g = fontColor & 0x00ff00; - color.b = fontColor & 0x0000ff; + color.r = (Uint8)(fontColor & 0xff0000); + color.g = (Uint8)(fontColor & 0x00ff00); + color.b = (Uint8)(fontColor & 0x0000ff); if (gfx_unicodeFont != NULL) { @@ -255,7 +255,7 @@ int gfx_renderUnicodeBase(const char *in, int x, int y, int fontColor, int wrap, engine_error(TTF_GetError()); } - remainingStr = strcpy(in); + strcpy(remainingStr, in); while (w > dest->w) { @@ -293,10 +293,11 @@ int gfx_renderUnicodeBase(const char *in, int x, int y, int fontColor, int wrap, for (i = nBreakPoints - 1; i >= 0; i--) { - testStr = ""; for (j = 0; j < nCharList - 1; j++) { - utf8proc_encode_char(charList[j], &testStr[j + offset]); + utf8proc_encode_char(charList[j], &testStr[j]); + if (j < STRMAX - 1) + testStr[j + 1] = '\0'; if (j == breakPoints[i]) { break; @@ -308,20 +309,22 @@ int gfx_renderUnicodeBase(const char *in, int x, int y, int fontColor, int wrap, } if (w <= dest->w) { - currentLine = ""; nCurrentLine = 0; - remainingStr = ""; done_rendering = 0; for (j = 0; j < nCharList - 1; j++) { if (done_rendering) { utf8proc_encode_char(charList[j], &remainingStr[j - nCurrentLine]); + if (j < STRMAX - 1) + remainingStr[j + 1] = '\0'; } else { utf8proc_encode_char(charList[j], ¤tLine[j]); nCurrentLine++; + if (j < STRMAX - 1) + currentLine[j + 1] = '\0'; } if (j == breakPoints[i]) @@ -356,7 +359,13 @@ int gfx_renderUnicodeBase(const char *in, int x, int y, int fontColor, int wrap, int gfx_renderUnicode(const char *in, int x, int y, int fontColor, int wrap, SDL_Surface *dest) { - gfx_renderString(const char *in, int x, int y, int fontColor, int wrap, SDL_Surface *dest); + gfx_renderUnicodeBase(in, x, y - 1, FONT_OUTLINE, wrap, dest); + gfx_renderUnicodeBase(in, x, y + 1, FONT_OUTLINE, wrap, dest); + gfx_renderUnicodeBase(in, x, y + 2, FONT_OUTLINE, wrap, dest); + gfx_renderUnicodeBase(in, x - 1, y, FONT_OUTLINE, wrap, dest); + gfx_renderUnicodeBase(in, x - 2, y, FONT_OUTLINE, wrap, dest); + gfx_renderUnicodeBase(in, x + 1, y, FONT_OUTLINE, wrap, dest); + return gfx_renderUnicodeBase(in, x, y, fontColor, wrap, dest); } #endif