aboutsummaryrefslogtreecommitdiff
path: root/engines/zvision
diff options
context:
space:
mode:
authorrichiesams2013-08-11 13:42:00 -0500
committerrichiesams2013-08-11 13:42:00 -0500
commitf6033afa0252384e618adebd0f1aef5867a312f8 (patch)
tree69b8b9988ead3e0b2a2eb9d83f21e6b69f858057 /engines/zvision
parentbd4e6e0c1873d6a1fe387114d06ec95a0756a2db (diff)
downloadscummvm-rg350-f6033afa0252384e618adebd0f1aef5867a312f8.tar.gz
scummvm-rg350-f6033afa0252384e618adebd0f1aef5867a312f8.tar.bz2
scummvm-rg350-f6033afa0252384e618adebd0f1aef5867a312f8.zip
ZVISION: Change CursorManager to go through CursorMan instead going directly to OSystem
This had to be done so the cursor didn't disappear after the user went to GMM or debug console
Diffstat (limited to 'engines/zvision')
-rw-r--r--engines/zvision/cursor_manager.cpp29
-rw-r--r--engines/zvision/cursor_manager.h9
2 files changed, 27 insertions, 11 deletions
diff --git a/engines/zvision/cursor_manager.cpp b/engines/zvision/cursor_manager.cpp
index 0115ec9d3c..6f60ddf018 100644
--- a/engines/zvision/cursor_manager.cpp
+++ b/engines/zvision/cursor_manager.cpp
@@ -24,6 +24,7 @@
#include "common/system.h"
#include "graphics/pixelformat.h"
+#include "graphics/cursorman.h"
#include "zvision/zvision.h"
#include "zvision/cursor_manager.h"
@@ -44,8 +45,7 @@ const char *CursorManager::_zNemCursorFileNames[] = { "00act", "arrow", "back",
CursorManager::CursorManager(ZVision *engine, const Graphics::PixelFormat *pixelFormat)
: _engine(engine),
_pixelFormat(pixelFormat),
- _cursorIsPushed(false),
- _currentCursor("idle") {
+ _cursorIsPushed(false) {
// WARNING: The index 11 is hardcoded. If you change the order of _cursorNames/_zgiCursorFileNames/_zNemCursorFileNames, you HAVE to change the index accordingly
if (_engine->getGameId() == ZorkNemesis) {
Common::String name(Common::String::format("%sa.zcr", _zNemCursorFileNames[11]));
@@ -53,15 +53,20 @@ CursorManager::CursorManager(ZVision *engine, const Graphics::PixelFormat *pixel
} else if (_engine->getGameId() == ZorkGrandInquisitor) {
_idleCursor = ZorkCursor(_zgiCursorFileNames[11]);
}
+ revertToIdle();
}
void CursorManager::initialize() {
- _engine->_system->setMouseCursor(_idleCursor.getSurface(), _idleCursor.getWidth(), _idleCursor.getHeight(), _idleCursor.getHotspotX(), _idleCursor.getHotspotY(), _idleCursor.getKeyColor(), false, _pixelFormat);
- _engine->_system->showMouse(true);
+ CursorMan.showMouse(true);
}
-void CursorManager::changeCursor(Common::String &cursorName, bool pushed) {
- _cursorIsPushed = pushed;
+void CursorManager::changeCursor(const Common::String &cursorName) {
+ changeCursor(cursorName, _cursorIsPushed);
+}
+
+void CursorManager::changeCursor(const Common::String &cursorName, bool pushed) {
+ if (_cursorIsPushed != pushed)
+ _cursorIsPushed = pushed;
if (cursorName == "idle" && !pushed) {
revertToIdle();
@@ -71,7 +76,9 @@ void CursorManager::changeCursor(Common::String &cursorName, bool pushed) {
// WARNING: The range of this loop is hardcoded to the length of _cursorNames
for (int i = 0; i < 18; i++) {
if (_engine->getGameId() == ZorkNemesis) {
- if (_cursorNames[i] == cursorName) {
+ if (cursorName.equals(_cursorNames[i])) {
+ _currentCursor = cursorName;
+
// ZNem uses a/b at the end of the file to signify not pushed/pushed respectively
Common::String pushedFlag = pushed ? "b" : "a";
Common::String name = Common::String::format("%s%s.zcr", _zNemCursorFileNames[i], pushedFlag.c_str());
@@ -80,7 +87,9 @@ void CursorManager::changeCursor(Common::String &cursorName, bool pushed) {
return;
}
} else if (_engine->getGameId() == ZorkGrandInquisitor) {
- if (_cursorNames[i] == cursorName) {
+ if (cursorName.equals(_cursorNames[i])) {
+ _currentCursor = cursorName;
+
if (!pushed) {
changeCursor(ZorkCursor(_zgiCursorFileNames[i]));
} else {
@@ -100,7 +109,7 @@ void CursorManager::changeCursor(Common::String &cursorName, bool pushed) {
}
void CursorManager::changeCursor(const ZorkCursor &cursor) {
- _engine->_system->setMouseCursor(cursor.getSurface(), cursor.getWidth(), cursor.getHeight(), cursor.getHotspotX(), cursor.getHotspotY(), cursor.getKeyColor(), false, _pixelFormat);
+ CursorMan.replaceCursor(cursor.getSurface(), cursor.getWidth(), cursor.getHeight(), cursor.getHotspotX(), cursor.getHotspotY(), cursor.getKeyColor(), false, _pixelFormat);
}
void CursorManager::cursorDown(bool pushed) {
@@ -113,7 +122,7 @@ void CursorManager::cursorDown(bool pushed) {
void CursorManager::revertToIdle() {
_currentCursor = "idle";
- _engine->_system->setMouseCursor(_idleCursor.getSurface(), _idleCursor.getWidth(), _idleCursor.getHeight(), _idleCursor.getHotspotX(), _idleCursor.getHotspotY(), _idleCursor.getKeyColor(), false, _pixelFormat);
+ CursorMan.replaceCursor(_idleCursor.getSurface(), _idleCursor.getWidth(), _idleCursor.getHeight(), _idleCursor.getHotspotX(), _idleCursor.getHotspotY(), _idleCursor.getKeyColor(), false, _pixelFormat);
}
} // End of namespace ZVision
diff --git a/engines/zvision/cursor_manager.h b/engines/zvision/cursor_manager.h
index 914538591d..9f624c82cc 100644
--- a/engines/zvision/cursor_manager.h
+++ b/engines/zvision/cursor_manager.h
@@ -36,6 +36,12 @@ namespace ZVision {
class ZVision;
+/**
+ * Class to manage cursor changes. The actual changes have to be done
+ * through CursorMan. Otherwise the cursor will disappear after GMM
+ * or debug console.
+ * TODO: Figure out a way to get rid of the extraneous data copying due to having to use CursorMan
+ */
class CursorManager {
public:
CursorManager(ZVision *engine, const Graphics::PixelFormat *pixelFormat);
@@ -54,7 +60,8 @@ private:
public:
void initialize();
- void changeCursor(Common::String &cursorName, bool pushed);
+ void changeCursor(const Common::String &cursorName);
+ void changeCursor(const Common::String &cursorName, bool pushed);
void cursorDown(bool pushed);
void revertToIdle();