Browse Source

Merge pull request #2804 from Kloen/theming

citra-qt: UI Themes
pull/15/merge
bunnei 9 years ago
committed by GitHub
parent
commit
822e8d21ea
  1. BIN
      dist/qt_themes/qdarkstyle/rc/Hmovetoolbar.png
  2. BIN
      dist/qt_themes/qdarkstyle/rc/Hsepartoolbar.png
  3. BIN
      dist/qt_themes/qdarkstyle/rc/Vmovetoolbar.png
  4. BIN
      dist/qt_themes/qdarkstyle/rc/Vsepartoolbar.png
  5. BIN
      dist/qt_themes/qdarkstyle/rc/branch_closed-on.png
  6. BIN
      dist/qt_themes/qdarkstyle/rc/branch_closed.png
  7. BIN
      dist/qt_themes/qdarkstyle/rc/branch_open-on.png
  8. BIN
      dist/qt_themes/qdarkstyle/rc/branch_open.png
  9. BIN
      dist/qt_themes/qdarkstyle/rc/checkbox_checked.png
  10. BIN
      dist/qt_themes/qdarkstyle/rc/checkbox_checked_disabled.png
  11. BIN
      dist/qt_themes/qdarkstyle/rc/checkbox_checked_focus.png
  12. BIN
      dist/qt_themes/qdarkstyle/rc/checkbox_indeterminate.png
  13. BIN
      dist/qt_themes/qdarkstyle/rc/checkbox_indeterminate_disabled.png
  14. BIN
      dist/qt_themes/qdarkstyle/rc/checkbox_indeterminate_focus.png
  15. BIN
      dist/qt_themes/qdarkstyle/rc/checkbox_unchecked.png
  16. BIN
      dist/qt_themes/qdarkstyle/rc/checkbox_unchecked_disabled.png
  17. BIN
      dist/qt_themes/qdarkstyle/rc/checkbox_unchecked_focus.png
  18. BIN
      dist/qt_themes/qdarkstyle/rc/close-hover.png
  19. BIN
      dist/qt_themes/qdarkstyle/rc/close-pressed.png
  20. BIN
      dist/qt_themes/qdarkstyle/rc/close.png
  21. BIN
      dist/qt_themes/qdarkstyle/rc/down_arrow.png
  22. BIN
      dist/qt_themes/qdarkstyle/rc/down_arrow_disabled.png
  23. BIN
      dist/qt_themes/qdarkstyle/rc/left_arrow.png
  24. BIN
      dist/qt_themes/qdarkstyle/rc/left_arrow_disabled.png
  25. BIN
      dist/qt_themes/qdarkstyle/rc/radio_checked.png
  26. BIN
      dist/qt_themes/qdarkstyle/rc/radio_checked_disabled.png
  27. BIN
      dist/qt_themes/qdarkstyle/rc/radio_checked_focus.png
  28. BIN
      dist/qt_themes/qdarkstyle/rc/radio_unchecked.png
  29. BIN
      dist/qt_themes/qdarkstyle/rc/radio_unchecked_disabled.png
  30. BIN
      dist/qt_themes/qdarkstyle/rc/radio_unchecked_focus.png
  31. BIN
      dist/qt_themes/qdarkstyle/rc/right_arrow.png
  32. BIN
      dist/qt_themes/qdarkstyle/rc/right_arrow_disabled.png
  33. BIN
      dist/qt_themes/qdarkstyle/rc/sizegrip.png
  34. BIN
      dist/qt_themes/qdarkstyle/rc/stylesheet-branch-end.png
  35. BIN
      dist/qt_themes/qdarkstyle/rc/stylesheet-branch-more.png
  36. BIN
      dist/qt_themes/qdarkstyle/rc/stylesheet-vline.png
  37. BIN
      dist/qt_themes/qdarkstyle/rc/transparent.png
  38. BIN
      dist/qt_themes/qdarkstyle/rc/undock.png
  39. BIN
      dist/qt_themes/qdarkstyle/rc/up_arrow.png
  40. BIN
      dist/qt_themes/qdarkstyle/rc/up_arrow_disabled.png
  41. 46
      dist/qt_themes/qdarkstyle/style.qrc
  42. 1268
      dist/qt_themes/qdarkstyle/style.qss
  43. 7
      src/citra_qt/CMakeLists.txt
  44. 2
      src/citra_qt/configuration/config.cpp
  45. 9
      src/citra_qt/configuration/configure_general.cpp
  46. 28
      src/citra_qt/configuration/configure_general.ui
  47. 21
      src/citra_qt/main.cpp
  48. 1
      src/citra_qt/main.h
  49. 7
      src/citra_qt/ui_settings.h

BIN
dist/qt_themes/qdarkstyle/rc/Hmovetoolbar.png

After

Width: 16  |  Height: 64  |  Size: 220 B

BIN
dist/qt_themes/qdarkstyle/rc/Hsepartoolbar.png

After

Width: 7  |  Height: 63  |  Size: 172 B

BIN
dist/qt_themes/qdarkstyle/rc/Vmovetoolbar.png

After

Width: 54  |  Height: 10  |  Size: 228 B

BIN
dist/qt_themes/qdarkstyle/rc/Vsepartoolbar.png

After

Width: 63  |  Height: 7  |  Size: 187 B

BIN
dist/qt_themes/qdarkstyle/rc/branch_closed-on.png

After

Width: 6  |  Height: 9  |  Size: 147 B

BIN
dist/qt_themes/qdarkstyle/rc/branch_closed.png

After

Width: 6  |  Height: 9  |  Size: 160 B

BIN
dist/qt_themes/qdarkstyle/rc/branch_open-on.png

After

Width: 9  |  Height: 6  |  Size: 150 B

BIN
dist/qt_themes/qdarkstyle/rc/branch_open.png

After

Width: 9  |  Height: 6  |  Size: 166 B

BIN
dist/qt_themes/qdarkstyle/rc/checkbox_checked.png

After

Width: 32  |  Height: 32  |  Size: 492 B

BIN
dist/qt_themes/qdarkstyle/rc/checkbox_checked_disabled.png

After

Width: 32  |  Height: 32  |  Size: 491 B

BIN
dist/qt_themes/qdarkstyle/rc/checkbox_checked_focus.png

After

Width: 32  |  Height: 32  |  Size: 252 B

BIN
dist/qt_themes/qdarkstyle/rc/checkbox_indeterminate.png

After

Width: 32  |  Height: 32  |  Size: 493 B

BIN
dist/qt_themes/qdarkstyle/rc/checkbox_indeterminate_disabled.png

After

Width: 32  |  Height: 32  |  Size: 492 B

BIN
dist/qt_themes/qdarkstyle/rc/checkbox_indeterminate_focus.png

After

Width: 32  |  Height: 32  |  Size: 249 B

BIN
dist/qt_themes/qdarkstyle/rc/checkbox_unchecked.png

After

Width: 32  |  Height: 32  |  Size: 464 B

BIN
dist/qt_themes/qdarkstyle/rc/checkbox_unchecked_disabled.png

After

Width: 32  |  Height: 32  |  Size: 464 B

BIN
dist/qt_themes/qdarkstyle/rc/checkbox_unchecked_focus.png

After

Width: 32  |  Height: 32  |  Size: 240 B

BIN
dist/qt_themes/qdarkstyle/rc/close-hover.png

After

Width: 64  |  Height: 64  |  Size: 598 B

BIN
dist/qt_themes/qdarkstyle/rc/close-pressed.png

After

Width: 64  |  Height: 64  |  Size: 598 B

BIN
dist/qt_themes/qdarkstyle/rc/close.png

After

Width: 64  |  Height: 64  |  Size: 586 B

BIN
dist/qt_themes/qdarkstyle/rc/down_arrow.png

After

Width: 9  |  Height: 6  |  Size: 165 B

BIN
dist/qt_themes/qdarkstyle/rc/down_arrow_disabled.png

After

Width: 9  |  Height: 6  |  Size: 166 B

BIN
dist/qt_themes/qdarkstyle/rc/left_arrow.png

After

Width: 6  |  Height: 9  |  Size: 166 B

BIN
dist/qt_themes/qdarkstyle/rc/left_arrow_disabled.png

After

Width: 6  |  Height: 9  |  Size: 166 B

BIN
dist/qt_themes/qdarkstyle/rc/radio_checked.png

After

Width: 32  |  Height: 32  |  Size: 940 B

BIN
dist/qt_themes/qdarkstyle/rc/radio_checked_disabled.png

After

Width: 32  |  Height: 32  |  Size: 972 B

BIN
dist/qt_themes/qdarkstyle/rc/radio_checked_focus.png

After

Width: 32  |  Height: 32  |  Size: 846 B

BIN
dist/qt_themes/qdarkstyle/rc/radio_unchecked.png

After

Width: 32  |  Height: 32  |  Size: 728 B

BIN
dist/qt_themes/qdarkstyle/rc/radio_unchecked_disabled.png

After

Width: 32  |  Height: 32  |  Size: 760 B

BIN
dist/qt_themes/qdarkstyle/rc/radio_unchecked_focus.png

After

Width: 32  |  Height: 32  |  Size: 646 B

BIN
dist/qt_themes/qdarkstyle/rc/right_arrow.png

After

Width: 6  |  Height: 9  |  Size: 160 B

BIN
dist/qt_themes/qdarkstyle/rc/right_arrow_disabled.png

After

Width: 6  |  Height: 9  |  Size: 160 B

BIN
dist/qt_themes/qdarkstyle/rc/sizegrip.png

After

Width: 16  |  Height: 16  |  Size: 129 B

BIN
dist/qt_themes/qdarkstyle/rc/stylesheet-branch-end.png

After

Width: 81  |  Height: 58  |  Size: 224 B

BIN
dist/qt_themes/qdarkstyle/rc/stylesheet-branch-more.png

After

Width: 24  |  Height: 17  |  Size: 182 B

BIN
dist/qt_themes/qdarkstyle/rc/stylesheet-vline.png

After

Width: 81  |  Height: 58  |  Size: 239 B

BIN
dist/qt_themes/qdarkstyle/rc/transparent.png

After

Width: 64  |  Height: 64  |  Size: 195 B

BIN
dist/qt_themes/qdarkstyle/rc/undock.png

After

Width: 64  |  Height: 64  |  Size: 578 B

BIN
dist/qt_themes/qdarkstyle/rc/up_arrow.png

After

Width: 9  |  Height: 6  |  Size: 158 B

BIN
dist/qt_themes/qdarkstyle/rc/up_arrow_disabled.png

After

Width: 9  |  Height: 6  |  Size: 159 B

46
dist/qt_themes/qdarkstyle/style.qrc

@ -0,0 +1,46 @@
<RCC>
<qresource prefix="qss_icons">
<file>rc/up_arrow_disabled.png</file>
<file>rc/Hmovetoolbar.png</file>
<file>rc/stylesheet-branch-end.png</file>
<file>rc/branch_closed-on.png</file>
<file>rc/stylesheet-vline.png</file>
<file>rc/branch_closed.png</file>
<file>rc/branch_open-on.png</file>
<file>rc/transparent.png</file>
<file>rc/right_arrow_disabled.png</file>
<file>rc/sizegrip.png</file>
<file>rc/close.png</file>
<file>rc/close-hover.png</file>
<file>rc/close-pressed.png</file>
<file>rc/down_arrow.png</file>
<file>rc/Vmovetoolbar.png</file>
<file>rc/left_arrow.png</file>
<file>rc/stylesheet-branch-more.png</file>
<file>rc/up_arrow.png</file>
<file>rc/right_arrow.png</file>
<file>rc/left_arrow_disabled.png</file>
<file>rc/Hsepartoolbar.png</file>
<file>rc/branch_open.png</file>
<file>rc/Vsepartoolbar.png</file>
<file>rc/down_arrow_disabled.png</file>
<file>rc/undock.png</file>
<file>rc/checkbox_checked_disabled.png</file>
<file>rc/checkbox_checked_focus.png</file>
<file>rc/checkbox_checked.png</file>
<file>rc/checkbox_indeterminate.png</file>
<file>rc/checkbox_indeterminate_focus.png</file>
<file>rc/checkbox_unchecked_disabled.png</file>
<file>rc/checkbox_unchecked_focus.png</file>
<file>rc/checkbox_unchecked.png</file>
<file>rc/radio_checked_disabled.png</file>
<file>rc/radio_checked_focus.png</file>
<file>rc/radio_checked.png</file>
<file>rc/radio_unchecked_disabled.png</file>
<file>rc/radio_unchecked_focus.png</file>
<file>rc/radio_unchecked.png</file>
</qresource>
<qresource prefix="qdarkstyle">
<file>style.qss</file>
</qresource>
</RCC>

1268
dist/qt_themes/qdarkstyle/style.qss
File diff suppressed because it is too large
View File

7
src/citra_qt/CMakeLists.txt

@ -1,4 +1,5 @@
set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMakeModules) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMakeModules)
@ -75,6 +76,8 @@ set(UIS
main.ui main.ui
) )
file(GLOB_RECURSE THEMES ${CMAKE_SOURCE_DIR}/dist/qt_themes/*)
create_directory_groups(${SRCS} ${HEADERS} ${UIS}) create_directory_groups(${SRCS} ${HEADERS} ${UIS})
if (Qt5_FOUND) if (Qt5_FOUND)
@ -86,10 +89,10 @@ endif()
if (APPLE) if (APPLE)
set(MACOSX_ICON "../../dist/citra.icns") set(MACOSX_ICON "../../dist/citra.icns")
set_source_files_properties(${MACOSX_ICON} PROPERTIES MACOSX_PACKAGE_LOCATION Resources) set_source_files_properties(${MACOSX_ICON} PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
add_executable(citra-qt MACOSX_BUNDLE ${SRCS} ${HEADERS} ${UI_HDRS} ${MACOSX_ICON})
add_executable(citra-qt MACOSX_BUNDLE ${SRCS} ${HEADERS} ${UI_HDRS} ${THEMES} ${MACOSX_ICON})
set_target_properties(citra-qt PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist) set_target_properties(citra-qt PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist)
else() else()
add_executable(citra-qt ${SRCS} ${HEADERS} ${UI_HDRS})
add_executable(citra-qt ${SRCS} ${HEADERS} ${UI_HDRS} ${THEMES})
endif() endif()
target_link_libraries(citra-qt PRIVATE audio_core common core input_common network video_core) target_link_libraries(citra-qt PRIVATE audio_core common core input_common network video_core)
target_link_libraries(citra-qt PRIVATE Boost::boost glad nihstro-headers Qt5::OpenGL Qt5::Widgets) target_link_libraries(citra-qt PRIVATE Boost::boost glad nihstro-headers Qt5::OpenGL Qt5::Widgets)

2
src/citra_qt/configuration/config.cpp

@ -141,6 +141,7 @@ void Config::ReadValues() {
qt_config->endGroup(); qt_config->endGroup();
qt_config->beginGroup("UI"); qt_config->beginGroup("UI");
UISettings::values.theme = qt_config->value("theme", UISettings::themes[0].second).toString();
qt_config->beginGroup("UILayout"); qt_config->beginGroup("UILayout");
UISettings::values.geometry = qt_config->value("geometry").toByteArray(); UISettings::values.geometry = qt_config->value("geometry").toByteArray();
@ -281,6 +282,7 @@ void Config::SaveValues() {
qt_config->endGroup(); qt_config->endGroup();
qt_config->beginGroup("UI"); qt_config->beginGroup("UI");
qt_config->setValue("theme", UISettings::values.theme);
qt_config->beginGroup("UILayout"); qt_config->beginGroup("UILayout");
qt_config->setValue("geometry", UISettings::values.geometry); qt_config->setValue("geometry", UISettings::values.geometry);

9
src/citra_qt/configuration/configure_general.cpp

@ -12,6 +12,11 @@ ConfigureGeneral::ConfigureGeneral(QWidget* parent)
: QWidget(parent), ui(new Ui::ConfigureGeneral) { : QWidget(parent), ui(new Ui::ConfigureGeneral) {
ui->setupUi(this); ui->setupUi(this);
for (auto theme : UISettings::themes) {
ui->theme_combobox->addItem(theme.first, theme.second);
}
this->setConfiguration(); this->setConfiguration();
ui->toggle_cpu_jit->setEnabled(!Core::System::GetInstance().IsPoweredOn()); ui->toggle_cpu_jit->setEnabled(!Core::System::GetInstance().IsPoweredOn());
@ -26,11 +31,15 @@ void ConfigureGeneral::setConfiguration() {
// The first item is "auto-select" with actual value -1, so plus one here will do the trick // The first item is "auto-select" with actual value -1, so plus one here will do the trick
ui->region_combobox->setCurrentIndex(Settings::values.region_value + 1); ui->region_combobox->setCurrentIndex(Settings::values.region_value + 1);
ui->theme_combobox->setCurrentIndex(ui->theme_combobox->findData(UISettings::values.theme));
} }
void ConfigureGeneral::applyConfiguration() { void ConfigureGeneral::applyConfiguration() {
UISettings::values.gamedir_deepscan = ui->toggle_deepscan->isChecked(); UISettings::values.gamedir_deepscan = ui->toggle_deepscan->isChecked();
UISettings::values.confirm_before_closing = ui->toggle_check_exit->isChecked(); UISettings::values.confirm_before_closing = ui->toggle_check_exit->isChecked();
UISettings::values.theme =
ui->theme_combobox->itemData(ui->theme_combobox->currentIndex()).toString();
Settings::values.region_value = ui->region_combobox->currentIndex() - 1; Settings::values.region_value = ui->region_combobox->currentIndex() - 1;
Settings::values.use_cpu_jit = ui->toggle_cpu_jit->isChecked(); Settings::values.use_cpu_jit = ui->toggle_cpu_jit->isChecked();
Settings::Apply(); Settings::Apply();

28
src/citra_qt/configuration/configure_general.ui

@ -131,6 +131,34 @@
</layout> </layout>
</widget> </widget>
</item> </item>
<item>
<widget class="QGroupBox" name="theme_group_box">
<property name="title">
<string>Theme</string>
</property>
<layout class="QHBoxLayout" name="theme_qhbox_layout">
<item>
<layout class="QVBoxLayout" name="theme_qvbox_layout">
<item>
<layout class="QHBoxLayout" name="theme_qhbox_layout_2">
<item>
<widget class="QLabel" name="theme_label">
<property name="text">
<string>Theme:</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="theme_combobox">
</widget>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item> <item>
<widget class="QGroupBox" name="groupBox_3"> <widget class="QGroupBox" name="groupBox_3">
<property name="title"> <property name="title">

21
src/citra_qt/main.cpp

@ -71,6 +71,8 @@ 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);
UpdateUITheme();
QStringList args = QApplication::arguments(); QStringList args = QApplication::arguments();
if (args.length() >= 2) { if (args.length() >= 2) {
BootGame(args[1]); BootGame(args[1]);
@ -606,6 +608,7 @@ void GMainWindow::OnConfigure() {
auto result = configureDialog.exec(); auto result = configureDialog.exec();
if (result == QDialog::Accepted) { if (result == QDialog::Accepted) {
configureDialog.applyConfiguration(); configureDialog.applyConfiguration();
UpdateUITheme();
config->Save(); config->Save();
} }
} }
@ -791,6 +794,24 @@ void GMainWindow::filterBarSetChecked(bool state) {
emit(OnToggleFilterBar()); emit(OnToggleFilterBar());
} }
void GMainWindow::UpdateUITheme() {
if (UISettings::values.theme != UISettings::themes[0].second) {
QString theme_uri(":" + UISettings::values.theme + "/style.qss");
QFile f(theme_uri);
if (!f.exists()) {
LOG_ERROR(Frontend, "Unable to set style, stylesheet file not found");
} else {
f.open(QFile::ReadOnly | QFile::Text);
QTextStream ts(&f);
qApp->setStyleSheet(ts.readAll());
GMainWindow::setStyleSheet(ts.readAll());
}
} else {
qApp->setStyleSheet("");
GMainWindow::setStyleSheet("");
}
}
#ifdef main #ifdef main
#undef main #undef main
#endif #endif

1
src/citra_qt/main.h

@ -42,6 +42,7 @@ class GMainWindow : public QMainWindow {
public: public:
void filterBarSetChecked(bool state); void filterBarSetChecked(bool state);
void UpdateUITheme();
GMainWindow(); GMainWindow();
~GMainWindow(); ~GMainWindow();

7
src/citra_qt/ui_settings.h

@ -4,6 +4,7 @@
#pragma once #pragma once
#include <array>
#include <vector> #include <vector>
#include <QByteArray> #include <QByteArray>
#include <QString> #include <QString>
@ -14,6 +15,10 @@ namespace UISettings {
using ContextualShortcut = std::pair<QString, int>; using ContextualShortcut = std::pair<QString, int>;
using Shortcut = std::pair<QString, ContextualShortcut>; using Shortcut = std::pair<QString, ContextualShortcut>;
static const std::array<std::pair<QString, QString>, 2> themes = {
{std::make_pair(QString("Default"), QString("default")),
std::make_pair(QString("Dark"), QString("qdarkstyle"))}};
struct Values { struct Values {
QByteArray geometry; QByteArray geometry;
QByteArray state; QByteArray state;
@ -39,6 +44,8 @@ struct Values {
bool gamedir_deepscan; bool gamedir_deepscan;
QStringList recent_files; QStringList recent_files;
QString theme;
// Shortcut name <Shortcut, context> // Shortcut name <Shortcut, context>
std::vector<Shortcut> shortcuts; std::vector<Shortcut> shortcuts;
}; };

Loading…
Cancel
Save