[Scummvm-cvs-logs] CVS: scummvm/scumm charset.cpp,2.3,2.4 charset.h,2.3,2.4 scummvm.cpp,2.10,2.11 string.cpp,1.64,1.65

Max Horn fingolfin at users.sourceforge.net
Wed Dec 25 13:58:01 CET 2002


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

Modified Files:
	charset.cpp charset.h scummvm.cpp string.cpp 
Log Message:
seperated classic & old256 rendered (now subclasses of CharsetRenderer)

Index: charset.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/charset.cpp,v
retrieving revision 2.3
retrieving revision 2.4
diff -u -d -r2.3 -r2.4
--- charset.cpp	25 Dec 2002 21:42:21 -0000	2.3
+++ charset.cpp	25 Dec 2002 21:57:01 -0000	2.4
@@ -39,23 +39,28 @@
 }
 
 // do spacing for variable width old-style font
-int CharsetRenderer::getSpacing(byte chr, byte *charset)
+int CharsetRendererClassic::getSpacing(byte chr, byte *charset)
 {
 	int spacing = 0;
-	
-	if (_vm->_features & GF_OLD256) {
-		spacing = *(charset - 11 + chr);
-	} else {
-		int offs = READ_LE_UINT32(charset + chr * 4 + 4);
-		if (offs) {
-			spacing = charset[offs];
-			if (charset[offs + 2] >= 0x80) {
-				spacing += charset[offs + 2] - 0x100;
-			} else {
-				spacing += charset[offs + 2];
-			}
+
+	int offs = READ_LE_UINT32(charset + chr * 4 + 4);
+	if (offs) {
+		spacing = charset[offs];
+		if (charset[offs + 2] >= 0x80) {
+			spacing += charset[offs + 2] - 0x100;
+		} else {
+			spacing += charset[offs + 2];
 		}
 	}
+	
+	return spacing;
+}
+
+int CharsetRendererOld256::getSpacing(byte chr, byte *charset)
+{
+	int spacing = 0;
+	
+	spacing = *(charset - 11 + chr);
 
 	// FIXME - this fixes the inventory icons in Zak256/Indy3
 	//  see bug #613109.
@@ -173,7 +178,7 @@
 }
 
 
-void CharsetRenderer::printCharOld(int chr)
+void CharsetRendererOld256::printChar(int chr)
 {																// Indy3 / Zak256
 	VirtScreen *vs;
 	byte *char_ptr, *dest_ptr;
@@ -223,7 +228,7 @@
 }
 
 
-void CharsetRenderer::printChar(int chr)
+void CharsetRendererClassic::printChar(int chr)
 {
 	int width, height;
 	int offsX, offsY;
@@ -339,7 +344,7 @@
 	_top -= offsY;
 }
 
-void CharsetRenderer::drawBits(VirtScreen *vs, byte *dst, byte *mask, int drawTop, int width, int height)
+void CharsetRendererClassic::drawBits(VirtScreen *vs, byte *dst, byte *mask, int drawTop, int width, int height)
 {
 	byte maskmask;
 	int y, x;

Index: charset.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/charset.h,v
retrieving revision 2.3
retrieving revision 2.4
diff -u -d -r2.3 -r2.4
--- charset.h	25 Dec 2002 21:42:22 -0000	2.3
+++ charset.h	25 Dec 2002 21:57:01 -0000	2.4
@@ -54,18 +54,15 @@
 	byte _curId;
 	byte *_fontPtr;
 
-	byte _bpp;
-	byte *_charPtr;
-
-	void drawBits(VirtScreen *vs, byte *dst, byte *mask, int drawTop, int width, int height);
 	byte *getFontPtr(byte id);
 
+	virtual int getSpacing(byte chr, byte *charset) = 0;
+
 public:
 	CharsetRenderer(Scumm *vm) : _vm(vm) {}
 
-	void printChar(int chr);
-	void printCharOld(int chr);
-	int getSpacing(byte chr, byte *charset);
+	virtual void printChar(int chr) = 0;
+
 	int getStringWidth(int a, byte *str);
 	void addLinebreaks(int a, byte *str, int pos, int maxwidth);
 	
@@ -73,6 +70,32 @@
 	int getCurID() { return _curId; }
 	
 	int getFontHeight() { return _fontPtr[1]; }
+};
+
+
+class CharsetRendererClassic : public CharsetRenderer {
+protected:
+	byte _bpp;
+	byte *_charPtr;
+
+	int getSpacing(byte chr, byte *charset);
+	void drawBits(VirtScreen *vs, byte *dst, byte *mask, int drawTop, int width, int height);
+
+public:
+	CharsetRendererClassic(Scumm *vm) : CharsetRenderer(vm) {}
+	
+	void printChar(int chr);
+};
+
+
+class CharsetRendererOld256 : public CharsetRenderer {
+protected:
+	int getSpacing(byte chr, byte *charset);
+
+public:
+	CharsetRendererOld256(Scumm *vm) : CharsetRenderer(vm) {}
+	
+	void printChar(int chr);
 };
 
 

Index: scummvm.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/scummvm.cpp,v
retrieving revision 2.10
retrieving revision 2.11
diff -u -d -r2.10 -r2.11
--- scummvm.cpp	25 Dec 2002 21:42:22 -0000	2.10
+++ scummvm.cpp	25 Dec 2002 21:57:01 -0000	2.11
@@ -1552,7 +1552,10 @@
 
 void Scumm::launch()
 {
-	_charset = new CharsetRenderer(this);
+	if (_features & GF_OLD256)
+		_charset = new CharsetRendererOld256(this);
+	else
+		_charset = new CharsetRendererClassic(this);
 
 	gdi._vm = this;
 

Index: string.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/string.cpp,v
retrieving revision 1.64
retrieving revision 1.65
diff -u -d -r1.64 -r1.65
--- string.cpp	25 Dec 2002 21:42:22 -0000	1.64
+++ string.cpp	25 Dec 2002 21:57:01 -0000	1.65
@@ -243,7 +243,7 @@
 			_charset->_left = _charset->_nextLeft;
 			_charset->_top = _charset->_nextTop;
 			if (_features & GF_OLD256) {
-				_charset->printCharOld(c);
+				_charset->printChar(c);
 			} else if (_features & GF_AFTER_V6) {
 				if (!_noSubtitles || (_haveMsg != 0xFE && _haveMsg != 0xFF))
 					_charset->printChar(c);
@@ -526,10 +526,7 @@
 				if (_string[a].no_talk_anim == 0)
 					_charset->_blitAlso = true;
 			}
-			if (_features & GF_OLD256)
-				_charset->printCharOld(chr);
-			else
-				_charset->printChar(chr);
+			_charset->printChar(chr);
 			_charset->_blitAlso = false;
 		}
 	}





More information about the Scummvm-git-logs mailing list