[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