[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