[Scummvm-git-logs] scummvm master -> 1f9e8a8a34ce4a752b814082201f53d326c9ab20
sev-
noreply at scummvm.org
Sun Dec 24 01:57:21 UTC 2023
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
1f9e8a8a34 DIRECTOR: Made certain window operations load the movie immediately
Commit: 1f9e8a8a34ce4a752b814082201f53d326c9ab20
https://github.com/scummvm/scummvm/commit/1f9e8a8a34ce4a752b814082201f53d326c9ab20
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2023-12-24T02:56:30+01:00
Commit Message:
DIRECTOR: Made certain window operations load the movie immediately
Changed paths:
engines/director/lingo/lingo-code.cpp
engines/director/lingo/lingo-object.cpp
engines/director/window.cpp
engines/director/window.h
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index f657f4e710b..bb2d4846a5b 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -1451,11 +1451,13 @@ void LC::c_tell() {
warning("LC::c_tell(): wrong argument type: %s", window.type2str());
return;
}
- if (static_cast<Window *>(window.u.obj)->getCurrentMovie() == nullptr) {
+ Window *w = static_cast<Window *>(window.u.obj);
+ w->ensureMovieIsLoaded();
+ if (w->getCurrentMovie() == nullptr) {
warning("LC::c_tell(): window has no movie");
return;
}
- g_director->setCurrentWindow(static_cast<Window *>(window.u.obj));
+ g_director->setCurrentWindow(w);
}
diff --git a/engines/director/lingo/lingo-object.cpp b/engines/director/lingo/lingo-object.cpp
index 7a27ea7c29a..755d5b383f3 100644
--- a/engines/director/lingo/lingo-object.cpp
+++ b/engines/director/lingo/lingo-object.cpp
@@ -639,6 +639,12 @@ Datum Window::getField(int field) {
return getModal();
case kTheFileName:
return getFileName();
+ case kTheDrawRect:
+ case kTheSourceRect:
+ // case kTheImage:
+ // case kThePicture::
+ ensureMovieIsLoaded(); // Remove fallthrough once implemented
+ // fallthrough
default:
warning("Window::getField: unhandled field '%s'", g_lingo->field2str(field));
return Datum();
@@ -725,6 +731,9 @@ void LM::m_moveToBack(int nargs) {
void LM::m_moveToFront(int nargs) {
g_lingo->printSTUBWithArglist("m_moveToFront", nargs);
+
+ Window *me = static_cast<Window *>(g_lingo->_state->me.u.obj);
+ me->ensureMovieIsLoaded();
g_lingo->dropStack(nargs);
}
diff --git a/engines/director/window.cpp b/engines/director/window.cpp
index 2ec12b6e37f..701e5494dd1 100644
--- a/engines/director/window.cpp
+++ b/engines/director/window.cpp
@@ -239,6 +239,8 @@ void Window::setTitleVisible(bool titleVisible) {
}
Datum Window::getStageRect() {
+ ensureMovieIsLoaded();
+
Common::Rect rect = getInnerDimensions();
Datum d;
d.type = RECT;
@@ -260,6 +262,8 @@ bool Window::setStageRect(Datum datum) {
// Unpack rect from datum
Common::Rect rect = Common::Rect(datum.u.farr->arr[0].asInt(), datum.u.farr->arr[1].asInt(), datum.u.farr->arr[2].asInt(), datum.u.farr->arr[3].asInt());
+ ensureMovieIsLoaded();
+
setInnerDimensions(rect);
return true;
@@ -277,6 +281,7 @@ void Window::setModal(bool modal) {
void Window::setFileName(Common::String filename) {
setNextMovie(filename);
+ ensureMovieIsLoaded();
}
void Window::reset() {
@@ -323,17 +328,29 @@ Common::Point Window::getMousePos() {
void Window::setVisible(bool visible, bool silent) {
// setting visible triggers movie load
- if (!_currentMovie && !silent) {
+ if (!_currentMovie && !silent)
+ ensureMovieIsLoaded();
+
+ BaseMacWindow::setVisible(visible);
+
+ if (visible)
+ _wm->setActiveWindow(_id);
+}
+
+void Window::ensureMovieIsLoaded() {
+ if (!_currentMovie) {
if (_fileName.empty()) {
Common::String movieName = getName();
setNextMovie(movieName);
}
}
- BaseMacWindow::setVisible(visible);
+ if (_nextMovie.movie.empty()) {
+ warning("Window::ensureMovieIsLoaded(): No movie to load");
+ return;
+ }
- if (visible)
- _wm->setActiveWindow(_id);
+ loadNextMovie();
}
bool Window::setNextMovie(Common::String &movieFilenameRaw) {
@@ -418,6 +435,8 @@ bool Window::loadNextMovie() {
archivePath.appendInPlace(Common::lastPathComponent(_nextMovie.movie, g_director->_dirSeparator));
Archive *mov = g_director->openArchive(archivePath);
+ _nextMovie.movie.clear(); // Clearing it, so we will not attempt to load again
+
if (!mov)
return false;
@@ -429,7 +448,6 @@ bool Window::loadNextMovie() {
debug(0, "@@@@ Switching to movie '%s' in '%s'", utf8ToPrintable(_currentMovie->getMacName()).c_str(), _currentPath.c_str());
debug(0, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
- g_lingo->resetLingo();
loadNewSharedCast(previousSharedCast);
return true;
}
@@ -456,7 +474,8 @@ bool Window::step() {
if (!_nextMovie.movie.empty()) {
if (!loadNextMovie())
return (_vm->getGameGID() == GID_TESTALL);
- _nextMovie.movie.clear();
+
+ g_lingo->resetLingo();
}
// play current movie
diff --git a/engines/director/window.h b/engines/director/window.h
index 6368e99eb53..689a6a79e55 100644
--- a/engines/director/window.h
+++ b/engines/director/window.h
@@ -137,6 +137,8 @@ public:
void setVisible(bool visible, bool silent = false) override;
bool setNextMovie(Common::String &movieFilenameRaw);
+ void ensureMovieIsLoaded();
+
void setWindowType(int type) { _windowType = type; updateBorderType(); }
int getWindowType() const { return _windowType; }
void setTitleVisible(bool titleVisible) override;
More information about the Scummvm-git-logs
mailing list