[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