[Scummvm-git-logs] scummvm master -> 07926d263c8051dfa66251dce7f88e07e4af1786
sev-
noreply at scummvm.org
Sun Aug 31 20:06:43 UTC 2025
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
3ffcf1de96 DIRECTOR: Use Common::Rect32 for CastInfo's xtraRect
07926d263c GRAPHICS: MACGUI: Do not try to open heavy font archives over and over again
Commit: 3ffcf1de960adf6d902060208da78c6acea3106d
https://github.com/scummvm/scummvm/commit/3ffcf1de960adf6d902060208da78c6acea3106d
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-08-31T21:47:58+02:00
Commit Message:
DIRECTOR: Use Common::Rect32 for CastInfo's xtraRect
Changed paths:
engines/director/cast.cpp
engines/director/castmember/castmember.h
diff --git a/engines/director/cast.cpp b/engines/director/cast.cpp
index 06dd7cd665b..8dc766ad01e 100644
--- a/engines/director/cast.cpp
+++ b/engines/director/cast.cpp
@@ -1037,7 +1037,10 @@ void Cast::writeCastInfo(Common::SeekableWriteStream *writeStream, uint32 castId
case 12:
castInfo.strings[12].data = (byte *)malloc(castInfo.strings[12].len);
- memcpy(castInfo.strings[12].data, ci->xtraRect.data(), castInfo.strings[12].len);
+ WRITE_BE_INT32(castInfo.strings[12].data, ci->xtraRect.top);
+ WRITE_BE_INT32(castInfo.strings[12].data + 4, ci->xtraRect.left);
+ WRITE_BE_INT32(castInfo.strings[12].data + 8, ci->xtraRect.bottom);
+ WRITE_BE_INT32(castInfo.strings[12].data + 12, ci->xtraRect.right);
break;
case 13:
@@ -1230,7 +1233,7 @@ uint32 Cast::getCastInfoStringLength(uint32 stringIndex, CastMemberInfo *ci) {
return ci->bpTable.size();
case 12:
- return ci->xtraRect.size();
+ return 16;
case 13:
return 8;
@@ -1956,7 +1959,10 @@ void Cast::loadCastInfo(Common::SeekableReadStreamEndian &stream, uint16 id) {
if (castInfo.strings[12].len) {
warning("Cast::loadCastInfo(): BUILDBOT: xtraRect for castid %d", id);
Common::hexdump(castInfo.strings[12].data, castInfo.strings[12].len);
- ci->xtraRect = Common::Array<byte>(castInfo.strings[12].data, castInfo.strings[12].len);
+ ci->xtraRect.top = READ_BE_INT32(castInfo.strings[12].data);
+ ci->xtraRect.left = READ_BE_INT32(castInfo.strings[12].data + 4);
+ ci->xtraRect.bottom = READ_BE_INT32(castInfo.strings[12].data + 8);
+ ci->xtraRect.right = READ_BE_INT32(castInfo.strings[12].data + 12);
dumpS = "xtraRect: <data> " + dumpS;
}
diff --git a/engines/director/castmember/castmember.h b/engines/director/castmember/castmember.h
index 0d332741539..f5815b55953 100644
--- a/engines/director/castmember/castmember.h
+++ b/engines/director/castmember/castmember.h
@@ -182,7 +182,7 @@ struct CastMemberInfo {
byte xtraGuid[16]; // 9
Common::String xtraDisplayName;
Common::Array<byte> bpTable; // (removed on protecting)
- Common::Array<byte> xtraRect; // Rect32
+ Common::Rect32 xtraRect; // Rect32
Common::Rect scriptRect; // (removed on protecting)
Common::Array<byte> dvWindowInfo; // (removed on protecting)
byte guid[16]; // 15 Seems to be a GUID
Commit: 07926d263c8051dfa66251dce7f88e07e4af1786
https://github.com/scummvm/scummvm/commit/07926d263c8051dfa66251dce7f88e07e4af1786
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2025-08-31T22:04:18+02:00
Commit Message:
GRAPHICS: MACGUI: Do not try to open heavy font archives over and over again
If we did not find a specific font and went to fallback, we were still
going thorugh all the hoops every time. That included opening and parsing
both of our heavy font archives.
Now we store nullptr if we tried a font but did not found, and cache that.
It is most prominent when a Director movie is referring to a missing font,
every text member was trying hard to find that font.
Changed paths:
graphics/macgui/macfontmanager.cpp
diff --git a/graphics/macgui/macfontmanager.cpp b/graphics/macgui/macfontmanager.cpp
index 187ea3b8cd9..dbae867cf63 100644
--- a/graphics/macgui/macfontmanager.cpp
+++ b/graphics/macgui/macfontmanager.cpp
@@ -559,7 +559,7 @@ const Font *MacFontManager::getFont(MacFont *macFont) {
#ifdef USE_FREETYPE2
if (!font && !(_mode & MacGUIConstants::kWMModeForceMacFonts)) {
- if (_uniFontRegistry.contains(macFont->getName())) {
+ if (_uniFontRegistry.contains(macFont->getName()) && _uniFontRegistry[macFont->getName()]) {
return _uniFontRegistry[macFont->getName()];
}
@@ -568,26 +568,29 @@ const Font *MacFontManager::getFont(MacFont *macFont) {
int newSlant = macFont->getSlant();
int familyId = getFamilyId(newId, newSlant);
- if ((_mode & kWMModeUnicode) &&
+ if (_uniFontRegistry.contains(macFont->getName())) {
+ // It is nullptr, meaning that we did not find this font earlier,
+ // So skip through all of this and go directly to fallback (next code block)
+ } else if ((_mode & kWMModeUnicode) &&
(((!_fontInfo.contains(familyId))) || (_mode & kWMModeForceMacFontsInWin95))) {
if (macFont->getSize() <= 0) {
debugC(1, kDebugLevelMacGUI, "MacFontManager::getFont() - Font size <= 0!");
}
font = Graphics::loadTTFFontFromArchive("LiberationSans-Regular.ttf", macFont->getSize(), Graphics::kTTFSizeModeCharacter, 0, 0, Graphics::kTTFRenderModeMonochrome);
- if (font)
- _uniFontRegistry.setVal(macFont->getName(), font);
+ _uniFontRegistry.setVal(macFont->getName(), font);
} else if (_fontInfo.contains(familyId)) {
font = Graphics::loadTTFFontFromArchive(_fontInfo[familyId]->name, macFont->getSize(), Graphics::kTTFSizeModeCharacter, 0, 0, Graphics::kTTFRenderModeMonochrome);
- if (font)
- _uniFontRegistry.setVal(macFont->getName(), font);
+
+ // We may get nullptr from here, so storing it to avoid multiple tries
+ _uniFontRegistry.setVal(macFont->getName(), font);
} else {
font = Graphics::loadTTFFontFromArchive("LiberationSans-Regular.ttf", macFont->getSize(), Graphics::kTTFSizeModeCharacter, 0, 0, Graphics::kTTFRenderModeMonochrome);
- if (font)
- _uniFontRegistry.setVal(macFont->getName(), font);
+ _uniFontRegistry.setVal(macFont->getName(), font);
}
}
#endif
+ // We found no font, so switching to a safe fallback
if (!font) {
font = macFont->getFallback();
More information about the Scummvm-git-logs
mailing list