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

m_kiewitz at users.sourceforge.net m_kiewitz at users.sourceforge.net
Sat Oct 17 23:11:56 CEST 2009


Revision: 45202
          http://scummvm.svn.sourceforge.net/scummvm/?rev=45202&view=rev
Author:   m_kiewitz
Date:     2009-10-17 21:11:56 +0000 (Sat, 17 Oct 2009)

Log Message:
-----------
SCI/newgui: kDisplay restoreUnder completed

Modified Paths:
--------------
    scummvm/trunk/engines/sci/gui/gui.cpp
    scummvm/trunk/engines/sci/gui/gui_gfx.cpp
    scummvm/trunk/engines/sci/gui/gui_gfx.h
    scummvm/trunk/engines/sci/gui/gui_screen.cpp
    scummvm/trunk/engines/sci/gui/gui_screen.h

Modified: scummvm/trunk/engines/sci/gui/gui.cpp
===================================================================
--- scummvm/trunk/engines/sci/gui/gui.cpp	2009-10-17 20:42:19 UTC (rev 45201)
+++ scummvm/trunk/engines/sci/gui/gui.cpp	2009-10-17 21:11:56 UTC (rev 45202)
@@ -223,10 +223,10 @@
 			doSaveUnder = true;
 			break;
 		case SCI_DISPLAY_RESTOREUNDER:
-			// TODO: get rect from SciMemoryHandle (argv[0])
-			//rect.translate(-_gfx->GetPort()->left, -_gfx->GetPort()->top);
+			_gfx->BitsGetRect(argv[0], &rect);
+			rect.translate(-_gfx->GetPort()->left, -_gfx->GetPort()->top);
 			_gfx->BitsRestore(argv[0]);
-			// TODO: ReAnimate(pArgs)
+			_animate->reAnimate(rect);
 			// finishing loop
 			argc = 0;
 			break;

Modified: scummvm/trunk/engines/sci/gui/gui_gfx.cpp
===================================================================
--- scummvm/trunk/engines/sci/gui/gui_gfx.cpp	2009-10-17 20:42:19 UTC (rev 45201)
+++ scummvm/trunk/engines/sci/gui/gui_gfx.cpp	2009-10-17 21:11:56 UTC (rev 45202)
@@ -588,15 +588,14 @@
 	PenColor(orgPenColor);
 }
 
-// Update (part of) screen
-void SciGuiGfx::BitsShow(const Common::Rect &r) {
-	Common::Rect rect(r.left, r.top, r.right, r.bottom);
-	rect.clip(_curPort->rect);
-	if (rect.isEmpty()) // nothing to show
+void SciGuiGfx::BitsShow(const Common::Rect &rect) {
+	Common::Rect workerRect(rect.left, rect.top, rect.right, rect.bottom);
+	workerRect.clip(_curPort->rect);
+	if (workerRect.isEmpty()) // nothing to show
 		return;
 
-	OffsetRect(rect);
-	_screen->copyRectToScreen(rect);
+	OffsetRect(workerRect);
+	_screen->copyRectToScreen(workerRect);
 }
 
 GuiMemoryHandle SciGuiGfx::BitsSave(const Common::Rect &rect, byte screenMask) {
@@ -604,22 +603,34 @@
 	byte *memoryPtr;
 	int size;
 
-	Common::Rect r(rect.left, rect.top, rect.right, rect.bottom);
-	r.clip(_curPort->rect);
-	if (r.isEmpty()) // nothing to save
+	Common::Rect workerRect(rect.left, rect.top, rect.right, rect.bottom);
+	workerRect.clip(_curPort->rect);
+	if (workerRect.isEmpty()) // nothing to save
 		return NULL_REG;
 
-	OffsetRect(r); //local port coords to screen coords
+	OffsetRect(workerRect);
 
 	// now actually ask _screen how much space it will need for saving
-	size = _screen->getBitsDataSize(r, screenMask);
+	size = _screen->bitsGetDataSize(workerRect, screenMask);
 
 	memoryId = kalloc(_s->_segMan, "SaveBits()", size);
 	memoryPtr = kmem(_s->_segMan, memoryId);
-	_screen->saveBits(r, screenMask, memoryPtr);
+	_screen->bitsSave(workerRect, screenMask, memoryPtr);
 	return memoryId;
 }
 
+void SciGuiGfx::BitsGetRect(GuiMemoryHandle memoryHandle, Common::Rect *destRect) {
+	byte *memoryPtr = NULL;
+
+	if (!memoryHandle.isNull()) {
+		memoryPtr = kmem(_s->_segMan, memoryHandle);;
+
+		if (memoryPtr) {
+			_screen->bitsGetRect(memoryPtr, destRect);
+		}
+	}
+}
+
 void SciGuiGfx::BitsRestore(GuiMemoryHandle memoryHandle) {
 	byte *memoryPtr = NULL;
 
@@ -627,7 +638,7 @@
 		memoryPtr = kmem(_s->_segMan, memoryHandle);;
 
 		if (memoryPtr) {
-			_screen->restoreBits(memoryPtr);
+			_screen->bitsRestore(memoryPtr);
 			kfree(_s->_segMan, memoryHandle);
 		}
 	}

Modified: scummvm/trunk/engines/sci/gui/gui_gfx.h
===================================================================
--- scummvm/trunk/engines/sci/gui/gui_gfx.h	2009-10-17 20:42:19 UTC (rev 45201)
+++ scummvm/trunk/engines/sci/gui/gui_gfx.h	2009-10-17 21:11:56 UTC (rev 45202)
@@ -90,6 +90,7 @@
 	void TextBox(const char *str, int16 bshow, const Common::Rect &rect, int16 align, GuiResourceId fontId);
 	void BitsShow(const Common::Rect &r);
 	GuiMemoryHandle BitsSave(const Common::Rect &rect, byte screenFlags);
+	void BitsGetRect(GuiMemoryHandle memoryHandle, Common::Rect *destRect);
 	void BitsRestore(GuiMemoryHandle memoryHandle);
 	void BitsFree(GuiMemoryHandle memoryHandle);
 

Modified: scummvm/trunk/engines/sci/gui/gui_screen.cpp
===================================================================
--- scummvm/trunk/engines/sci/gui/gui_screen.cpp	2009-10-17 20:42:19 UTC (rev 45201)
+++ scummvm/trunk/engines/sci/gui/gui_screen.cpp	2009-10-17 21:11:56 UTC (rev 45202)
@@ -194,7 +194,7 @@
 	return match;
 }
 
-int SciGuiScreen::getBitsDataSize(Common::Rect rect, byte mask) {
+int SciGuiScreen::bitsGetDataSize(Common::Rect rect, byte mask) {
 	int byteCount = sizeof(rect) + sizeof(mask);
 	int pixels = rect.width() * rect.height();
 	if (mask & SCI_SCREEN_MASK_VISUAL) {
@@ -211,23 +211,23 @@
 	return byteCount;
 }
 
-void SciGuiScreen::saveBits(Common::Rect rect, byte mask, byte *memoryPtr) {
+void SciGuiScreen::bitsSave(Common::Rect rect, byte mask, byte *memoryPtr) {
 	memcpy(memoryPtr, (void *)&rect, sizeof(rect)); memoryPtr += sizeof(rect);
 	memcpy(memoryPtr, (void *)&mask, sizeof(mask)); memoryPtr += sizeof(mask);
 
 	if (mask & SCI_SCREEN_MASK_VISUAL) {
-		saveBitsScreen(rect, _visualScreen, memoryPtr);
-		saveBitsScreen(rect, _displayScreen, memoryPtr);
+		bitsSaveScreen(rect, _visualScreen, memoryPtr);
+		bitsSaveScreen(rect, _displayScreen, memoryPtr);
 	}
 	if (mask & SCI_SCREEN_MASK_PRIORITY) {
-		saveBitsScreen(rect, _priorityScreen, memoryPtr);
+		bitsSaveScreen(rect, _priorityScreen, memoryPtr);
 	}
 	if (mask & SCI_SCREEN_MASK_CONTROL) {
-		saveBitsScreen(rect, _controlScreen, memoryPtr);
+		bitsSaveScreen(rect, _controlScreen, memoryPtr);
 	}
 }
 
-void SciGuiScreen::saveBitsScreen(Common::Rect rect, byte *screen, byte *&memoryPtr) {
+void SciGuiScreen::bitsSaveScreen(Common::Rect rect, byte *screen, byte *&memoryPtr) {
 	int width = rect.width();
 	int y;
 
@@ -239,7 +239,11 @@
 	}
 }
 
-void SciGuiScreen::restoreBits(byte *memoryPtr) {
+void SciGuiScreen::bitsGetRect(byte *memoryPtr, Common::Rect *destRect) {
+	memcpy((void *)destRect, memoryPtr, sizeof(Common::Rect));
+}
+
+void SciGuiScreen::bitsRestore(byte *memoryPtr) {
 	Common::Rect rect;
 	byte mask;
 
@@ -247,18 +251,18 @@
 	memcpy((void *)&mask, memoryPtr, sizeof(mask)); memoryPtr += sizeof(mask);
 
 	if (mask & SCI_SCREEN_MASK_VISUAL) {
-		restoreBitsScreen(rect, memoryPtr, _visualScreen);
-		restoreBitsScreen(rect, memoryPtr, _displayScreen);
+		bitsRestoreScreen(rect, memoryPtr, _visualScreen);
+		bitsRestoreScreen(rect, memoryPtr, _displayScreen);
 	}
 	if (mask & SCI_SCREEN_MASK_PRIORITY) {
-		restoreBitsScreen(rect, memoryPtr, _priorityScreen);
+		bitsRestoreScreen(rect, memoryPtr, _priorityScreen);
 	}
 	if (mask & SCI_SCREEN_MASK_CONTROL) {
-		restoreBitsScreen(rect, memoryPtr, _controlScreen);
+		bitsRestoreScreen(rect, memoryPtr, _controlScreen);
 	}
 }
 
-void SciGuiScreen::restoreBitsScreen(Common::Rect rect, byte *&memoryPtr, byte *screen) {
+void SciGuiScreen::bitsRestoreScreen(Common::Rect rect, byte *&memoryPtr, byte *screen) {
 	int width = rect.width();
 	int y;
 

Modified: scummvm/trunk/engines/sci/gui/gui_screen.h
===================================================================
--- scummvm/trunk/engines/sci/gui/gui_screen.h	2009-10-17 20:42:19 UTC (rev 45201)
+++ scummvm/trunk/engines/sci/gui/gui_screen.h	2009-10-17 21:11:56 UTC (rev 45202)
@@ -61,9 +61,10 @@
 	byte getControl(int x, int y);
 	byte isFillMatch(int16 x, int16 y, byte drawMask, byte t_color, byte t_pri, byte t_con);
 
-	int getBitsDataSize(Common::Rect rect, byte mask);
-	void saveBits(Common::Rect rect, byte mask, byte *memoryPtr);
-	void restoreBits(byte *memoryPtr);
+	int bitsGetDataSize(Common::Rect rect, byte mask);
+	void bitsSave(Common::Rect rect, byte mask, byte *memoryPtr);
+	void bitsGetRect(byte *memoryPtr, Common::Rect *destRect);
+	void bitsRestore(byte *memoryPtr);
 
 	void setPalette(GuiPalette*pal);
 
@@ -85,8 +86,8 @@
 	int _picNotValid; // possible values 0, 1 and 2
 
 private:
-	void restoreBitsScreen(Common::Rect rect, byte *&memoryPtr, byte *screen);
-	void saveBitsScreen(Common::Rect rect, byte *screen, byte *&memoryPtr);
+	void bitsRestoreScreen(Common::Rect rect, byte *&memoryPtr, byte *screen);
+	void bitsSaveScreen(Common::Rect rect, byte *screen, byte *&memoryPtr);
 
 	bool _unditherState;
 	int16 _unditherMemorial[SCI_SCREEN_UNDITHERMEMORIAL_SIZE];


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