aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/gui
diff options
context:
space:
mode:
authorMartin Kiewitz2009-11-30 19:34:45 +0000
committerMartin Kiewitz2009-11-30 19:34:45 +0000
commitdf422c0894e7d7cfc0520ae91b1a1acfb582d3a1 (patch)
tree429a72981bb379a643781e7800940af8351cdc7c /engines/sci/gui
parente557075e9059278e7d7dc8354c2d32e12e333463 (diff)
downloadscummvm-rg350-df422c0894e7d7cfc0520ae91b1a1acfb582d3a1.tar.gz
scummvm-rg350-df422c0894e7d7cfc0520ae91b1a1acfb582d3a1.tar.bz2
scummvm-rg350-df422c0894e7d7cfc0520ae91b1a1acfb582d3a1.zip
SCI: Fix kSetCursor (Sci1.1) to behave like Sierra Sci (fixes cursor hiding/showing in kq6)
svn-id: r46224
Diffstat (limited to 'engines/sci/gui')
-rw-r--r--engines/sci/gui/gui.cpp7
-rw-r--r--engines/sci/gui/gui_cursor.cpp8
-rw-r--r--engines/sci/gui/gui_cursor.h3
3 files changed, 16 insertions, 2 deletions
diff --git a/engines/sci/gui/gui.cpp b/engines/sci/gui/gui.cpp
index aa621496e9..2cc361f348 100644
--- a/engines/sci/gui/gui.cpp
+++ b/engines/sci/gui/gui.cpp
@@ -583,12 +583,15 @@ uint16 SciGui::onControl(byte screenMask, Common::Rect rect) {
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) {
diff --git a/engines/sci/gui/gui_cursor.cpp b/engines/sci/gui/gui_cursor.cpp
index b6b25628b6..cf6256640f 100644
--- a/engines/sci/gui/gui_cursor.cpp
+++ b/engines/sci/gui/gui_cursor.cpp
@@ -43,6 +43,8 @@ SciGuiCursor::SciGuiCursor(ResourceManager *resMan, SciGuiPalette *palette, SciG
// 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,10 +53,16 @@ SciGuiCursor::~SciGuiCursor() {
void SciGuiCursor::show() {
CursorMan.showMouse(true);
+ _isVisible = true;
}
void SciGuiCursor::hide() {
CursorMan.showMouse(false);
+ _isVisible = false;
+}
+
+bool SciGuiCursor::isVisible() {
+ return _isVisible;
}
void SciGuiCursor::purgeCache() {
diff --git a/engines/sci/gui/gui_cursor.h b/engines/sci/gui/gui_cursor.h
index 3cb9a3e537..293c508bdb 100644
--- a/engines/sci/gui/gui_cursor.h
+++ b/engines/sci/gui/gui_cursor.h
@@ -49,6 +49,7 @@ public:
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 @@ private:
Common::Rect _moveZone; // Rectangle in which the pointer can move
CursorCache _cachedCursors;
+
+ bool _isVisible;
};
} // End of namespace Sci