Index: binaries/data/mods/mod/art/textures/icons/textures.xml =================================================================== --- binaries/data/mods/mod/art/textures/icons/textures.xml (nonexistent) +++ binaries/data/mods/mod/art/textures/icons/textures.xml (working copy) @@ -0,0 +1,4 @@ + + + + Index: source/ps/VideoMode.cpp =================================================================== --- source/ps/VideoMode.cpp (revision 21808) +++ source/ps/VideoMode.cpp (working copy) @@ -27,6 +27,8 @@ #include "lib/external_libraries/libsdl.h" #include "lib/sysdep/gfx.h" #include "lib/tex/tex.h" +#include "maths/MD5.h" +#include "ps/CacheLoader.h" #include "ps/CConsole.h" #include "ps/CLogger.h" #include "ps/ConfigDB.h" @@ -500,11 +502,33 @@ void CVideoMode::SetWindowIcon() { + CCacheLoader cacheLoader(g_VFS, L".dds"); + // We are using the cache in case the icon is in an archive, else we just use the source + // file, so the file version and initial hash are just arbitrary. + MD5 hash; + u32 version = 1; + + VfsPath sourcePath = L"art/textures/icons/window.png"; + VfsPath loadPath; + Status ret = cacheLoader.TryLoadingCached(sourcePath, hash, version, loadPath); + + VfsPath iconPath; + if (ret == INFO::OK) + iconPath = loadPath; + else if (ret == INFO::SKIPPED) + iconPath = sourcePath; + else + { + ENSURE(ret < 0); + LOGWARNING("Window icon not found."); + return; + } + std::shared_ptr iconFile; size_t iconFileSize; - if (g_VFS->LoadFile("art/textures/icons/window.png", iconFile, iconFileSize) != INFO::OK) + if (g_VFS->LoadFile(iconPath, iconFile, iconFileSize) != INFO::OK) { - LOGWARNING("Window icon not found."); + LOGERROR("Cannot load file for the window icon."); return; }