[Scummvm-git-logs] scummvm master -> 686e72027533d723f988db20483de77bc032c69e

sev- noreply at scummvm.org
Sun Jul 3 17:24:10 UTC 2022


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

Summary:
c876e627db DIRECTOR: LINGO: Use image/pict to decode PICT images in director
b9cd319a13 DIRECTOR: Add PICT to tests, test importFileInto
2e071fbeb2 DIRECTOR: LINGO: Create new constructors without stream for CastMember and BitmapCastMember
7775518224 DIRECTOR: Instantiate new CastMember for importFileInto builtin
686e720275 DIRECTOR: Implement Movie::createOrReplaceCastMember() and Cast::setCastMember() functions, add blend2.pic to tests


Commit: c876e627db4040e2e701941601071b35d3616a94
    https://github.com/scummvm/scummvm/commit/c876e627db4040e2e701941601071b35d3616a94
Author: Pragyansh Chaturvedi (pragyanshchaturvedi18 at gmail.com)
Date: 2022-07-03T19:24:04+02:00

Commit Message:
DIRECTOR: LINGO: Use image/pict to decode PICT images in director

Changed paths:
    engines/director/lingo/lingo-builtins.cpp


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 5430b5b0aea..b2d5a0ff31b 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -48,6 +48,8 @@
 #include "director/lingo/lingo-object.h"
 #include "director/lingo/lingo-utils.h"
 
+#include "image/pict.h"
+
 namespace Director {
 
 static BuiltinProto builtins[] = {
@@ -1878,9 +1880,16 @@ void LB::b_findEmpty(int nargs) {
 }
 
 void LB::b_importFileInto(int nargs) {
-	g_lingo->printSTUBWithArglist("b_importFileInto", nargs);
-
-	g_lingo->dropStack(nargs);
+	Datum d = g_lingo->pop();
+	Datum d2 = g_lingo->pop();
+	Common::String path = ConfMan.get("path") + d.asString();
+	Common::FSNode in(path);
+	Common::SeekableReadStream *str = in.createReadStream();
+	Image::PICTDecoder *k = new Image::PICTDecoder();
+	k->loadStream(*str);
+	g_system->copyRectToScreen(k->getSurface()->getPixels(), k->getSurface()->pitch, 100, 100, 166, 182);
+	while (true)
+		g_system->updateScreen();
 }
 
 void menuCommandsCallback(int action, Common::String &text, void *data) {


Commit: b9cd319a135f5596b090383a2aaf4691ea539720
    https://github.com/scummvm/scummvm/commit/b9cd319a135f5596b090383a2aaf4691ea539720
Author: Pragyansh Chaturvedi (pragyanshchaturvedi18 at gmail.com)
Date: 2022-07-03T19:24:04+02:00

Commit Message:
DIRECTOR: Add PICT to tests, test importFileInto

Changed paths:
    engines/director/lingo/lingo-builtins.cpp
    engines/director/tests.cpp


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index b2d5a0ff31b..1f893e57860 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1880,16 +1880,20 @@ void LB::b_findEmpty(int nargs) {
 }
 
 void LB::b_importFileInto(int nargs) {
-	Datum d = g_lingo->pop();
-	Datum d2 = g_lingo->pop();
-	Common::String path = ConfMan.get("path") + d.asString();
-	Common::FSNode in(path);
-	Common::SeekableReadStream *str = in.createReadStream();
+	Common::String path = pathMakeRelative("blend2.pic");
+	Common::File in;
+	in.open(path);
+	if (!in.isOpen()) {
+		warning("b_importFileInto(): Cannot open file %s", path.c_str());
+		return;
+	}
 	Image::PICTDecoder *k = new Image::PICTDecoder();
-	k->loadStream(*str);
-	g_system->copyRectToScreen(k->getSurface()->getPixels(), k->getSurface()->pitch, 100, 100, 166, 182);
-	while (true)
-		g_system->updateScreen();
+	k->loadStream(in);
+	((BitmapCastMember *)(g_director->getCurrentMovie()->getCast()->_loadedCast->getVal(1)))->_img = k;
+	((BitmapCastMember *)(g_director->getCurrentMovie()->getCast()->_loadedCast->getVal(1)))->setModified(true);
+	g_director->getCurrentMovie()->getScore()->_channels[1]->_dirty = true;
+	in.close();
+	g_lingo->dropStack(nargs);
 }
 
 void menuCommandsCallback(int action, Common::String &text, void *data) {
diff --git a/engines/director/tests.cpp b/engines/director/tests.cpp
index f5d83286fdd..3769c6e9946 100644
--- a/engines/director/tests.cpp
+++ b/engines/director/tests.cpp
@@ -38,6 +38,8 @@
 #include "director/window.h"
 #include "director/lingo/lingo.h"
 
+#include "image/pict.h"
+
 namespace Director {
 
 //////////////////////
@@ -99,15 +101,27 @@ void Window::testFontScaling() {
 		}
 	}
 
+	#if 0
 	x = 10;
 	for (int i = 0; i < kNumBuiltinTiles; i++) {
 		Image::ImageDecoder *tile = g_director->getTile(i);
-		surface.blitFrom(tile->getSurface(), Common::Point(x, 250));
 
-		x += tile->getSurface()->w + 10;
-	}
+			x += tile->getSurface()->w + 10;
+		}
+	#endif
+		Common::String path = pathMakeRelative("blend2.pic");
+		Common::File in;
+		in.open(path);
+		if (!in.isOpen()) {
+			warning("b_importFileInto(): Cannot open file %s", path.c_str());
+			return;
+		}
+		Image::PICTDecoder *k = new Image::PICTDecoder();
+		k->loadStream(in);
+		surface.blitFrom(k->getSurface(), Common::Point(5, 280));
+		in.close();
 
-	g_system->copyRectToScreen(surface.getPixels(), surface.pitch, 0, 0, w, h); // testing fonts
+			g_system->copyRectToScreen(surface.getPixels(), surface.pitch, 0, 0, w, h); // testing fonts
 
 	Common::Event event;
 


Commit: 2e071fbeb2f4969d068ed4cbdb42b17d1d321005
    https://github.com/scummvm/scummvm/commit/2e071fbeb2f4969d068ed4cbdb42b17d1d321005
Author: Pragyansh Chaturvedi (pragyanshchaturvedi18 at gmail.com)
Date: 2022-07-03T19:24:04+02:00

Commit Message:
DIRECTOR: LINGO: Create new constructors without stream for CastMember and BitmapCastMember

Changed paths:
    engines/director/castmember.cpp
    engines/director/castmember.h
    engines/director/lingo/lingo-builtins.cpp


diff --git a/engines/director/castmember.cpp b/engines/director/castmember.cpp
index 25b9e79c90c..82192288a5b 100644
--- a/engines/director/castmember.cpp
+++ b/engines/director/castmember.cpp
@@ -56,6 +56,24 @@ CastMember::CastMember(Cast *cast, uint16 castId, Common::SeekableReadStreamEndi
 	_erase = false;
 }
 
+CastMember::CastMember(Cast *cast, uint16 castId) : Object<CastMember>("CastMember") {
+	_type = kCastTypeNull;
+	_cast = cast;
+	_castId = castId;
+	_hilite = false;
+	_purgePriority = 3;
+	_size = 0;
+	_flags1 = 0;
+
+	_modified = true;
+	_isChanged = false;
+
+	_objType = kCastMemberObj;
+
+	_widget = nullptr;
+	_erase = false;
+}
+
 CastMemberInfo *CastMember::getInfo() {
 	return _cast->getCastMemberInfo(_castId);
 }
@@ -177,6 +195,23 @@ BitmapCastMember::BitmapCastMember(Cast *cast, uint16 castId, Common::SeekableRe
 	_tag = castTag;
 }
 
+BitmapCastMember::BitmapCastMember(Cast* cast, uint16 castId, Image::ImageDecoder* img, uint8 flags1)
+	: CastMember(cast, castId) {
+	_type = kCastBitmap;
+	_matte = nullptr;
+	_noMatte = false;
+	_bytes = 0;
+	_img = img;
+	_clut = -1;
+	_initialRect = Common::Rect(0, 0, img->getSurface()->w, img->getSurface()->h);
+	_pitch = img->getSurface()->pitch;
+	_bitsPerPixel = img->getSurface()->format.bytesPerPixel * 8;
+	_regY = img->getSurface()->h / 2;
+	_regX = img->getSurface()->w / 2;
+	_flags1 = flags1;
+	_flags2 = 0;
+}
+
 BitmapCastMember::~BitmapCastMember() {
 	if (_img)
 		delete _img;
diff --git a/engines/director/castmember.h b/engines/director/castmember.h
index e37a116d9ed..c6a1a13a37c 100644
--- a/engines/director/castmember.h
+++ b/engines/director/castmember.h
@@ -64,6 +64,7 @@ class Stxt;
 class CastMember : public Object<CastMember> {
 public:
 	CastMember(Cast *cast, uint16 castId, Common::SeekableReadStreamEndian &stream);
+	CastMember(Cast *cast, uint16 castId);
 	virtual ~CastMember() {}
 
 	Cast *getCast() { return _cast; }
@@ -118,6 +119,7 @@ protected:
 class BitmapCastMember : public CastMember {
 public:
 	BitmapCastMember(Cast *cast, uint16 castId, Common::SeekableReadStreamEndian &stream, uint32 castTag, uint16 version, uint8 flags1 = 0);
+	BitmapCastMember(Cast *cast, uint16 castId, Image::ImageDecoder *img, uint8 flags1 = 0);
 	~BitmapCastMember();
 	Graphics::MacWidget *createWidget(Common::Rect &bbox, Channel *channel, SpriteType spriteType) override;
 
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 1f893e57860..dd30d42f7d8 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1880,20 +1880,35 @@ void LB::b_findEmpty(int nargs) {
 }
 
 void LB::b_importFileInto(int nargs) {
-	Common::String path = pathMakeRelative("blend2.pic");
+	Datum file = g_lingo->pop();
+	Datum dst = g_lingo->pop();
+	if (!dst.isCastRef()) {
+		warning("b_importFileInto(): bad cast ref field type: %s", dst.type2str());
+		return;
+	}
+	CastMemberID memberID = *dst.u.cast;
+	CastMember *member = g_director->getCurrentMovie()->getCastMember(memberID);
+	Common::String path = pathMakeRelative(file.asString());
 	Common::File in;
 	in.open(path);
 	if (!in.isOpen()) {
 		warning("b_importFileInto(): Cannot open file %s", path.c_str());
 		return;
 	}
-	Image::PICTDecoder *k = new Image::PICTDecoder();
-	k->loadStream(in);
-	((BitmapCastMember *)(g_director->getCurrentMovie()->getCast()->_loadedCast->getVal(1)))->_img = k;
-	((BitmapCastMember *)(g_director->getCurrentMovie()->getCast()->_loadedCast->getVal(1)))->setModified(true);
-	g_director->getCurrentMovie()->getScore()->_channels[1]->_dirty = true;
+	Image::PICTDecoder *img = new Image::PICTDecoder();
+	img->loadStream(in);
 	in.close();
-	g_lingo->dropStack(nargs);
+	BitmapCastMember *bitmapCast = (BitmapCastMember *)member;
+	bitmapCast->_img = img;
+	bitmapCast->setModified(true);
+	const Graphics::Surface *surf = img->getSurface();
+	bitmapCast->_size = surf->pitch * surf->h + img->getPaletteColorCount() * 3;
+	auto channels = g_director->getCurrentMovie()->getScore()->_channels;
+	for (uint i = 0; i < channels.size(); i++) {
+		if (channels[i]->_sprite->_castId == dst.asMemberID()) {
+			channels[i]->_dirty = true;
+		}
+	}
 }
 
 void menuCommandsCallback(int action, Common::String &text, void *data) {


Commit: 7775518224a40a24842d00bff71efe385d5324bb
    https://github.com/scummvm/scummvm/commit/7775518224a40a24842d00bff71efe385d5324bb
Author: Pragyansh Chaturvedi (pragyanshchaturvedi18 at gmail.com)
Date: 2022-07-03T19:24:04+02:00

Commit Message:
DIRECTOR: Instantiate new CastMember for importFileInto builtin

Changed paths:
    engines/director/lingo/lingo-builtins.cpp
    engines/director/tests.cpp


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index dd30d42f7d8..e7b34e628f4 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1880,32 +1880,40 @@ void LB::b_findEmpty(int nargs) {
 }
 
 void LB::b_importFileInto(int nargs) {
+
 	Datum file = g_lingo->pop();
 	Datum dst = g_lingo->pop();
+
 	if (!dst.isCastRef()) {
 		warning("b_importFileInto(): bad cast ref field type: %s", dst.type2str());
 		return;
 	}
+
 	CastMemberID memberID = *dst.u.cast;
-	CastMember *member = g_director->getCurrentMovie()->getCastMember(memberID);
 	Common::String path = pathMakeRelative(file.asString());
 	Common::File in;
 	in.open(path);
+
 	if (!in.isOpen()) {
 		warning("b_importFileInto(): Cannot open file %s", path.c_str());
 		return;
 	}
+
 	Image::PICTDecoder *img = new Image::PICTDecoder();
 	img->loadStream(in);
 	in.close();
-	BitmapCastMember *bitmapCast = (BitmapCastMember *)member;
-	bitmapCast->_img = img;
+
+	Cast *cast = g_director->getCurrentMovie()->getCast();
+	BitmapCastMember *bitmapCast = new BitmapCastMember(cast, memberID.member, img);
+	cast->_loadedCast->setVal(memberID.member, bitmapCast);
 	bitmapCast->setModified(true);
 	const Graphics::Surface *surf = img->getSurface();
 	bitmapCast->_size = surf->pitch * surf->h + img->getPaletteColorCount() * 3;
 	auto channels = g_director->getCurrentMovie()->getScore()->_channels;
+
 	for (uint i = 0; i < channels.size(); i++) {
 		if (channels[i]->_sprite->_castId == dst.asMemberID()) {
+			channels[i]->setCast(memberID);
 			channels[i]->_dirty = true;
 		}
 	}
diff --git a/engines/director/tests.cpp b/engines/director/tests.cpp
index 3769c6e9946..84abba206de 100644
--- a/engines/director/tests.cpp
+++ b/engines/director/tests.cpp
@@ -102,26 +102,31 @@ void Window::testFontScaling() {
 	}
 
 	#if 0
+
 	x = 10;
+
 	for (int i = 0; i < kNumBuiltinTiles; i++) {
 		Image::ImageDecoder *tile = g_director->getTile(i);
+		x += tile->getSurface()->w + 10;
+	}
 
-			x += tile->getSurface()->w + 10;
-		}
 	#endif
-		Common::String path = pathMakeRelative("blend2.pic");
-		Common::File in;
-		in.open(path);
-		if (!in.isOpen()) {
-			warning("b_importFileInto(): Cannot open file %s", path.c_str());
-			return;
-		}
-		Image::PICTDecoder *k = new Image::PICTDecoder();
-		k->loadStream(in);
-		surface.blitFrom(k->getSurface(), Common::Point(5, 280));
-		in.close();
 
-			g_system->copyRectToScreen(surface.getPixels(), surface.pitch, 0, 0, w, h); // testing fonts
+	Common::String path = pathMakeRelative("blend2.pic");
+	Common::File in;
+	in.open(path);
+
+	if (!in.isOpen()) {
+		warning("b_importFileInto(): Cannot open file %s", path.c_str());
+		return;
+	}
+
+	Image::PICTDecoder *k = new Image::PICTDecoder();
+	k->loadStream(in);
+	surface.blitFrom(k->getSurface(), Common::Point(5, 280));
+	in.close();
+
+	g_system->copyRectToScreen(surface.getPixels(), surface.pitch, 0, 0, w, h); // testing fonts
 
 	Common::Event event;
 


Commit: 686e72027533d723f988db20483de77bc032c69e
    https://github.com/scummvm/scummvm/commit/686e72027533d723f988db20483de77bc032c69e
Author: Pragyansh Chaturvedi (pragyanshchaturvedi18 at gmail.com)
Date: 2022-07-03T19:24:04+02:00

Commit Message:
DIRECTOR: Implement Movie::createOrReplaceCastMember() and Cast::setCastMember() functions, add blend2.pic to tests

Changed paths:
  A engines/director/lingo/tests/blend2.pic
    engines/director/cast.cpp
    engines/director/cast.h
    engines/director/lingo/lingo-builtins.cpp
    engines/director/movie.cpp
    engines/director/movie.h
    engines/director/tests.cpp


diff --git a/engines/director/cast.cpp b/engines/director/cast.cpp
index f34a18406e9..10bd6588d3a 100644
--- a/engines/director/cast.cpp
+++ b/engines/director/cast.cpp
@@ -192,6 +192,15 @@ void Cast::setCastMemberModified(int castId) {
 	cast->setModified(true);
 }
 
+CastMember *Cast::setCastMember(CastMemberID castId, CastMember *cast) {
+	if (_loadedCast->contains(castId.member)) {
+		_loadedCast->erase(castId.member);
+	}
+
+	_loadedCast->setVal(castId.member, cast);
+	return cast;
+}
+
 void Cast::setArchive(Archive *archive) {
 	_castArchive = archive;
 
diff --git a/engines/director/cast.h b/engines/director/cast.h
index 16b476cc1e8..1e0b227ba6f 100644
--- a/engines/director/cast.h
+++ b/engines/director/cast.h
@@ -97,6 +97,7 @@ public:
 	void copyCastStxts();
 	Common::Rect getCastMemberInitialRect(int castId);
 	void setCastMemberModified(int castId);
+	CastMember *setCastMember(CastMemberID castId, CastMember *cast);
 	CastMember *getCastMember(int castId);
 	CastMember *getCastMemberByName(const Common::String &name);
 	CastMember *getCastMemberByScriptId(int scriptId);
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index e7b34e628f4..4eaa2c704c1 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1890,6 +1890,12 @@ void LB::b_importFileInto(int nargs) {
 	}
 
 	CastMemberID memberID = *dst.u.cast;
+
+	if (!(file.asString().matchString("*.pic") || file.asString().matchString("*.pict"))) {
+		warning("LB::b_importFileInto : %s is not a valid PICT file", file.asString().c_str());
+		return;
+	}
+
 	Common::String path = pathMakeRelative(file.asString());
 	Common::File in;
 	in.open(path);
@@ -1903,9 +1909,9 @@ void LB::b_importFileInto(int nargs) {
 	img->loadStream(in);
 	in.close();
 
-	Cast *cast = g_director->getCurrentMovie()->getCast();
-	BitmapCastMember *bitmapCast = new BitmapCastMember(cast, memberID.member, img);
-	cast->_loadedCast->setVal(memberID.member, bitmapCast);
+	Movie *movie = g_director->getCurrentMovie();
+	BitmapCastMember *bitmapCast = new BitmapCastMember(movie->getCast(), memberID.member, img);
+	movie->createOrReplaceCastMember(memberID, bitmapCast);
 	bitmapCast->setModified(true);
 	const Graphics::Surface *surf = img->getSurface();
 	bitmapCast->_size = surf->pitch * surf->h + img->getPaletteColorCount() * 3;
diff --git a/engines/director/lingo/tests/blend2.pic b/engines/director/lingo/tests/blend2.pic
new file mode 100644
index 00000000000..7cccb2b295e
Binary files /dev/null and b/engines/director/lingo/tests/blend2.pic differ
diff --git a/engines/director/movie.cpp b/engines/director/movie.cpp
index d023104c31e..676de2fddc4 100644
--- a/engines/director/movie.cpp
+++ b/engines/director/movie.cpp
@@ -322,6 +322,18 @@ CastMember *Movie::getCastMember(CastMemberID memberID) {
 	return result;
 }
 
+CastMember* Movie::createOrReplaceCastMember(CastMemberID memberID, CastMember* cast) {
+	CastMember *result = nullptr;
+
+	if (memberID.castLib == 0) {
+		result = _cast->setCastMember(memberID, cast);
+	} else if (memberID.castLib == 1) {
+		result = _sharedCast->setCastMember(memberID, cast);
+	}
+
+	return result;
+}
+
 CastMember *Movie::getCastMemberByName(const Common::String &name, int castLib) {
 	CastMember *result = nullptr;
 	if (castLib == 0) {
diff --git a/engines/director/movie.h b/engines/director/movie.h
index 80bb5b4a5a0..1b98b1bb3cc 100644
--- a/engines/director/movie.h
+++ b/engines/director/movie.h
@@ -102,6 +102,7 @@ public:
 	void loadSharedCastsFrom(Common::String filename);
 
 	CastMember *getCastMember(CastMemberID memberID);
+	CastMember *createOrReplaceCastMember(CastMemberID memberID, CastMember *cast);
 	CastMember *getCastMemberByName(const Common::String &name, int castLib);
 	CastMemberInfo *getCastMemberInfo(CastMemberID memberID);
 	const Stxt *getStxt(CastMemberID memberID);
diff --git a/engines/director/tests.cpp b/engines/director/tests.cpp
index 84abba206de..5d2b93e9f4f 100644
--- a/engines/director/tests.cpp
+++ b/engines/director/tests.cpp
@@ -101,17 +101,14 @@ void Window::testFontScaling() {
 		}
 	}
 
-	#if 0
-
 	x = 10;
-
 	for (int i = 0; i < kNumBuiltinTiles; i++) {
 		Image::ImageDecoder *tile = g_director->getTile(i);
+		surface.blitFrom(tile->getSurface(), Common::Point(x, 250));
+
 		x += tile->getSurface()->w + 10;
 	}
 
-	#endif
-
 	Common::String path = pathMakeRelative("blend2.pic");
 	Common::File in;
 	in.open(path);




More information about the Scummvm-git-logs mailing list