[Scummvm-git-logs] scummvm master -> 0b82839b44b15ee62b45660fea13dddb407deb97
djsrv
dservilla at gmail.com
Fri Jul 10 00:18:30 UTC 2020
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
f04cd38da4 DIRECTOR: LINGO: Don't load movie in b_window
0b82839b44 DIRECTOR: LINGO: Fix window fields
Commit: f04cd38da40d320d6110853f2cb79a3348bcd630
https://github.com/scummvm/scummvm/commit/f04cd38da40d320d6110853f2cb79a3348bcd630
Author: djsrv (dservilla at gmail.com)
Date: 2020-07-09T20:17:58-04:00
Commit Message:
DIRECTOR: LINGO: Don't load movie in b_window
The visibility needs to be set without loading the movie.
Changed paths:
engines/director/lingo/lingo-builtins.cpp
engines/director/stage.cpp
engines/director/stage.h
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index b6e06976c8..0099f8423d 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -2199,7 +2199,7 @@ void LB::b_window(int nargs) {
Stage *window = new Stage(wm->getNextId(), false, false, false, wm, g_director);
window->setName(windowName);
window->resize(1, 1, true);
- window->setVisible(false);
+ window->setVisible(false, true);
wm->addWindowInitialized(window);
windowList->push_back(window);
g_lingo->push(window);
diff --git a/engines/director/stage.cpp b/engines/director/stage.cpp
index e058309cd1..6f5d1d4b5c 100644
--- a/engines/director/stage.cpp
+++ b/engines/director/stage.cpp
@@ -290,9 +290,9 @@ Common::Point Stage::getMousePos() {
return g_system->getEventManager()->getMousePos() - Common::Point(_innerDims.left, _innerDims.top);
}
-void Stage::setVisible(bool visible) {
+void Stage::setVisible(bool visible, bool silent) {
// setting visible triggers movie load
- if (!_currentMovie) {
+ if (!_currentMovie && !silent) {
Common::String movieName = getName();
setNextMovie(movieName);
}
diff --git a/engines/director/stage.h b/engines/director/stage.h
index ae849f6d83..0687666eca 100644
--- a/engines/director/stage.h
+++ b/engines/director/stage.h
@@ -114,7 +114,7 @@ class Stage : public Graphics::MacWindow, public Object<Stage> {
Movie *getCurrentMovie() const { return _currentMovie; }
Common::String getCurrentPath() const { return _currentPath; }
- virtual void setVisible(bool visible);
+ virtual void setVisible(bool visible, bool silent = false);
bool setNextMovie(Common::String &movieFilenameRaw);
bool step();
Commit: 0b82839b44b15ee62b45660fea13dddb407deb97
https://github.com/scummvm/scummvm/commit/0b82839b44b15ee62b45660fea13dddb407deb97
Author: djsrv (dservilla at gmail.com)
Date: 2020-07-09T20:17:58-04:00
Commit Message:
DIRECTOR: LINGO: Fix window fields
Changed paths:
engines/director/lingo/lingo-object.cpp
engines/director/lingo/lingo-object.h
engines/director/lingo/lingo-the.cpp
engines/director/stage.h
diff --git a/engines/director/lingo/lingo-object.cpp b/engines/director/lingo/lingo-object.cpp
index 1e2cc97d1e..aa908032c5 100644
--- a/engines/director/lingo/lingo-object.cpp
+++ b/engines/director/lingo/lingo-object.cpp
@@ -324,34 +324,44 @@ bool Stage::hasProp(const Common::String &propName) {
}
Datum Stage::getProp(const Common::String &propName) {
- if (g_lingo->_theEntityFields.contains(propName)) {
- switch (g_lingo->_theEntityFields[propName]->field) {
- case kTheVisible:
- return isVisible();
- default:
- break;
- }
+ if (g_lingo->_theEntityFields.contains(propName) && g_lingo->_theEntityFields[propName]->entity == kTheWindow) {
+ return getField(g_lingo->_theEntityFields[propName]->field);
}
- warning("Stage::getProp: unhandled property '%s'", propName.c_str());
+ warning("Stage::getProp: unknown property '%s'", propName.c_str());
return Datum();
}
bool Stage::setProp(const Common::String &propName, const Datum &value) {
- if (g_lingo->_theEntityFields.contains(propName)) {
- switch (g_lingo->_theEntityFields[propName]->field) {
- case kTheVisible:
- setVisible(value.asInt());
- return true;
- default:
- break;
- }
+ if (g_lingo->_theEntityFields.contains(propName) && g_lingo->_theEntityFields[propName]->entity == kTheWindow) {
+ return setField(g_lingo->_theEntityFields[propName]->field, value);
}
- warning("Stage::getProp: unhandled property '%s'", propName.c_str());
+ warning("Stage::setProp: unknown property '%s'", propName.c_str());
return false;
}
+Datum Stage::getField(int field) {
+ switch (field) {
+ case kTheVisible:
+ return isVisible();
+ default:
+ warning("Stage::getField: unhandled field '%s'", g_lingo->field2str(field));
+ return Datum();
+ }
+}
+
+bool Stage::setField(int field, const Datum &value) {
+ switch (field) {
+ case kTheVisible:
+ setVisible(value.asInt());
+ return true;
+ default:
+ warning("Stage::setField: unhandled field '%s'", g_lingo->field2str(field));
+ return false;
+ }
+}
+
void LM::m_close(int nargs) {
Stage *me = static_cast<Stage *>(g_lingo->_currentMe.u.obj);
me->setVisible(false);
diff --git a/engines/director/lingo/lingo-object.h b/engines/director/lingo/lingo-object.h
index 9c940d7c84..0c4f177d8b 100644
--- a/engines/director/lingo/lingo-object.h
+++ b/engines/director/lingo/lingo-object.h
@@ -56,6 +56,8 @@ public:
virtual bool hasProp(const Common::String &propName) = 0;
virtual Datum getProp(const Common::String &propName) = 0;
virtual bool setProp(const Common::String &propName, const Datum &value) = 0;
+ virtual Datum getField(int field) = 0;
+ virtual bool setField(int field, const Datum &value) = 0;
};
template <typename Derived>
@@ -157,6 +159,12 @@ public:
virtual bool setProp(const Common::String &propName, const Datum &value) {
return false;
};
+ virtual Datum getField(int field) {
+ return Datum();
+ };
+ virtual bool setField(int field, const Datum &value) {
+ return false;
+ };
protected:
static SymbolHash *_methods;
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index cfca2adb29..d9fb25dd2f 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -32,6 +32,7 @@
#include "director/score.h"
#include "director/stage.h"
#include "director/lingo/lingo.h"
+#include "director/lingo/lingo-builtins.h"
#include "director/lingo/lingo-code.h"
#include "director/lingo/lingo-object.h"
#include "director/lingo/lingo-the.h"
@@ -149,7 +150,7 @@ TheEntity entities[] = {
{ kTheTraceLoad, "traceLoad", false, 4 }, // D4 p
{ kTheTraceLogFile, "traceLogFile", false, 4 }, // D4 p
{ kTheUpdateMovieEnabled,"updateMovieEnabled",false,4 },// D4 p
- // { kTheWindow, "window", true, 4 }, // D4
+ { kTheWindow, "window", true, 4 }, // D4
{ kTheWindowList, "windowList", false, 4 }, // D4 p
{ kTheNOEntity, NULL, false, 0 }
};
@@ -578,6 +579,11 @@ Datum Lingo::getTheEntity(int entity, Datum &id, int field) {
d.type = INT;
d.u.i = _vm->getMacTicks() - _vm->getCurrentMovie()->_lastTimerReset;
break;
+ case kTheWindow:
+ g_lingo->push(id);
+ LB::b_window(1);
+ d = g_lingo->pop().u.obj->getField(field);
+ break;
case kTheWindowList:
d = g_lingo->_windowList;
break;
@@ -666,6 +672,11 @@ void Lingo::setTheEntity(int entity, Datum &id, int field, Datum &d) {
case kTheTimeoutScript:
setPrimaryEventHandler(kEventTimeout, d.asString());
break;
+ case kTheWindow:
+ g_lingo->push(id);
+ LB::b_window(1);
+ g_lingo->pop().u.obj->setField(field, d);
+ break;
case kTheWindowList:
if (d.type == ARRAY) {
g_lingo->_windowList = d;
diff --git a/engines/director/stage.h b/engines/director/stage.h
index 0687666eca..f642759981 100644
--- a/engines/director/stage.h
+++ b/engines/director/stage.h
@@ -142,6 +142,8 @@ class Stage : public Graphics::MacWindow, public Object<Stage> {
virtual bool hasProp(const Common::String &propName);
virtual Datum getProp(const Common::String &propName);
virtual bool setProp(const Common::String &propName, const Datum &value);
+ virtual Datum getField(int field);
+ virtual bool setField(int field, const Datum &value);
public:
Common::List<Common::Rect> _dirtyRects;
More information about the Scummvm-git-logs
mailing list