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

m_kiewitz at users.sourceforge.net m_kiewitz at users.sourceforge.net
Thu Oct 8 13:23:53 CEST 2009


Revision: 44782
          http://scummvm.svn.sourceforge.net/scummvm/?rev=44782&view=rev
Author:   m_kiewitz
Date:     2009-10-08 11:23:53 +0000 (Thu, 08 Oct 2009)

Log Message:
-----------
SCI/newgui: kAnimate - _delete invoking implemented

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

Modified: scummvm/trunk/engines/sci/gui/gui.cpp
===================================================================
--- scummvm/trunk/engines/sci/gui/gui.cpp	2009-10-08 10:35:12 UTC (rev 44781)
+++ scummvm/trunk/engines/sci/gui/gui.cpp	2009-10-08 11:23:53 UTC (rev 44782)
@@ -414,7 +414,7 @@
 
 	//_gfx->AnimateUpdateScreen();
 	_screen->copyToScreen();
-	_gfx->AnimateRestoreAndDelete();
+	_gfx->AnimateRestoreAndDelete(list, argc, argv);
 
 	_gfx->SetPort(oldPort);
 }

Modified: scummvm/trunk/engines/sci/gui/gui_gfx.cpp
===================================================================
--- scummvm/trunk/engines/sci/gui/gui_gfx.cpp	2009-10-08 10:35:12 UTC (rev 44781)
+++ scummvm/trunk/engines/sci/gui/gui_gfx.cpp	2009-10-08 11:23:53 UTC (rev 44782)
@@ -1076,7 +1076,8 @@
 	SCI_ANIMATE_MASK_ALWAYSUPDATE  = 0x0020,
 	SCI_ANIMATE_MASK_FORCEUPDATE   = 0x0040,
 	SCI_ANIMATE_MASK_REMOVEVIEW    = 0x0080,
-	SCI_ANIMATE_MASK_FROZEN        = 0x0100
+	SCI_ANIMATE_MASK_FROZEN        = 0x0100,
+	SCI_ANIMATE_MASK_DISPOSEME     = 0x8000
 };
 
 void SciGuiGfx::AnimateInvoke(List *list, int argc, reg_t *argv) {
@@ -1259,7 +1260,25 @@
 	}
 }
 
-void SciGuiGfx::AnimateRestoreAndDelete() {
+void SciGuiGfx::AnimateRestoreAndDelete(List *list, int argc, reg_t *argv) {
+	SegManager *segMan = _s->_segMan;
+	reg_t curAddress = list->first;
+	Node *curNode = _s->_segMan->lookupNode(curAddress);
+	reg_t curObject;
+	uint16 mask;
+
+	while (curNode) {
+		curObject = curNode->value;
+		mask = GET_SEL32V(curObject, signal);
+		if (mask & SCI_ANIMATE_MASK_DISPOSEME) {
+			// Call .delete_ method of that object
+			invoke_selector(_s, curObject, _s->_kernel->_selectorCache.delete_, kContinueOnInvalidSelector, argv, argc, __FILE__, __LINE__, 0);
+			// Lookup node again, since the nodetable it was in may have been reallocated
+			curNode = _s->_segMan->lookupNode(curAddress);
+		}
+		curAddress = curNode->succ;
+		curNode = _s->_segMan->lookupNode(curAddress);
+	}
 }
 
 void SciGuiGfx::SetNowSeen(reg_t objectReference) {

Modified: scummvm/trunk/engines/sci/gui/gui_gfx.h
===================================================================
--- scummvm/trunk/engines/sci/gui/gui_gfx.h	2009-10-08 10:35:12 UTC (rev 44781)
+++ scummvm/trunk/engines/sci/gui/gui_gfx.h	2009-10-08 11:23:53 UTC (rev 44782)
@@ -110,7 +110,7 @@
 	Common::List<GuiAnimateList> *AnimateMakeSortedList(List *list);
 	void AnimateUpdate();
 	void AnimateDrawCels(List *list);
-	void AnimateRestoreAndDelete();
+	void AnimateRestoreAndDelete(List *list, int argc, reg_t *argv);
 	void SetNowSeen(reg_t objectReference);
 
 	GuiPort *_menuPort;


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