[Scummvm-cvs-logs] SF.net SVN: scummvm:[47125] scummvm/trunk/engines/sci

m_kiewitz at users.sourceforge.net m_kiewitz at users.sourceforge.net
Thu Jan 7 16:51:02 CET 2010


Revision: 47125
          http://scummvm.svn.sourceforge.net/scummvm/?rev=47125&view=rev
Author:   m_kiewitz
Date:     2010-01-07 15:50:58 +0000 (Thu, 07 Jan 2010)

Log Message:
-----------
SCI: fixed save/restorebits within screen class for displayscreen case, fixes kq6 menu bar

Modified Paths:
--------------
    scummvm/trunk/engines/sci/engine/kgraphics.cpp
    scummvm/trunk/engines/sci/graphics/gfx.cpp
    scummvm/trunk/engines/sci/graphics/screen.cpp
    scummvm/trunk/engines/sci/graphics/screen.h

Modified: scummvm/trunk/engines/sci/engine/kgraphics.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kgraphics.cpp	2010-01-07 15:38:29 UTC (rev 47124)
+++ scummvm/trunk/engines/sci/engine/kgraphics.cpp	2010-01-07 15:50:58 UTC (rev 47125)
@@ -266,6 +266,7 @@
 
 	case K_GRAPH_UPDATE_BOX:
 		kGraphCreateRect(x, y, x1, y1, &rect);
+		// argc == 7 on upscaled hires
 		s->_gui->graphUpdateBox(rect);
 		break;
 

Modified: scummvm/trunk/engines/sci/graphics/gfx.cpp
===================================================================
--- scummvm/trunk/engines/sci/graphics/gfx.cpp	2010-01-07 15:38:29 UTC (rev 47124)
+++ scummvm/trunk/engines/sci/graphics/gfx.cpp	2010-01-07 15:50:58 UTC (rev 47125)
@@ -277,6 +277,12 @@
 
 	OffsetRect(workerRect);
 
+	if (screenMask == SCI_SCREEN_MASK_DISPLAY) {
+		// Adjust rect to upscaled hires
+		workerRect.top *= 2; workerRect.bottom *= 2; workerRect.bottom++;
+		workerRect.left *= 2; workerRect.right *= 2; workerRect.right++;
+	}
+
 	// now actually ask _screen how much space it will need for saving
 	size = _screen->bitsGetDataSize(workerRect, screenMask);
 
@@ -383,8 +389,8 @@
 		// adjust curPort to upscaled hires
 		clipRect = celRect;
 		curPortRect = _curPort->rect;
-		curPortRect.top *= 2; curPortRect.bottom *= 2;
-		curPortRect.left *= 2; curPortRect.right *= 2;
+		curPortRect.top *= 2; curPortRect.bottom *= 2; curPortRect.bottom++;
+		curPortRect.left *= 2; curPortRect.right *= 2; curPortRect.right++;
 		clipRect.clip(curPortRect);
 		if (clipRect.isEmpty()) // nothing to draw
 			return;

Modified: scummvm/trunk/engines/sci/graphics/screen.cpp
===================================================================
--- scummvm/trunk/engines/sci/graphics/screen.cpp	2010-01-07 15:38:29 UTC (rev 47124)
+++ scummvm/trunk/engines/sci/graphics/screen.cpp	2010-01-07 15:50:58 UTC (rev 47125)
@@ -280,31 +280,31 @@
 	memcpy(memoryPtr, (void *)&mask, sizeof(mask)); memoryPtr += sizeof(mask);
 
 	if (mask & SCI_SCREEN_MASK_VISUAL) {
-		bitsSaveScreen(rect, _visualScreen, memoryPtr);
+		bitsSaveScreen(rect, _visualScreen, _width, memoryPtr);
 		bitsSaveDisplayScreen(rect, memoryPtr);
 	}
 	if (mask & SCI_SCREEN_MASK_PRIORITY) {
-		bitsSaveScreen(rect, _priorityScreen, memoryPtr);
+		bitsSaveScreen(rect, _priorityScreen, _width, memoryPtr);
 	}
 	if (mask & SCI_SCREEN_MASK_CONTROL) {
-		bitsSaveScreen(rect, _controlScreen, memoryPtr);
+		bitsSaveScreen(rect, _controlScreen, _width, memoryPtr);
 	}
 	if (mask & SCI_SCREEN_MASK_DISPLAY) {
 		if (!_upscaledHires)
 			error("bitsSave() called w/o being in upscaled hires mode");
-		bitsSaveScreen(rect, _displayScreen, memoryPtr);
+		bitsSaveScreen(rect, _displayScreen, _displayWidth, memoryPtr);
 	}
 }
 
-void Screen::bitsSaveScreen(Common::Rect rect, byte *screen, byte *&memoryPtr) {
+void Screen::bitsSaveScreen(Common::Rect rect, byte *screen, uint16 screenWidth, byte *&memoryPtr) {
 	int width = rect.width();
 	int y;
 
-	screen += (rect.top * _width) + rect.left;
+	screen += (rect.top * screenWidth) + rect.left;
 
 	for (y = rect.top; y < rect.bottom; y++) {
 		memcpy(memoryPtr, (void*)screen, width); memoryPtr += width;
-		screen += _width;
+		screen += screenWidth;
 	}
 }
 
@@ -339,31 +339,31 @@
 	memcpy((void *)&mask, memoryPtr, sizeof(mask)); memoryPtr += sizeof(mask);
 
 	if (mask & SCI_SCREEN_MASK_VISUAL) {
-		bitsRestoreScreen(rect, memoryPtr, _visualScreen);
+		bitsRestoreScreen(rect, memoryPtr, _visualScreen, _width);
 		bitsRestoreDisplayScreen(rect, memoryPtr);
 	}
 	if (mask & SCI_SCREEN_MASK_PRIORITY) {
-		bitsRestoreScreen(rect, memoryPtr, _priorityScreen);
+		bitsRestoreScreen(rect, memoryPtr, _priorityScreen, _width);
 	}
 	if (mask & SCI_SCREEN_MASK_CONTROL) {
-		bitsRestoreScreen(rect, memoryPtr, _controlScreen);
+		bitsRestoreScreen(rect, memoryPtr, _controlScreen, _width);
 	}
 	if (mask & SCI_SCREEN_MASK_DISPLAY) {
 		if (!_upscaledHires)
 			error("bitsRestore() called w/o being in upscaled hires mode");
-		bitsRestoreScreen(rect, memoryPtr, _displayScreen);
+		bitsRestoreScreen(rect, memoryPtr, _displayScreen, _displayWidth);
 	}
 }
 
-void Screen::bitsRestoreScreen(Common::Rect rect, byte *&memoryPtr, byte *screen) {
+void Screen::bitsRestoreScreen(Common::Rect rect, byte *&memoryPtr, byte *screen, uint16 screenWidth) {
 	int width = rect.width();
 	int y;
 
-	screen += (rect.top * _width) + rect.left;
+	screen += (rect.top * screenWidth) + rect.left;
 
 	for (y = rect.top; y < rect.bottom; y++) {
 		memcpy((void*) screen, memoryPtr, width); memoryPtr += width;
-		screen += _width;
+		screen += screenWidth;
 	}
 }
 

Modified: scummvm/trunk/engines/sci/graphics/screen.h
===================================================================
--- scummvm/trunk/engines/sci/graphics/screen.h	2010-01-07 15:38:29 UTC (rev 47124)
+++ scummvm/trunk/engines/sci/graphics/screen.h	2010-01-07 15:50:58 UTC (rev 47125)
@@ -106,9 +106,9 @@
 	byte _colorWhite;
 	byte _colorDefaultVectorData;
 
-	void bitsRestoreScreen(Common::Rect rect, byte *&memoryPtr, byte *screen);
+	void bitsRestoreScreen(Common::Rect rect, byte *&memoryPtr, byte *screen, uint16 screenWidth);
 	void bitsRestoreDisplayScreen(Common::Rect rect, byte *&memoryPtr);
-	void bitsSaveScreen(Common::Rect rect, byte *screen, byte *&memoryPtr);
+	void bitsSaveScreen(Common::Rect rect, byte *screen, uint16 screenWidth, byte *&memoryPtr);
 	void bitsSaveDisplayScreen(Common::Rect rect, byte *&memoryPtr);
 
 	bool _unditherState;


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list