aboutsummaryrefslogtreecommitdiff
path: root/engines/saga/font.cpp
diff options
context:
space:
mode:
authorWillem Jan Palenstijn2009-07-24 18:58:15 +0000
committerWillem Jan Palenstijn2009-07-24 18:58:15 +0000
commit441ae56ea959b4039e154af1f69cf5ee50a035b2 (patch)
tree4b9cb2b8db7c121c5e2d860eed158eee2b0b4cfa /engines/saga/font.cpp
parent035dad7b3c91da84d23e682cc11897d05e12b319 (diff)
downloadscummvm-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
Diffstat (limited to 'engines/saga/font.cpp')
-rw-r--r--engines/saga/font.cpp47
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;