mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-22 13:49:53 -06:00
Qt: Fix HiDPI icon scaling
This commit is contained in:
@ -2,46 +2,92 @@
|
||||
// Licensed under GPLv2+
|
||||
// Refer to the license.txt file included.
|
||||
|
||||
#include <QGuiApplication>
|
||||
#include <QIcon>
|
||||
#include <QPixmap>
|
||||
#include <QScreen>
|
||||
#include <QStringList>
|
||||
|
||||
#include "Common/CommonPaths.h"
|
||||
#include "Common/FileUtil.h"
|
||||
#include "DolphinQt2/Resources.h"
|
||||
#include "DolphinQt2/Settings.h"
|
||||
|
||||
QList<QPixmap> Resources::m_platforms;
|
||||
QList<QPixmap> Resources::m_countries;
|
||||
QList<QPixmap> Resources::m_ratings;
|
||||
QList<QPixmap> Resources::m_misc;
|
||||
|
||||
QIcon Resources::GetIcon(const QString& name, const QString& dir)
|
||||
{
|
||||
QString base_path = dir + name;
|
||||
|
||||
const auto dpr = QGuiApplication::primaryScreen()->devicePixelRatio();
|
||||
|
||||
QIcon icon(base_path.append(QStringLiteral(".png")));
|
||||
|
||||
if (dpr > 2)
|
||||
{
|
||||
QPixmap pixmap(base_path.append(QStringLiteral("@4x.png")));
|
||||
if (!pixmap.isNull())
|
||||
{
|
||||
pixmap.setDevicePixelRatio(4.0);
|
||||
icon.addPixmap(pixmap);
|
||||
}
|
||||
}
|
||||
|
||||
return icon;
|
||||
}
|
||||
|
||||
QPixmap Resources::GetPixmap(const QString& name, const QString& dir)
|
||||
{
|
||||
const auto icon = GetIcon(name, dir);
|
||||
return icon.pixmap(icon.availableSizes()[0]);
|
||||
}
|
||||
|
||||
QIcon Resources::GetScaledIcon(const std::string& name)
|
||||
{
|
||||
return GetIcon(QString::fromStdString(name), Settings().GetResourcesDir());
|
||||
}
|
||||
|
||||
QIcon Resources::GetScaledThemeIcon(const std::string& name)
|
||||
{
|
||||
return GetIcon(QString::fromStdString(name), Settings().GetThemeDir());
|
||||
}
|
||||
|
||||
QPixmap Resources::GetScaledPixmap(const std::string& name)
|
||||
{
|
||||
return GetPixmap(QString::fromStdString(name), Settings().GetResourcesDir());
|
||||
}
|
||||
|
||||
QPixmap Resources::GetScaledThemePixmap(const std::string& name)
|
||||
{
|
||||
return GetPixmap(QString::fromStdString(name), Settings().GetThemeDir());
|
||||
}
|
||||
|
||||
void Resources::Init()
|
||||
{
|
||||
QString sys_dir = QString::fromStdString(File::GetSysDirectory() + RESOURCES_DIR + DIR_SEP);
|
||||
|
||||
QStringList platforms{QStringLiteral("Platform_Gamecube.png"), QStringLiteral("Platform_Wii.png"),
|
||||
QStringLiteral("Platform_Wad.png"), QStringLiteral("Platform_File.png")};
|
||||
for (QString platform : platforms)
|
||||
m_platforms.append(QPixmap(platform.prepend(sys_dir)));
|
||||
for (const std::string& platform :
|
||||
{"Platform_Gamecube", "Platform_Wii", "Platform_Wad", "Platform_File"})
|
||||
{
|
||||
m_platforms.append(GetScaledPixmap(platform));
|
||||
}
|
||||
|
||||
QStringList countries{
|
||||
QStringLiteral("Flag_Europe.png"), QStringLiteral("Flag_Japan.png"),
|
||||
QStringLiteral("Flag_USA.png"), QStringLiteral("Flag_Australia.png"),
|
||||
QStringLiteral("Flag_France.png"), QStringLiteral("Flag_Germany.png"),
|
||||
QStringLiteral("Flag_Italy.png"), QStringLiteral("Flag_Korea.png"),
|
||||
QStringLiteral("Flag_Netherlands.png"), QStringLiteral("Flag_Russia.png"),
|
||||
QStringLiteral("Flag_Spain.png"), QStringLiteral("Flag_Taiwan.png"),
|
||||
QStringLiteral("Flag_International.png"), QStringLiteral("Flag_Unknown.png")};
|
||||
for (QString country : countries)
|
||||
m_countries.append(QPixmap(country.prepend(sys_dir)));
|
||||
for (const std::string& country :
|
||||
{"Flag_Europe", "Flag_Japan", "Flag_USA", "Flag_Australia", "Flag_France", "Flag_Germany",
|
||||
"Flag_Italy", "Flag_Korea", "Flag_Netherlands", "Flag_Russia", "Flag_Spain", "Flag_Taiwan",
|
||||
"Flag_International", "Flag_Unknown"})
|
||||
{
|
||||
m_countries.append(GetScaledPixmap(country));
|
||||
}
|
||||
for (int stars = 0; stars <= 5; stars++)
|
||||
m_ratings.append(GetScaledPixmap("rating" + std::to_string(stars)));
|
||||
|
||||
QStringList ratings{QStringLiteral("rating0.png"), QStringLiteral("rating1.png"),
|
||||
QStringLiteral("rating2.png"), QStringLiteral("rating3.png"),
|
||||
QStringLiteral("rating4.png"), QStringLiteral("rating5.png")};
|
||||
for (QString rating : ratings)
|
||||
m_ratings.append(QPixmap(rating.prepend(sys_dir)));
|
||||
|
||||
m_misc.append(QPixmap(QStringLiteral("nobanner.png").prepend(sys_dir)));
|
||||
m_misc.append(QPixmap(QStringLiteral("dolphin_logo.png").prepend(sys_dir)));
|
||||
m_misc.append(QPixmap(QStringLiteral("Dolphin.png").prepend(sys_dir)));
|
||||
m_misc.append(GetScaledPixmap("nobanner"));
|
||||
m_misc.append(GetScaledPixmap("dolphin_logo"));
|
||||
m_misc.append(GetScaledPixmap("Dolphin"));
|
||||
}
|
||||
|
||||
QPixmap Resources::GetPlatform(int platform)
|
||||
|
Reference in New Issue
Block a user