[Scummvm-git-logs] scummvm master -> 5f93dd7cd9b5b0b108bc863d3e72ca71e8982c85

ysj1173886760 42030331+ysj1173886760 at users.noreply.github.com
Mon Aug 16 00:42:24 UTC 2021


This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
8e9f802e87 DIRECTOR: introduce winCursor to director. Loading win cursor at initially.
2472c763be DIRECTOR: try to load custom cursor from exe file in win platform.
5f93dd7cd9 DIRECTOR: set arrow cursor for default custom cursor in windows platform.


Commit: 8e9f802e87af962213758f6a84c3e03a3aaaeaa7
    https://github.com/scummvm/scummvm/commit/8e9f802e87af962213758f6a84c3e03a3aaaeaa7
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-08-16T08:41:36+08:00

Commit Message:
DIRECTOR: introduce winCursor to director. Loading win cursor at initially.

Changed paths:
    engines/director/director.cpp
    engines/director/director.h
    engines/director/resource.cpp


diff --git a/engines/director/director.cpp b/engines/director/director.cpp
index 367578e2b1..99f6646ded 100644
--- a/engines/director/director.cpp
+++ b/engines/director/director.cpp
@@ -129,6 +129,9 @@ DirectorEngine::~DirectorEngine() {
 		delete it->_value;
 	}
 
+	for (Common::HashMap<uint, Graphics::Cursor *>::iterator it = _winCursor.begin(); it != _winCursor.end(); it++)
+		delete it->_value;
+
 	clearPalettes();
 }
 
diff --git a/engines/director/director.h b/engines/director/director.h
index 2ac178ec37..5d35b892bd 100644
--- a/engines/director/director.h
+++ b/engines/director/director.h
@@ -258,6 +258,7 @@ public:
 	char _dirSeparator;
 
 	Common::HashMap<Common::String, Archive *, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> _openResFiles;
+	Common::HashMap<uint, Graphics::Cursor *> _winCursor;
 
 protected:
 	Common::Error run() override;
diff --git a/engines/director/resource.cpp b/engines/director/resource.cpp
index 86ebf44009..e50b74c632 100644
--- a/engines/director/resource.cpp
+++ b/engines/director/resource.cpp
@@ -26,6 +26,7 @@
 #include "common/macresman.h"
 #include "common/substream.h"
 #include "common/winexe.h"
+#include "graphics/wincursor.h"
 
 #include "director/director.h"
 #include "director/cast.h"
@@ -235,6 +236,15 @@ void Window::loadEXE(const Common::String movie) {
 			delete info;
 
 		}
+
+		Common::Array<Common::WinResourceID> idList = exe->getIDList(Common::kWinGroupCursor);
+		for (uint i = 0; i < idList.size(); i++) {
+			Graphics::WinCursorGroup *group = Graphics::WinCursorGroup::createCursorGroup(exe, idList[i]);
+			for (uint j = 0; j < group->cursors.size(); j++) {
+				g_director->_winCursor.setVal(group->cursors[j].id.getID(), group->cursors[j].cursor);
+			}
+		}
+
 		delete exe;
 
 		exeStream->seek(-4, SEEK_END);


Commit: 2472c763be15320ba457379b161352175dbd8027
    https://github.com/scummvm/scummvm/commit/2472c763be15320ba457379b161352175dbd8027
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-08-16T08:41:36+08:00

Commit Message:
DIRECTOR: try to load custom cursor from exe file in win platform.

Changed paths:
    engines/director/cursor.cpp
    engines/director/score.cpp


diff --git a/engines/director/cursor.cpp b/engines/director/cursor.cpp
index ea852e2234..3e2d4b9cda 100644
--- a/engines/director/cursor.cpp
+++ b/engines/director/cursor.cpp
@@ -184,6 +184,16 @@ void Cursor::readFromResource(int resourceId) {
 			}
 		}
 
+		// for win platform, try the cursor from exe
+		if (!readSuccessful && g_director->getPlatform() == Common::kPlatformWindows) {
+			// i'm not sure, in jman we have cursor id 2, 3, 4. and custom cursor id 128 129 130
+			int id = (resourceId & 0x7f) + 2;
+			if (g_director->_winCursor.contains(id)) {
+				resetCursor(Graphics::kMacCursorCustom, false, id);
+				readSuccessful = true;
+			}
+		}
+
 		// fallback method. try to use builtin cursor by regarding resourceId as a single byte.
 		if (!readSuccessful)
 			readBuiltinType(resourceId & 0x7f);
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index 519bcca0e1..fba7be37fc 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -598,7 +598,11 @@ void Score::renderCursor(Common::Point pos, bool forceUpdate) {
 			if (!forceUpdate && _currentCursor == _channels[spriteId]->_cursor)
 				return;
 
-			_vm->_wm->replaceCursor(_channels[spriteId]->_cursor._cursorType, &_channels[spriteId]->_cursor);
+			// try to use the cursor read from exe file.
+			if (g_director->getPlatform() == Common::kPlatformWindows && _channels[spriteId]->_cursor._cursorType == Graphics::kMacCursorCustom)
+				_vm->_wm->replaceCursor(_channels[spriteId]->_cursor._cursorType, g_director->_winCursor[_channels[spriteId]->_cursor._cursorResId]);
+			else
+				_vm->_wm->replaceCursor(_channels[spriteId]->_cursor._cursorType, &_channels[spriteId]->_cursor);
 			_currentCursor = _channels[spriteId]->_cursor.getRef();
 			return;
 		}


Commit: 5f93dd7cd9b5b0b108bc863d3e72ca71e8982c85
    https://github.com/scummvm/scummvm/commit/5f93dd7cd9b5b0b108bc863d3e72ca71e8982c85
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-08-16T08:41:36+08:00

Commit Message:
DIRECTOR: set arrow cursor for default custom cursor in windows platform.

Changed paths:
    engines/director/cursor.cpp


diff --git a/engines/director/cursor.cpp b/engines/director/cursor.cpp
index 3e2d4b9cda..04b5ad57da 100644
--- a/engines/director/cursor.cpp
+++ b/engines/director/cursor.cpp
@@ -184,6 +184,13 @@ void Cursor::readFromResource(int resourceId) {
 			}
 		}
 
+		// TODO: figure out where to read custom cursor in windows platform
+		// currently, let's just set arrow for default one.
+		if (g_director->getPlatform() == Common::kPlatformWindows) {
+			resetCursor(Graphics::kMacCursorArrow, true, resourceId);
+			break;
+		}
+
 		// for win platform, try the cursor from exe
 		if (!readSuccessful && g_director->getPlatform() == Common::kPlatformWindows) {
 			// i'm not sure, in jman we have cursor id 2, 3, 4. and custom cursor id 128 129 130




More information about the Scummvm-git-logs mailing list