Added thumbnail support for launcher to SCUMM engine.

svn-id: r34540
This commit is contained in:
Johannes Schickel 2008-09-14 21:13:40 +00:00
parent 92fc264461
commit 725bd8b778
3 changed files with 25 additions and 22 deletions

View File

@ -683,6 +683,7 @@ public:
virtual SaveStateList listSaves(const char *target) const;
virtual void removeSaveState(const char *target, int slot) const;
virtual Graphics::Surface *loadThumbnailFromSlot(const char *target, int slot) const;
};
bool ScummMetaEngine::hasFeature(MetaEngineFeature f) const {
@ -690,7 +691,8 @@ bool ScummMetaEngine::hasFeature(MetaEngineFeature f) const {
(f == kSupportsRTL) ||
(f == kSupportsListSaves) ||
(f == kSupportsDirectLoad) ||
(f == kSupportsDeleteSave);
(f == kSupportsDeleteSave) ||
(f == kSupportsThumbnails);
}
GameList ScummMetaEngine::getSupportedGames() const {
@ -986,6 +988,10 @@ void ScummMetaEngine::removeSaveState(const char *target, int slot) const {
g_system->getSavefileManager()->removeSavefile(filename.c_str());
}
Graphics::Surface *ScummMetaEngine::loadThumbnailFromSlot(const char *target, int slot) const {
return ScummEngine::loadThumbnailFromSlot(target, slot);
}
#if PLUGIN_ENABLED_DYNAMIC(SCUMM)
REGISTER_PLUGIN_DYNAMIC(SCUMM, PLUGIN_TYPE_ENGINE, ScummMetaEngine);
#else

View File

@ -73,20 +73,6 @@ struct SaveInfoSection {
#define INFOSECTION_VERSION 2
Graphics::Surface *ScummEngine::loadThumbnail(Common::SeekableReadStream *file) {
if (!Graphics::checkThumbnailHeader(*file))
return 0;
Graphics::Surface *thumb = new Graphics::Surface();
assert(thumb);
if (!Graphics::loadThumbnail(*file, *thumb)) {
delete thumb;
return 0;
}
return thumb;
}
#pragma mark -
void ScummEngine::requestSave(int slot, const char *name, bool temporary) {
@ -494,7 +480,7 @@ bool getSavegameName(Common::InSaveFile *in, Common::String &desc, int heversion
return true;
}
Graphics::Surface *ScummEngine::loadThumbnailFromSlot(int slot) {
Graphics::Surface *ScummEngine::loadThumbnailFromSlot(const char *target, int slot) {
char filename[256];
Common::SeekableReadStream *in;
SaveGameHeader hdr;
@ -502,8 +488,9 @@ Graphics::Surface *ScummEngine::loadThumbnailFromSlot(int slot) {
if (slot < 0)
return 0;
makeSavegameName(filename, slot, false);
if (!(in = _saveFileMan->openForLoading(filename))) {
// TODO: Remove code duplication (check: makeSavegameName)
snprintf(filename, sizeof(filename), "%s.s%02d", target, slot);
if (!(in = g_system->getSavefileManager()->openForLoading(filename))) {
return 0;
}
@ -519,7 +506,15 @@ Graphics::Surface *ScummEngine::loadThumbnailFromSlot(int slot) {
return 0;
}
Graphics::Surface *thumb = loadThumbnail(in);
Graphics::Surface *thumb = 0;
if (Graphics::checkThumbnailHeader(*in)) {
thumb = new Graphics::Surface();
assert(thumb);
if (!Graphics::loadThumbnail(*in, *thumb)) {
delete thumb;
thumb = 0;
}
}
delete in;
return thumb;

View File

@ -627,12 +627,14 @@ public:
// thumbnail + info stuff
public:
Graphics::Surface *loadThumbnailFromSlot(int slot);
Graphics::Surface *loadThumbnailFromSlot(int slot) {
return loadThumbnailFromSlot(_targetName.c_str(), slot);
}
static Graphics::Surface *loadThumbnailFromSlot(const char *target, int slot);
bool loadInfosFromSlot(int slot, InfoStuff *stuff);
protected:
Graphics::Surface *loadThumbnail(Common::SeekableReadStream *file);
void saveInfos(Common::WriteStream* file);
bool loadInfos(Common::SeekableReadStream *file, InfoStuff *stuff);