QT: Implement themed icons (#3554)

* implement themed icons

* fix theme search paths
This commit is contained in:
BreadFish64 2018-03-27 06:11:04 -05:00 committed by Merry
parent 7abfdb164b
commit 05cf7fe70a
13 changed files with 58 additions and 16 deletions

BIN
dist/icons/citra.png vendored

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

View file

@ -1,7 +0,0 @@
<RCC>
<qresource prefix="icons">
<file>checked.png</file>
<file>failed.png</file>
<file>citra.png</file>
</qresource>
</RCC>

11
dist/qt_themes/default/default.qrc vendored Normal file
View file

@ -0,0 +1,11 @@
<RCC>
<qresource prefix="icons/default">
<file alias="index.theme">icons/index.theme</file>
<file alias="16x16/checked.png">icons/16x16/checked.png</file>
<file alias="16x16/failed.png">icons/16x16/failed.png</file>
<file alias="256x256/citra.png">icons/256x256/citra.png</file>
</qresource>
</RCC>

View file

Before

Width:  |  Height:  |  Size: 451 B

After

Width:  |  Height:  |  Size: 451 B

View file

Before

Width:  |  Height:  |  Size: 428 B

After

Width:  |  Height:  |  Size: 428 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View file

@ -0,0 +1,10 @@
[Icon Theme]
Name=default
Comment=default theme
Directories=16x16,256x256
[16x16]
Size=16
[256x256]
Size=256

View file

@ -0,0 +1,11 @@
[Icon Theme]
Name=qdarkstyle
Comment=dark theme
Inherits=default
Directories=16x16,256x256
[16x16]
Size=16
[256x256]
Size=256

View file

@ -1,4 +1,7 @@
<RCC> <RCC>
<qresource prefix="icons/qdarkstyle">
<file alias="index.theme">icons/index.theme</file>
</qresource>
<qresource prefix="qss_icons"> <qresource prefix="qss_icons">
<file>rc/up_arrow_disabled.png</file> <file>rc/up_arrow_disabled.png</file>
<file>rc/Hmovetoolbar.png</file> <file>rc/Hmovetoolbar.png</file>

View file

@ -2,6 +2,7 @@
// Licensed under GPLv2 or any later version // Licensed under GPLv2 or any later version
// Refer to the license.txt file included. // Refer to the license.txt file included.
#include <QIcon>
#include "aboutdialog.h" #include "aboutdialog.h"
#include "common/scm_rev.h" #include "common/scm_rev.h"
#include "ui_aboutdialog.h" #include "ui_aboutdialog.h"
@ -10,6 +11,7 @@ AboutDialog::AboutDialog(QWidget* parent)
: QDialog(parent, Qt::WindowTitleHint | Qt::WindowCloseButtonHint | Qt::WindowSystemMenuHint), : QDialog(parent, Qt::WindowTitleHint | Qt::WindowCloseButtonHint | Qt::WindowSystemMenuHint),
ui(new Ui::AboutDialog) { ui(new Ui::AboutDialog) {
ui->setupUi(this); ui->setupUi(this);
ui->labelLogo->setPixmap(QIcon::fromTheme("citra").pixmap(200));
ui->labelBuildInfo->setText(ui->labelBuildInfo->text().arg( ui->labelBuildInfo->setText(ui->labelBuildInfo->text().arg(
Common::g_build_name, Common::g_scm_branch, Common::g_scm_desc)); Common::g_build_name, Common::g_scm_branch, Common::g_scm_desc));
} }

View file

@ -2,6 +2,7 @@
// Licensed under GPLv2 or any later version // Licensed under GPLv2 or any later version
// Refer to the license.txt file included. // Refer to the license.txt file included.
#include <QIcon>
#include <QMessageBox> #include <QMessageBox>
#include "citra_qt/configuration/configure_web.h" #include "citra_qt/configuration/configure_web.h"
#include "core/settings.h" #include "core/settings.h"
@ -67,12 +68,12 @@ void ConfigureWeb::RefreshTelemetryID() {
void ConfigureWeb::OnLoginChanged() { void ConfigureWeb::OnLoginChanged() {
if (ui->edit_username->text().isEmpty() && ui->edit_token->text().isEmpty()) { if (ui->edit_username->text().isEmpty() && ui->edit_token->text().isEmpty()) {
user_verified = true; user_verified = true;
ui->label_username_verified->setPixmap(QPixmap(":/icons/checked.png")); ui->label_username_verified->setPixmap(QIcon::fromTheme("checked").pixmap(16));
ui->label_token_verified->setPixmap(QPixmap(":/icons/checked.png")); ui->label_token_verified->setPixmap(QIcon::fromTheme("checked").pixmap(16));
} else { } else {
user_verified = false; user_verified = false;
ui->label_username_verified->setPixmap(QPixmap(":/icons/failed.png")); ui->label_username_verified->setPixmap(QIcon::fromTheme("failed").pixmap(16));
ui->label_token_verified->setPixmap(QPixmap(":/icons/failed.png")); ui->label_token_verified->setPixmap(QIcon::fromTheme("failed").pixmap(16));
} }
} }
@ -89,11 +90,11 @@ void ConfigureWeb::OnLoginVerified() {
ui->button_verify_login->setText(tr("Verify")); ui->button_verify_login->setText(tr("Verify"));
if (verified.get()) { if (verified.get()) {
user_verified = true; user_verified = true;
ui->label_username_verified->setPixmap(QPixmap(":/icons/checked.png")); ui->label_username_verified->setPixmap(QIcon::fromTheme("checked").pixmap(16));
ui->label_token_verified->setPixmap(QPixmap(":/icons/checked.png")); ui->label_token_verified->setPixmap(QIcon::fromTheme("checked").pixmap(16));
} else { } else {
ui->label_username_verified->setPixmap(QPixmap(":/icons/failed.png")); ui->label_username_verified->setPixmap(QIcon::fromTheme("failed").pixmap(16));
ui->label_token_verified->setPixmap(QPixmap(":/icons/failed.png")); ui->label_token_verified->setPixmap(QIcon::fromTheme("failed").pixmap(16));
QMessageBox::critical( QMessageBox::critical(
this, tr("Verification failed"), this, tr("Verification failed"),
tr("Verification failed. Check that you have entered your username and token " tr("Verification failed. Check that you have entered your username and token "

View file

@ -130,6 +130,7 @@ GMainWindow::GMainWindow() : config(new Config()), emu_thread(nullptr) {
game_list->PopulateAsync(UISettings::values.gamedir, UISettings::values.gamedir_deepscan); game_list->PopulateAsync(UISettings::values.gamedir, UISettings::values.gamedir_deepscan);
default_theme_paths = QIcon::themeSearchPaths();
UpdateUITheme(); UpdateUITheme();
// Show one-time "callout" messages to the user // Show one-time "callout" messages to the user
@ -1226,7 +1227,9 @@ void GMainWindow::filterBarSetChecked(bool state) {
} }
void GMainWindow::UpdateUITheme() { void GMainWindow::UpdateUITheme() {
if (UISettings::values.theme != UISettings::themes[0].second) { QStringList theme_paths(default_theme_paths);
if (UISettings::values.theme != UISettings::themes[0].second &&
!UISettings::values.theme.isEmpty()) {
QString theme_uri(":" + UISettings::values.theme + "/style.qss"); QString theme_uri(":" + UISettings::values.theme + "/style.qss");
QFile f(theme_uri); QFile f(theme_uri);
if (!f.exists()) { if (!f.exists()) {
@ -1237,10 +1240,15 @@ void GMainWindow::UpdateUITheme() {
qApp->setStyleSheet(ts.readAll()); qApp->setStyleSheet(ts.readAll());
GMainWindow::setStyleSheet(ts.readAll()); GMainWindow::setStyleSheet(ts.readAll());
} }
theme_paths.append(QStringList{":/icons/default", ":/icons/" + UISettings::values.theme});
QIcon::setThemeName(":/icons/" + UISettings::values.theme);
} else { } else {
qApp->setStyleSheet(""); qApp->setStyleSheet("");
GMainWindow::setStyleSheet(""); GMainWindow::setStyleSheet("");
theme_paths.append(QStringList{":/icons/default"});
QIcon::setThemeName(":/icons/default");
} }
QIcon::setThemeSearchPaths(theme_paths);
} }
void GMainWindow::LoadTranslation() { void GMainWindow::LoadTranslation() {

View file

@ -206,6 +206,9 @@ private:
QTranslator translator; QTranslator translator;
// stores default icon theme search paths for the platform
QStringList default_theme_paths;
protected: protected:
void dropEvent(QDropEvent* event) override; void dropEvent(QDropEvent* event) override;
void dragEnterEvent(QDragEnterEvent* event) override; void dragEnterEvent(QDragEnterEvent* event) override;