DolphinQt: Support banners in Homebrew Channel format

HBC uses files named icon.png for icons. This change makes Dolphin
support that file name, and also [executable file name].png
in case someone wants to have multiple files in one folder.

The HBC banner support is mainly intended for DOL and ELF files,
but it can also be used to override banners of disc images,
something that wasn't possible in the past.

That sure was simple compared to the wx version of this commit...
This commit is contained in:
JosJuice 2015-09-06 18:03:02 +02:00
parent 047ddb94a2
commit 3e6d62ae9e
2 changed files with 14 additions and 1 deletions

View File

@ -73,7 +73,8 @@ GameFile::GameFile(const QString& fileName)
: m_file_name(fileName) : m_file_name(fileName)
{ {
QFileInfo info(m_file_name); QFileInfo info(m_file_name);
m_folder_name = info.absoluteDir().dirName(); QDir directory = info.absoluteDir();
m_folder_name = directory.dirName();
if (LoadFromCache()) if (LoadFromCache())
{ {
@ -140,6 +141,16 @@ GameFile::GameFile(const QString& fileName)
m_file_size = info.size(); m_file_size = info.size();
m_platform = DiscIO::IVolume::ELF_DOL; m_platform = DiscIO::IVolume::ELF_DOL;
} }
// PNG files can optionally be used as banners. Typical for DOLs and ELFs, but also works with
// volumes. icon.png is the file name used by Homebrew Channel. The ability to use a PNG file
// with the same name as the main file is provided as an alternative for those who want to have
// multiple files in one folder instead of having a Homebrew Channel-style folder structure.
QImage banner(directory.filePath(info.baseName() + SL(".png")));
if (banner.isNull())
banner.load(directory.filePath(SL("icon.png")));
if (!banner.isNull())
m_banner = QPixmap::fromImage(banner);
} }
bool GameFile::LoadFromCache() bool GameFile::LoadFromCache()
@ -259,6 +270,7 @@ QString GameFile::CreateCacheFilename() const
return fullname; return fullname;
} }
// Outputs to m_banner
void GameFile::ReadBanner(const DiscIO::IVolume& volume) void GameFile::ReadBanner(const DiscIO::IVolume& volume)
{ {
int width, height; int width, height;

View File

@ -81,5 +81,6 @@ private:
bool IsElfOrDol() const; bool IsElfOrDol() const;
QString CreateCacheFilename() const; QString CreateCacheFilename() const;
// Outputs to m_banner
void ReadBanner(const DiscIO::IVolume& volume); void ReadBanner(const DiscIO::IVolume& volume);
}; };