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; | 
