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

m_kiewitz at users.sourceforge.net m_kiewitz at users.sourceforge.net
Mon Nov 30 20:34:45 CET 2009


Revision: 46224
          http://scummvm.svn.sourceforge.net/scummvm/?rev=46224&view=rev
Author:   m_kiewitz
Date:     2009-11-30 19:34:45 +0000 (Mon, 30 Nov 2009)

Log Message:
-----------
SCI: Fix kSetCursor (Sci1.1) to behave like Sierra Sci (fixes cursor hiding/showing in kq6)

Modified Paths:
--------------
    scummvm/trunk/engines/sci/engine/kgraphics.cpp
    scummvm/trunk/engines/sci/gui/gui.cpp
    scummvm/trunk/engines/sci/gui/gui_cursor.cpp
    scummvm/trunk/engines/sci/gui/gui_cursor.h

Modified: scummvm/trunk/engines/sci/engine/kgraphics.cpp
===================================================================
--- scummvm/trunk/engines/sci/engine/kgraphics.cpp	2009-11-30 17:24:33 UTC (rev 46223)
+++ scummvm/trunk/engines/sci/engine/kgraphics.cpp	2009-11-30 19:34:45 UTC (rev 46224)
@@ -110,11 +110,20 @@
 
 	switch (argc) {
 	case 1:
-		if (argv[0].isNull())
+		switch (argv[0].toSint16()) {
+		case 0:
 			s->_gui->hideCursor();
-		else
+			break;
+		case -1:
+			// TODO: Special case at least in kq6, check disassembly
+			break;
+		case -2:
+			// TODO: Special case at least in kq6, check disassembly
+			break;
+		default:
 			s->_gui->showCursor();
-		break;
+			break;
+		}
 	case 2:
 		pos.y = argv[1].toSint16();
 		pos.x = argv[0].toSint16();
@@ -986,8 +995,6 @@
 	if (argc == 1)
 		return NULL_REG;
 
-	s->_gui->hideCursor();
-
 	// The Windows and DOS versions use different video format as well
 	// as a different argument set.
 	if (argv[0].toUint16() == 0) {
@@ -1021,8 +1028,6 @@
 		delete seqDecoder;
 	}
 
-	s->_gui->showCursor();
-
 	return s->r_acc;
 }
 

Modified: scummvm/trunk/engines/sci/gui/gui.cpp
===================================================================
--- scummvm/trunk/engines/sci/gui/gui.cpp	2009-11-30 17:24:33 UTC (rev 46223)
+++ scummvm/trunk/engines/sci/gui/gui.cpp	2009-11-30 19:34:45 UTC (rev 46224)
@@ -583,12 +583,15 @@
 void SciGui::animateShowPic() {
 	GuiPort *picPort = _windowMgr->_picWind;
 	Common::Rect picRect = picPort->rect;
+	bool previousCursorState = _cursor->isVisible();
 
-	_cursor->hide();
+	if (previousCursorState)
+		_cursor->hide();
 	// Adjust picRect to become relative to screen
 	picRect.translate(picPort->left, picPort->top);
 	_transitions->doit(picRect);
-	_cursor->show();
+	if (previousCursorState)
+		_cursor->show();
 }
 
 void SciGui::animate(reg_t listReference, bool cycle, int argc, reg_t *argv) {

Modified: scummvm/trunk/engines/sci/gui/gui_cursor.cpp
===================================================================
--- scummvm/trunk/engines/sci/gui/gui_cursor.cpp	2009-11-30 17:24:33 UTC (rev 46223)
+++ scummvm/trunk/engines/sci/gui/gui_cursor.cpp	2009-11-30 19:34:45 UTC (rev 46224)
@@ -43,6 +43,8 @@
 	// center mouse cursor
 	setPosition(Common::Point(_screen->_displayWidth / 2, _screen->_displayHeight / 2));
 	setMoveZone(Common::Rect(0, 0, _screen->_displayWidth, _screen->_displayHeight));
+
+	_isVisible = true;
 }
 
 SciGuiCursor::~SciGuiCursor() {
@@ -51,12 +53,18 @@
 
 void SciGuiCursor::show() {
 	CursorMan.showMouse(true);
+	_isVisible = true;
 }
 
 void SciGuiCursor::hide() {
 	CursorMan.showMouse(false);
+	_isVisible = false;
 }
 
+bool SciGuiCursor::isVisible() {
+	return _isVisible;
+}
+
 void SciGuiCursor::purgeCache() {
 	for (CursorCache::iterator iter = _cachedCursors.begin(); iter != _cachedCursors.end(); ++iter) {
 		delete iter->_value;

Modified: scummvm/trunk/engines/sci/gui/gui_cursor.h
===================================================================
--- scummvm/trunk/engines/sci/gui/gui_cursor.h	2009-11-30 17:24:33 UTC (rev 46223)
+++ scummvm/trunk/engines/sci/gui/gui_cursor.h	2009-11-30 19:34:45 UTC (rev 46224)
@@ -49,6 +49,7 @@
 
 	void show();
 	void hide();
+	bool isVisible();
 	void setShape(GuiResourceId resourceId);
 	void setView(GuiResourceId viewNum, int loopNum, int celNum, Common::Point *hotspot);
 	void setPosition(Common::Point pos);
@@ -74,6 +75,8 @@
 	Common::Rect _moveZone; // Rectangle in which the pointer can move
 
 	CursorCache _cachedCursors;
+
+	bool _isVisible;
 };
 
 } // End of namespace Sci


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