[Scummvm-cvs-logs] CVS: scummvm/scumm charset.cpp,2.84,2.85 nut_renderer.cpp,1.40,1.41

Max Horn fingolfin at users.sourceforge.net
Thu Jan 15 14:38:08 CET 2004


Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1:/tmp/cvs-serv6332

Modified Files:
	charset.cpp nut_renderer.cpp 
Log Message:
do a better job at charset clipping; some reengineering. However, to properly fix text drawing in COMI, we need to do some major changes

Index: charset.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/charset.cpp,v
retrieving revision 2.84
retrieving revision 2.85
diff -u -d -r2.84 -r2.85
--- charset.cpp	8 Jan 2004 17:41:11 -0000	2.84
+++ charset.cpp	15 Jan 2004 22:37:48 -0000	2.85
@@ -1296,7 +1296,7 @@
 	shadow.bottom = _top + height + 2;
 
 	_hasMask = true;
-	_current->drawShadowChar(chr, _left, _top - _vm->_screenTop, _color, !_ignoreCharsetMask);
+	_current->drawShadowChar(chr, _left, _top, _color, !_ignoreCharsetMask);
 	_vm->markRectAsDirty(kMainVirtScreen, shadow);
 
 	if (_str.left > _left)

Index: nut_renderer.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/nut_renderer.cpp,v
retrieving revision 1.40
retrieving revision 1.41
diff -u -d -r1.40 -r1.41
--- nut_renderer.cpp	8 Jan 2004 01:43:32 -0000	1.40
+++ nut_renderer.cpp	15 Jan 2004 22:37:48 -0000	1.41
@@ -31,7 +31,7 @@
 	_initialized(false),
 	_loaded(false),
 	_nbChars(0) {
-	
+
 	for (int i = 0; i < 256; i++)
 		_chars[i].src = NULL;
 }
@@ -237,9 +237,9 @@
 }
 
 void NutRenderer::drawShadowChar(int c, int x, int y, byte color, bool useMask) {
-	debug(8, "NutRenderer::drawChar('%c', %d, %d, %d, %d) called", c, x, y, (int)color, useMask);
+	debug(8, "NutRenderer::drawShadowChar('%c', %d, %d, %d, %d) called", c, x, y, (int)color, useMask);
 	if (!_loaded) {
-		warning("NutRenderer::drawChar() Font is not loaded");
+		warning("NutRenderer::drawShadowChar() Font is not loaded");
 		return;
 	}
 
@@ -253,7 +253,7 @@
 	// some "font shadow" resource we don't know yet.
 	// One problem remains: the fonts on the save/load screen don't have a
 	// shadow. So how do we know whether to draw text with or without shadow?
-	
+
 	int offsetX[7] = { -1,  0, 1, 0, 1, 2, 0 };
 	int offsetY[7] = {  0, -1, 0, 1, 2, 1, 0 };
 	int cTable[7] =  {  0,  0, 0, 0, 0, 0, color };
@@ -263,14 +263,18 @@
 		y += offsetY[i];
 		color = cTable[i];
 		
-		dst = vs->screenPtr + (y + _vm->_screenTop) * vs->width + x + vs->xstart;
+		if (y >= vs->height || x + vs->xstart >= vs->width) {
+			continue;
+		}
+		
+		dst = vs->screenPtr + y * vs->width + x + vs->xstart;
 		if (useMask)
-			mask = _vm->getMaskBuffer(x, y + _vm->_screenTop, 0);
+			mask = _vm->getMaskBuffer(x, y, 0);
 		
 		if (c >= 256 && _vm->_CJKMode)
-			draw2byte(dst, mask, c, x, y, color);
+			draw2byte(dst, mask, c, x, y - _vm->_screenTop, color);
 		else
-			drawChar(dst, mask, (byte)c, x, y, color);
+			drawChar(dst, mask, (byte)c, x, y - _vm->_screenTop, color);
 		
 		x -= offsetX[i];
 		y -= offsetY[i];
@@ -287,13 +291,16 @@
 	const int minX = x < 0 ? -x : 0;
 	const int minY = y < 0 ? -y : 0;
 
+	if (height <= 0 || width <= 0) {
+		return;
+	}
+
 	dst += _vm->_screenWidth * y + x;
 	if (minY) {
 		src += minY * srcPitch;
 		dst += minY * _vm->_screenWidth;
 	}
-	
-	
+
 	for (int ty = minY; ty < height; ty++) {
 		for (int tx = minX; tx < width; tx++) {
 			bits = src[tx];
@@ -314,17 +321,21 @@
 
 	byte maskmask;
 	int maskpos;
-	
+
 	const int minX = x < 0 ? -x : 0;
 	const int minY = y < 0 ? -y : 0;
 
+	if (height <= 0 || width <= 0) {
+		return;
+	}
+
 	if (minY) {
 		src += minY * srcPitch;
 		dst += minY * _vm->_screenWidth;
 		if (mask)
 			mask += minY * _vm->gdi._numStrips;
 	}
-	
+
 	for (int ty = minY; ty < height; ty++) {
 		maskmask = revBitMask[(x + minX) & 7];
 		maskpos = (x%8 + minX) / 8;
@@ -353,14 +364,18 @@
 		return;
 	}
 
-	int width = _vm->_2byteWidth;
-	int height = MIN(_vm->_2byteHeight, _vm->_screenHeight - y);
+	const int width = _vm->_2byteWidth;
+	const int height = MIN(_vm->_2byteHeight, _vm->_screenHeight - y);
 	byte *src = _vm->get2byteCharPtr(c);
 	byte bits = 0;
 
 	byte maskmask;
 	int maskpos;
 
+	if (height <= 0 || width <= 0) {
+		return;
+	}
+
 	for (int ty = 0; ty < height; ty++) {
 		maskmask = revBitMask[x & 7];
 		maskpos = 0;





More information about the Scummvm-git-logs mailing list