Fixed an issue where the game image would sometimes not refresh after scraping.

This commit is contained in:
Leon Styhre 2020-11-14 17:18:00 +01:00
parent e5fcb51f57
commit 2b189f9d19
3 changed files with 23 additions and 12 deletions

View file

@ -464,18 +464,16 @@ void GuiMetaDataEd::close()
std::function<void()> closeFunc; std::function<void()> closeFunc;
closeFunc = [this] { closeFunc = [this] {
ViewController::get()->onPauseVideo();
delete this;
};
std::function<void()> closeFuncReload;
closeFuncReload = [this] {
// Always reload the gamelist if media files were updated, even if the user
// selected to not save any metadata changes.
if (mMediaFilesUpdated) { if (mMediaFilesUpdated) {
// Always reload the gamelist if media files were updated, even if the user
// chose to not save any metadata changes. Also manually unload the game image
// and marquee, as otherwise they would not get updated until the user scrolls up
// and down the gamelist.
TextureResource::manualUnload(mScraperParams.game->getImagePath(), false);
TextureResource::manualUnload(mScraperParams.game->getMarqueePath(), false);
ViewController::get()->reloadGameListView(mScraperParams.system); ViewController::get()->reloadGameListView(mScraperParams.system);
ViewController::get()->onPauseVideo();
} }
ViewController::get()->onPauseVideo();
delete this; delete this;
}; };
@ -484,7 +482,7 @@ void GuiMetaDataEd::close()
mWindow->pushGui(new GuiMsgBox(mWindow, getHelpStyle(), mWindow->pushGui(new GuiMsgBox(mWindow, getHelpStyle(),
"SAVE CHANGES?", "SAVE CHANGES?",
"YES", [this, closeFunc] { save(); closeFunc(); }, "YES", [this, closeFunc] { save(); closeFunc(); },
"NO", closeFuncReload "NO", closeFunc
)); ));
} }
else { else {

View file

@ -87,6 +87,18 @@ void TextureResource::initFromMemory(const char* data, size_t length)
mSourceSize = Vector2f(mTextureData->sourceWidth(), mTextureData->sourceHeight()); mSourceSize = Vector2f(mTextureData->sourceWidth(), mTextureData->sourceHeight());
} }
void TextureResource::manualUnload(std::string path, bool tile)
{
const std::string canonicalPath = Utils::FileSystem::getCanonicalPath(path);
TextureKeyType key(canonicalPath, tile);
auto foundTexture = sTextureMap.find(key);
if (foundTexture != sTextureMap.cend()) {
sTextureMap.erase(foundTexture);
}
}
const Vector2i TextureResource::getSize() const const Vector2i TextureResource::getSize() const
{ {
return mSize; return mSize;

View file

@ -9,8 +9,8 @@
#ifndef ES_CORE_RESOURCES_TEXTURE_RESOURCE_H #ifndef ES_CORE_RESOURCES_TEXTURE_RESOURCE_H
#define ES_CORE_RESOURCES_TEXTURE_RESOURCE_H #define ES_CORE_RESOURCES_TEXTURE_RESOURCE_H
#include "math/Vector2i.h"
#include "math/Vector2f.h" #include "math/Vector2f.h"
#include "math/Vector2i.h"
#include "resources/ResourceManager.h" #include "resources/ResourceManager.h"
#include "resources/TextureDataManager.h" #include "resources/TextureDataManager.h"
@ -28,6 +28,7 @@ public:
bool forceLoad = false, bool dynamic = true); bool forceLoad = false, bool dynamic = true);
void initFromPixels(const unsigned char* dataRGBA, size_t width, size_t height); void initFromPixels(const unsigned char* dataRGBA, size_t width, size_t height);
virtual void initFromMemory(const char* data, size_t length); virtual void initFromMemory(const char* data, size_t length);
static void manualUnload(std::string path, bool tile);
// For scalable source images in textures we want to set the resolution to rasterize at. // For scalable source images in textures we want to set the resolution to rasterize at.
void rasterizeAt(size_t width, size_t height); void rasterizeAt(size_t width, size_t height);
@ -65,7 +66,7 @@ private:
typedef std::pair<std::string, bool> TextureKeyType; typedef std::pair<std::string, bool> TextureKeyType;
// Map of textures, used to prevent duplicate textures. // Map of textures, used to prevent duplicate textures.
static std::map< TextureKeyType, std::weak_ptr<TextureResource> > sTextureMap; static std::map<TextureKeyType, std::weak_ptr<TextureResource>> sTextureMap;
// Set of all textures, used for memory management. // Set of all textures, used for memory management.
static std::set<TextureResource*> sAllTextures; static std::set<TextureResource*> sAllTextures;
}; };