GRAPHICS: Add a version of CursorManager::replaceCursor that accepts a Graphics::Cursor

This commit is contained in:
Cameron Cawley 2019-08-09 20:45:27 +01:00 committed by Filippos Karapetis
parent 4667aae4c4
commit fe5dddf901
7 changed files with 27 additions and 23 deletions

View File

@ -105,9 +105,7 @@ Common::Error ComposerEngine::run() {
_screen.create(width, height, Graphics::PixelFormat::createFormatCLUT8());
Graphics::Cursor *cursor = Graphics::makeDefaultWinCursor();
CursorMan.replaceCursor(cursor->getSurface(), cursor->getWidth(), cursor->getHeight(), cursor->getHotspotX(),
cursor->getHotspotY(), cursor->getKeyColor());
CursorMan.replaceCursorPalette(cursor->getPalette(), cursor->getPaletteStartIndex(), cursor->getPaletteCount());
CursorMan.replaceCursor(cursor);
delete cursor;
_console = new Console(this);

View File

@ -252,14 +252,12 @@ bool CryOmni3DEngine::displayHLZ(const Common::String &filename, uint32 timeout)
}
void CryOmni3DEngine::setCursor(const Graphics::Cursor &cursor) const {
CursorMan.replaceCursor(cursor.getSurface(), cursor.getWidth(), cursor.getHeight(),
cursor.getHotspotX(), cursor.getHotspotY(), cursor.getKeyColor());
CursorMan.replaceCursor(&cursor);
}
void CryOmni3DEngine::setCursor(uint cursorId) const {
const Graphics::Cursor &cursor = _sprites.getCursor(cursorId);
CursorMan.replaceCursor(cursor.getSurface(), cursor.getWidth(), cursor.getHeight(),
cursor.getHotspotX(), cursor.getHotspotY(), cursor.getKeyColor());
CursorMan.replaceCursor(&cursor);
}
bool CryOmni3DEngine::pollEvents() {

View File

@ -547,9 +547,7 @@ void GnapEngine::setCursor(int cursorIndex) {
Graphics::WinCursorGroup *cursorGroup = Graphics::WinCursorGroup::createCursorGroup(*_exe, Common::WinResourceID(cursorName));
if (cursorGroup) {
Graphics::Cursor *cursor = cursorGroup->cursors[0].cursor;
CursorMan.replaceCursor(cursor->getSurface(), cursor->getWidth(), cursor->getHeight(),
cursor->getHotspotX(), cursor->getHotspotY(), cursor->getKeyColor());
CursorMan.replaceCursorPalette(cursor->getPalette(), 0, 256);
CursorMan.replaceCursor(cursor);
delete cursorGroup;
}
_cursorIndex = cursorIndex;

View File

@ -51,9 +51,7 @@ void CursorManager::hideCursor() {
void CursorManager::setDefaultCursor() {
Graphics::Cursor *cursor = Graphics::makeDefaultWinCursor();
CursorMan.replaceCursor(cursor->getSurface(), cursor->getWidth(), cursor->getHeight(), cursor->getHotspotX(),
cursor->getHotspotY(), cursor->getKeyColor());
CursorMan.replaceCursorPalette(cursor->getPalette(), cursor->getPaletteStartIndex(), cursor->getPaletteCount());
CursorMan.replaceCursor(cursor);
delete cursor;
}
@ -71,9 +69,7 @@ void CursorManager::setMacCursor(Common::SeekableReadStream *stream) {
if (!macCursor->readFromStream(*stream))
error("Could not parse Mac cursor");
CursorMan.replaceCursor(macCursor->getSurface(), macCursor->getWidth(), macCursor->getHeight(),
macCursor->getHotspotX(), macCursor->getHotspotY(), macCursor->getKeyColor());
CursorMan.replaceCursorPalette(macCursor->getPalette(), 0, 256);
CursorMan.replaceCursor(macCursor);
delete macCursor;
delete stream;
@ -165,8 +161,7 @@ void NECursorManager::setCursor(uint16 id) {
if (cursorGroup) {
Graphics::Cursor *cursor = cursorGroup->cursors[0].cursor;
CursorMan.replaceCursor(cursor->getSurface(), cursor->getWidth(), cursor->getHeight(), cursor->getHotspotX(), cursor->getHotspotY(), cursor->getKeyColor());
CursorMan.replaceCursorPalette(cursor->getPalette(), 0, 256);
CursorMan.replaceCursor(cursor);
delete cursorGroup;
return;
}
@ -272,8 +267,7 @@ void PECursorManager::setCursor(uint16 id) {
for (uint i = 0; i < _cursors.size(); i++) {
if (_cursors[i].id == id) {
Graphics::Cursor *cursor = _cursors[i].cursorGroup->cursors[0].cursor;
CursorMan.replaceCursor(cursor->getSurface(), cursor->getWidth(), cursor->getHeight(), cursor->getHotspotX(), cursor->getHotspotY(), cursor->getKeyColor());
CursorMan.replaceCursorPalette(cursor->getPalette(), 0, 256);
CursorMan.replaceCursor(cursor);
return;
}
}

View File

@ -514,9 +514,7 @@ void GfxCursor::kernelSetMacCursor(GuiResourceId viewNum, int loopNum, int celNu
return;
}
CursorMan.replaceCursor(macCursor->getSurface(), macCursor->getWidth(), macCursor->getHeight(),
macCursor->getHotspotX(), macCursor->getHotspotY(), macCursor->getKeyColor());
CursorMan.replaceCursorPalette(macCursor->getPalette(), 0, 256);
CursorMan.replaceCursor(macCursor);
delete macCursor;
kernelShow();

View File

@ -147,6 +147,14 @@ void CursorManager::replaceCursor(const void *buf, uint w, uint h, int hotspotX,
g_system->setMouseCursor(cur->_data, w, h, hotspotX, hotspotY, keycolor, dontScale, format);
}
void CursorManager::replaceCursor(const Graphics::Cursor *cursor) {
replaceCursor(cursor->getSurface(), cursor->getWidth(), cursor->getHeight(), cursor->getHotspotX(),
cursor->getHotspotY(), cursor->getKeyColor());
if (cursor->getPalette())
replaceCursorPalette(cursor->getPalette(), cursor->getPaletteStartIndex(), cursor->getPaletteCount());
}
bool CursorManager::supportsCursorPalettes() {
return g_system->hasFeature(OSystem::kFeatureCursorPalette);
}

View File

@ -26,6 +26,7 @@
#include "common/scummsys.h"
#include "common/stack.h"
#include "common/singleton.h"
#include "graphics/cursor.h"
#include "graphics/pixelformat.h"
namespace Graphics {
@ -99,6 +100,15 @@ public:
*/
void replaceCursor(const void *buf, uint w, uint h, int hotspotX, int hotspotY, uint32 keycolor, bool dontScale = false, const Graphics::PixelFormat *format = NULL);
/**
* Replace the current cursor on the stack. If the stack is empty, the
* cursor is pushed instead. It's a slightly more optimized way of
* popping the old cursor before pushing the new one.
*
* @param cursor the new cursor
*/
void replaceCursor(const Graphics::Cursor *cursor);
/**
* Pop all of the cursors and cursor palettes from their respective stacks.
* The purpose is to ensure that all unecessary cursors are removed from the