diff options
author | Paul Gilbert | 2016-04-03 16:16:35 -0400 |
---|---|---|
committer | Paul Gilbert | 2016-04-03 16:16:35 -0400 |
commit | 1efbed540948edcbf3ac2c72c0984def044274cf (patch) | |
tree | 63b4543753951b55c756a9b81cd5df5ab2718943 /engines/titanic/support/mouse_cursor.cpp | |
parent | 432153274385295a9a4eb01e56bfcc72cc5f202e (diff) | |
download | scummvm-rg350-1efbed540948edcbf3ac2c72c0984def044274cf.tar.gz scummvm-rg350-1efbed540948edcbf3ac2c72c0984def044274cf.tar.bz2 scummvm-rg350-1efbed540948edcbf3ac2c72c0984def044274cf.zip |
TITANIC: Move most of the root classes into new support/ folder
Diffstat (limited to 'engines/titanic/support/mouse_cursor.cpp')
-rw-r--r-- | engines/titanic/support/mouse_cursor.cpp | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/engines/titanic/support/mouse_cursor.cpp b/engines/titanic/support/mouse_cursor.cpp new file mode 100644 index 0000000000..dda16c3b93 --- /dev/null +++ b/engines/titanic/support/mouse_cursor.cpp @@ -0,0 +1,113 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "graphics/cursorman.h" +#include "common/textconsole.h" +#include "titanic/support/mouse_cursor.h" +#include "titanic/support/movie.h" +#include "titanic/support/screen_manager.h" +#include "titanic/titanic.h" +#include "titanic/support/video_surface.h" +#include "titanic/core/resource_key.h" + +namespace Titanic { + +static const int CURSOR_DATA[NUM_CURSORS][4] = { + { 1, 136, 19, 18 }, + { 2, 139, 1, 1 }, + { 3, 140, 32, 1 }, + { 4, 137, 13, 0 }, + { 5, 145, 13, 0 }, + { 6, 144, 13, 22 }, + { 7, 137, 14, 0 }, + { 8, 148, 22, 40 }, + { 9, 136, 19, 18 }, + { 10, 143, 11, 11 }, + { 11, 146, 11, 11 }, + { 12, 136, 19, 18 }, + { 13, 136, 19, 25 }, + { 14, 136, 13, 22 }, + { 15, 138, 20, 28 } +}; + +CMouseCursor::CMouseCursor(CScreenManager *screenManager) : + _screenManager(screenManager), _cursorId(CURSOR_15) { + loadCursorImages(); + setCursor(CURSOR_1); +} + +CMouseCursor::~CMouseCursor() { + for (int idx = 0; idx < NUM_CURSORS; ++idx) + delete _cursors[idx]._videoSurface; +} + +void CMouseCursor::loadCursorImages() { + const CString name("ycursors.avi"); + const CResourceKey key(name); + g_vm->_filesManager.fn4(name); + + // Iterate through each cursor + for (int idx = 0; idx < NUM_CURSORS; ++idx) { + assert(CURSOR_DATA[idx][0] == (idx + 1)); + _cursors[idx]._centroid = Common::Point(CURSOR_DATA[idx][2], + CURSOR_DATA[idx][3]); + + CVideoSurface *surface = _screenManager->createSurface(64, 64); + _cursors[idx]._videoSurface = surface; + + OSMovie movie(key, surface); + movie.setFrame(idx); + _cursors[idx]._ptrUnknown = movie.proc21(); + surface->set40(_cursors[idx]._ptrUnknown); + } +} + +void CMouseCursor::show() { + CursorMan.showMouse(true); +} + +void CMouseCursor::hide() { + CursorMan.showMouse(false); +} + +void CMouseCursor::setCursor(CursorId cursorId) { + if (cursorId != _cursorId) { + CursorEntry &ce = _cursors[cursorId - 1]; + CVideoSurface &surface = *ce._videoSurface; + surface.lock(); + + // ***DEBUG*** Dummy cursor + Common::fill(surface.getPixels(), surface.getPixels() + 128, 0x5555); + + CursorMan.replaceCursor(surface.getPixels(), surface.getWidth(), surface.getHeight(), + ce._centroid.x, ce._centroid.y, 0, false, &g_vm->_screen->format); + surface.unlock(); + + _cursorId = cursorId; + } +} + +void CMouseCursor::update() { + // No implementation needed +} + +} // End of namespace Titanic |