diff options
author | Willem Jan Palenstijn | 2009-07-24 18:58:15 +0000 |
---|---|---|
committer | Willem Jan Palenstijn | 2009-07-24 18:58:15 +0000 |
commit | 441ae56ea959b4039e154af1f69cf5ee50a035b2 (patch) | |
tree | 4b9cb2b8db7c121c5e2d860eed158eee2b0b4cfa | |
parent | 035dad7b3c91da84d23e682cc11897d05e12b319 (diff) | |
download | scummvm-rg350-441ae56ea959b4039e154af1f69cf5ee50a035b2.tar.gz scummvm-rg350-441ae56ea959b4039e154af1f69cf5ee50a035b2.tar.bz2 scummvm-rg350-441ae56ea959b4039e154af1f69cf5ee50a035b2.zip |
SAGA: Instead of trying to detect duplicate glyphs,
simply generate duplicate outline glyphs.
This should fix #2826697.
svn-id: r42696
-rw-r--r-- | engines/saga/font.cpp | 47 |
1 files changed, 3 insertions, 44 deletions
diff --git a/engines/saga/font.cpp b/engines/saga/font.cpp index d58d1a8900..f680ab20a8 100644 --- a/engines/saga/font.cpp +++ b/engines/saga/font.cpp @@ -143,9 +143,7 @@ void Font::createOutline(FontData *font) { int i; int row; int newByteWidth; - int oldByteWidth; int newRowLength = 0; - size_t indexOffset = 0; int index; int currentByte; unsigned char *basePointer; @@ -154,57 +152,22 @@ void Font::createOutline(FontData *font) { unsigned char *destPointer2; unsigned char *destPointer3; unsigned char charRep; - int nextIndex = 0; - // Populate new font style character data for (i = 0; i < FONT_CHARCOUNT; i++) { newByteWidth = 0; - oldByteWidth = 0; - index = font->normal.fontCharEntry[i].index; - if ((index > 0) || (i == FONT_FIRSTCHAR)) { - index += indexOffset; - } - - bool skip = false; - - if (font->normal.fontCharEntry[i].width != 0 && font->normal.fontCharEntry[i].index < nextIndex) { - // Some characters are copies of earlier characters. - // Look up the original, and make sure not to grow the size of - // the outline font twice. - skip = true; - bool found = false; - for (int j = 0; j < i; j++) { - if (font->normal.fontCharEntry[i].index == font->normal.fontCharEntry[j].index) { - index = font->outline.fontCharEntry[j].index; - found = true; - break; - } - } - if (!found) - error("Invalid index backreference in font char %d", i); - } - font->outline.fontCharEntry[i].index = index; + font->outline.fontCharEntry[i].index = newRowLength; font->outline.fontCharEntry[i].tracking = font->normal.fontCharEntry[i].tracking; font->outline.fontCharEntry[i].flag = font->normal.fontCharEntry[i].flag; - if (font->normal.fontCharEntry[i].width != 0) { + if (font->normal.fontCharEntry[i].width != 0) newByteWidth = getByteLen(font->normal.fontCharEntry[i].width + 2); - oldByteWidth = getByteLen(font->normal.fontCharEntry[i].width); - - if (!skip && newByteWidth > oldByteWidth) { - indexOffset++; - } - } font->outline.fontCharEntry[i].width = font->normal.fontCharEntry[i].width + 2; font->outline.fontCharEntry[i].byteWidth = newByteWidth; - if (!skip) { - newRowLength += newByteWidth; - nextIndex = font->normal.fontCharEntry[i].index + oldByteWidth; - } + newRowLength += newByteWidth; } debug(2, "New row length: %d", newRowLength); @@ -220,10 +183,6 @@ void Font::createOutline(FontData *font) { // Generate outline font representation for (i = 0; i < FONT_CHARCOUNT; i++) { - if (i > 0 && font->normal.fontCharEntry[i].index < font->normal.fontCharEntry[i-1].index) { - // Skip copies - continue; - } for (row = 0; row < font->normal.header.charHeight; row++) { for (currentByte = 0; currentByte < font->outline.fontCharEntry[i].byteWidth; currentByte++) { basePointer = font->outline.font + font->outline.fontCharEntry[i].index + currentByte; |