diff options
| author | Max Horn | 2004-04-16 20:49:14 +0000 | 
|---|---|---|
| committer | Max Horn | 2004-04-16 20:49:14 +0000 | 
| commit | bcb7878f10d9ca2f48dfb6ed4074415181c8af81 (patch) | |
| tree | 8b582647a43bdf95a2bec39509d059aac0e8d816 | |
| parent | 5af7979f0bf497fc1c93fdb581a5b90c2eb5857f (diff) | |
| download | scummvm-rg350-bcb7878f10d9ca2f48dfb6ed4074415181c8af81.tar.gz scummvm-rg350-bcb7878f10d9ca2f48dfb6ed4074415181c8af81.tar.bz2 scummvm-rg350-bcb7878f10d9ca2f48dfb6ed4074415181c8af81.zip | |
Unify some code
svn-id: r13589
| -rw-r--r-- | scumm/insane/insane.cpp | 6 | ||||
| -rw-r--r-- | scumm/smush/smush_font.cpp | 128 | ||||
| -rw-r--r-- | scumm/smush/smush_font.h | 6 | ||||
| -rw-r--r-- | scumm/smush/smush_player.cpp | 8 | 
4 files changed, 51 insertions, 97 deletions
| diff --git a/scumm/insane/insane.cpp b/scumm/insane/insane.cpp index 7914433f11..48ff0b2964 100644 --- a/scumm/insane/insane.cpp +++ b/scumm/insane/insane.cpp @@ -1276,13 +1276,13 @@ void Insane::smlayer_showStatusMsg(int32 arg_0, byte *renderBitmap, int32 codecp  	// bit 3 - wrap around  8  	switch (flags) {  	case 0:  -		sf->drawStringAbsolute(str, renderBitmap, _player->_width, pos_x, pos_y); +		sf->drawString(str, renderBitmap, _player->_width, _player->_height, pos_x, pos_y, false);  		break;  	case 1: -		sf->drawStringCentered(str, renderBitmap, _player->_width, _player->_height, pos_x, MAX(pos_y, top)); +		sf->drawString(str, renderBitmap, _player->_width, _player->_height, pos_x, MAX(pos_y, top), true);  		break;  	case 5: -		sf->drawStringWrapCentered(str, renderBitmap, _player->_width, _player->_height, pos_x, pos_y, 10, 300); +		sf->drawStringWrap(str, renderBitmap, _player->_width, _player->_height, pos_x, pos_y, 10, 300, true);  		break;  	default:  		warning("Insane::smlayer_showStatusMsg. Not handled flags: %d", flags); diff --git a/scumm/smush/smush_font.cpp b/scumm/smush/smush_font.cpp index f810a7895d..6945f37c5e 100644 --- a/scumm/smush/smush_font.cpp +++ b/scumm/smush/smush_font.cpp @@ -157,8 +157,8 @@ void SmushFont::drawSubstring(const char *str, byte *buffer, int dst_width, int  #define MAX_WORDS	60 -void SmushFont::drawStringAbsolute(const char *str, byte *buffer, int dst_width, int x, int y) { -	debug(9, "SmushFont::drawStringAbsolute(%s, %d, %d)", str, x, y); +void SmushFont::drawString(const char *str, byte *buffer, int dst_width, int dst_height, int x, int y, bool center) { +	debug(0, "SmushFont::drawString(%s, %d, %d, %d)", str, x, y, center);  	while (str) {  		char line[256]; @@ -171,32 +171,13 @@ void SmushFont::drawStringAbsolute(const char *str, byte *buffer, int dst_width,  			strcpy(line, str);  			str = 0;  		} -		drawSubstring(line, buffer, dst_width, x, y); +		drawSubstring(line, buffer, dst_width, center ? (x - getStringWidth(line) / 2) : x, y);  		y += getStringHeight(line);  	}  } -void SmushFont::drawStringCentered(const char *str, byte *buffer, int dst_width, int dst_height, int x, int y) { -	debug(9, "SmushFont::drawStringCentered(%s, %d, %d)", str, x, y); - -	while (str) { -		char line[256]; -		char *pos = strchr(str, '\n'); -		if (pos) { -			memcpy(line, str, pos - str - 1); -			line[pos - str - 1] = 0; -			str = pos + 1; -		} else { -			strcpy(line, str); -			str = 0; -		} -		drawSubstring(line, buffer, dst_width, x - getStringWidth(line) / 2, y); -		y += getStringHeight(line); -	} -} - -void SmushFont::drawStringWrap(const char *str, byte *buffer, int dst_width, int dst_height, int x, int y, int left, int right) { -	debug(9, "SmushFont::drawStringWrap(%s, %d, %d, %d, %d)", str, x, y, left, right); +void SmushFont::drawStringWrap(const char *str, byte *buffer, int dst_width, int dst_height, int x, int y, int left, int right, bool center) { +	debug(0, "SmushFont::drawStringWrap(%s, %d, %d, %d, %d, %d)", str, x, y, left, right, center);  	const int width = right - left;  	char *s = strdup(str); @@ -243,81 +224,56 @@ void SmushFont::drawStringWrap(const char *str, byte *buffer, int dst_width, int  	if (y > dst_height - height) {  		y = dst_height - height;  	} - -	if (x > dst_width - max_width) -		x = dst_width - max_width; - -	for (i = 0; i < line_count; i++) { -		drawSubstring(substrings[i], buffer, dst_width, x, y); -		y += getStringHeight(substrings[i]); +	 +	if (center) { +		max_width = (max_width + 1) / 2; +		x = left + width / 2; +	 +		if (x < left + max_width) +			x = left + max_width; +		if (x > right - max_width) +			x = right - max_width; +	 +		for (i = 0; i < line_count; i++) { +			drawSubstring(substrings[i], buffer, dst_width, x - substr_widths[i] / 2, y); +			y += getStringHeight(substrings[i]); +		} +	} else { +		if (x > dst_width - max_width) +			x = dst_width - max_width; +	 +		for (i = 0; i < line_count; i++) { +			drawSubstring(substrings[i], buffer, dst_width, x, y); +			y += getStringHeight(substrings[i]); +		}  	}  	free(s);  } -void SmushFont::drawStringWrapCentered(const char *str, byte *buffer, int dst_width, int dst_height, int x, int y, int left, int right) { -	debug(9, "SmushFont::drawStringWrapCentered(%s, %d, %d, %d, %d)", str, x, y, left, right); -	 -	const int width = right - left; -	char *s = strdup(str); -	char *words[MAX_WORDS]; -	int word_count = 0; +} // End of namespace Scumm + + + + + + + + + + + + + + -	char *tmp = s; -	while (tmp) { -		assert(word_count < MAX_WORDS); -		words[word_count++] = tmp; -		tmp = strpbrk(tmp, " \t\r\n"); -		if (tmp == 0) -			break; -		*tmp++ = 0; -	} -	int i = 0, max_width = 0, height = 0, line_count = 0; -	char *substrings[MAX_WORDS]; -	int substr_widths[MAX_WORDS]; -	const int space_width = getCharWidth(' '); -	i = 0; -	while (i < word_count) { -		char *substr = words[i++]; -		int substr_width = getStringWidth(substr); -		while (i < word_count) { -			int word_width = getStringWidth(words[i]); -			if ((substr_width + space_width + word_width) >= width) -				break; -			substr_width += word_width + space_width; -			*(words[i]-1) = ' ';	// Convert 0 byte back to space -			i++; -		} -		substrings[line_count] = substr; -		substr_widths[line_count++] = substr_width; -		if (max_width < substr_width) -			max_width = substr_width; -		height += getStringHeight(substr); -	} -	if (y > dst_height - height) { -		y = dst_height - height; -	} -	max_width = (max_width + 1) / 2; -	x = left + width / 2; -	if (x < left + max_width) -		x = left + max_width; -	if (x > right - max_width) -		x = right - max_width; -	for (i = 0; i < line_count; i++) { -		drawSubstring(substrings[i], buffer, dst_width, x - substr_widths[i] / 2, y); -		y += getStringHeight(substrings[i]); -	} -	 -	free(s); -} -} // End of namespace Scumm diff --git a/scumm/smush/smush_font.h b/scumm/smush/smush_font.h index 940880d6a9..b197dad9c6 100644 --- a/scumm/smush/smush_font.h +++ b/scumm/smush/smush_font.h @@ -45,10 +45,8 @@ public:  	SmushFont(bool use_original_colors, bool new_colors);  	void setColor(byte c) { _color = c; } -	void drawStringAbsolute    (const char *str, byte *buffer, int dst_width, int x, int y); -	void drawStringCentered    (const char *str, byte *buffer, int dst_width, int dst_height, int x, int y); -	void drawStringWrap        (const char *str, byte *buffer, int dst_width, int dst_height, int x, int y, int left, int right); -	void drawStringWrapCentered(const char *str, byte *buffer, int dst_width, int dst_height, int x, int y, int left, int right); +	void drawString    (const char *str, byte *buffer, int dst_width, int dst_height, int x, int y, bool center); +	void drawStringWrap(const char *str, byte *buffer, int dst_width, int dst_height, int x, int y, int left, int right, bool center);  };  } // End of namespace Scumm diff --git a/scumm/smush/smush_player.cpp b/scumm/smush/smush_player.cpp index ad8042ecf6..67c6fa4dc7 100644 --- a/scumm/smush/smush_player.cpp +++ b/scumm/smush/smush_player.cpp @@ -569,10 +569,10 @@ void SmushPlayer::handleTextResource(Chunk &b) {  	// bit 3 - wrap around  8  	switch (flags & 9) {  	case 0:  -		sf->drawStringAbsolute(str, _dst, _width, pos_x, pos_y); +		sf->drawString(str, _dst, _width, _height, pos_x, pos_y, false);  		break;  	case 1: -		sf->drawStringCentered(str, _dst, _width, _height, pos_x, MAX(pos_y, top)); +		sf->drawString(str, _dst, _width, _height, pos_x, MAX(pos_y, top), true);  		break;  	case 8:  		// FIXME: Is 'right' the maximum line width here, just @@ -580,7 +580,7 @@ void SmushPlayer::handleTextResource(Chunk &b) {  		// in The Dig's intro, where 'left' and 'right' are  		// always 0 and 321 respectively, and apparently we  		// handle that correctly. -		sf->drawStringWrap(str, _dst, _width, _height, pos_x, MAX(pos_y, top), left, right); +		sf->drawStringWrap(str, _dst, _width, _height, pos_x, MAX(pos_y, top), left, right, false);  		break;  	case 9:  		// In this case, the 'right' parameter is actually the @@ -589,7 +589,7 @@ void SmushPlayer::handleTextResource(Chunk &b) {  		//  		// Note that in The Dig's "Spacetime Six" movie it's  		// 621. I have no idea what that means. -		sf->drawStringWrapCentered(str, _dst, _width, _height, pos_x, MAX(pos_y, top), left, MIN(left + right, _width)); +		sf->drawStringWrap(str, _dst, _width, _height, pos_x, MAX(pos_y, top), left, MIN(left + right, _width), true);  		break;  	default:  		warning("SmushPlayer::handleTextResource. Not handled flags: %d", flags); | 
