From eae9f2e4404f6bdf8a192bc9c09e53cd87e4359d Mon Sep 17 00:00:00 2001 From: bunnei Date: Sun, 14 Feb 2021 00:20:41 -0800 Subject: [PATCH] yuzu: Various frontend improvements to avoid crashes and improve experience on Linux. --- dist/qt_themes/colorful_dark/icons/index.theme | 2 +- .../colorful_midnight_blue/icons/index.theme | 2 +- .../qdarkstyle_midnight_blue/style.qss | 4 ---- dist/yuzu.bmp | Bin 0 -> 262282 bytes src/video_core/shader/async_shaders.cpp | 1 + src/yuzu/CMakeLists.txt | 1 + src/yuzu/main.cpp | 10 +++------- src/yuzu/main.ui | 8 +++++--- src/yuzu/yuzu.qrc | 5 +++++ src/yuzu_cmd/CMakeLists.txt | 13 +++++++++++++ src/yuzu_cmd/emu_window/emu_window_sdl2.cpp | 17 +++++++++++++++++ src/yuzu_cmd/emu_window/emu_window_sdl2.h | 3 +++ src/yuzu_cmd/emu_window/emu_window_sdl2_gl.cpp | 2 ++ src/yuzu_cmd/emu_window/emu_window_sdl2_vk.cpp | 2 ++ 14 files changed, 54 insertions(+), 16 deletions(-) create mode 100644 dist/yuzu.bmp create mode 100644 src/yuzu/yuzu.qrc diff --git a/dist/qt_themes/colorful_dark/icons/index.theme b/dist/qt_themes/colorful_dark/icons/index.theme index 94d5ae8aaf..19dc0369a4 100644 --- a/dist/qt_themes/colorful_dark/icons/index.theme +++ b/dist/qt_themes/colorful_dark/icons/index.theme @@ -1,7 +1,7 @@ [Icon Theme] Name=colorful_dark Comment=Colorful theme (Dark style) -Inherits=default +Inherits=colorful Directories=16x16 [16x16] diff --git a/dist/qt_themes/colorful_midnight_blue/icons/index.theme b/dist/qt_themes/colorful_midnight_blue/icons/index.theme index e23bfe6f99..dcb2c50d68 100644 --- a/dist/qt_themes/colorful_midnight_blue/icons/index.theme +++ b/dist/qt_themes/colorful_midnight_blue/icons/index.theme @@ -1,7 +1,7 @@ [Icon Theme] Name=colorful_midnight_blue Comment=Colorful theme (Midnight Blue style) -Inherits=default +Inherits=colorful Directories=16x16 [16x16] diff --git a/dist/qt_themes/qdarkstyle_midnight_blue/style.qss b/dist/qt_themes/qdarkstyle_midnight_blue/style.qss index 70e540b068..a640374550 100644 --- a/dist/qt_themes/qdarkstyle_midnight_blue/style.qss +++ b/dist/qt_themes/qdarkstyle_midnight_blue/style.qss @@ -1257,10 +1257,6 @@ QComboBox::item:alternate { background: #19232D; } -QComboBox::item:checked { - font-weight: bold; -} - QComboBox::item:selected { border: 0px solid transparent; } diff --git a/dist/yuzu.bmp b/dist/yuzu.bmp new file mode 100644 index 0000000000000000000000000000000000000000..66f2f696f015f4c8e68c4859e8a1bda57fd5c05c GIT binary patch literal 262282 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 z%0DORR0e?B0c(#*EicWqUl=&az_t7@M&};*clb=b|148{11xb z(Kf))YXgvzpGnmNN*i>>HUpIZL1h34H`2(zgFF9^wgHA*8-UcjOpbaQ4vz=VlRPz7e&;O%s zfFaceAT=+Oqn=7>A6p$yjF|fXw*x?B00{4Wwv!8VuL&`3#-(P^=YLRKkG27ZP8)!n z{7kAIP?{KEZ24>_*FcR4g7Q8xKJaWOmmQhmF*Nf3Xd7V2v;j!X%jBphGp*yQ1IZQF ze72M8%^+zDfXai5&vtTw?jvR+A$*2J{s;MIv<)yc+5qI_XHxZm(!(IZa?f^hJsd=3 z0H_=Qoi)_^Y$ul%5n(iR@;|f<@MMPwgQEFI27c}T4BB=>BTryECvUilk(!suQBOp= zCbv!}M<3s_om@u;Ss4H-2S6A!R+x)tJt62U5|BD-VUq6uBQ+kuZGck@4BKb4r|~7Y@=g0F<}?KHJH)|JhEiBD8ja6_wpg+x)+So8kFR z4u=0%7#McU@n_)E9xVe#^FJ3kbvCW^fX?&)<+s6(uRhz!RrPEq7wFz{YPyxC`5#n{ zKOHRt2K87VsdYIy>OtvX5M$690b1TOOwIgCZL?^e|3UFSS_TZ>aSw9xGpTw&X<(3J z@n<`^XnoHpwev1D%%e;G2gUtp88A4@08;ZZIqE_2KSXd3mHXG!$fLA0gKqgB6#t`T zz~Czb$jQ&7>H)?55W=7__ID$s9H49d2c-ezGGNzSe+F)i{|v0Eka+=3+rgJV2HSWY zwcSH%UM5F9DBgz{=6SZ0YxM{y1L&UrLFoWq23%lZII-M$^W3V04f8XZ0BP5e}RGF-&qERkciz342qDnKUxMr z!U0qs(i)SRm&s8NitizeL2ZF0!?Z0hVEG@G9v*M!Vfb;3f#L6I28Phc(K3M6`5oPS za`H2&dSG!q#A(pln`^_Y92oHY4@wiGWdQx^`_cSQ@%p2@XFIt-cZ6eWPY*S*L6QH_ z%YcaJ-3$zp{~6@WAmf7QX?B!Pz4C(8x||&Kp!gkT7}O`2It-C7Ug%3>*F9V3kGfe2c;KK8GyV- zAUtYxTo79yo)R%~@-wM=Kyf)jF~_r=TxrjCa)HkJ8jN!TgF64i(hO)!0JKJ6bX<`7 zeF0MQGCAsD@i@Y1<7Yd$W(>0RghL|#gVGJC41kRb?wB1gx^I9=e% z1fK2Wig~t^YuNyuO+2LXKPU}>%7D=^0qXSw$jQ&7>H)>uD8`!qk;?*5y8v{)FKFEG z^s}8@zv<967;^a^mX1LE0oa&8XH7eUn89!G9zxI=!=w9$h%X;V&CBGdhsD__O|T3= zE)PI+2%vrf=xlJ%ogtrSP#z4~{0~Y?pfUhFCUAp+;n-43@IGQ@<^K%Imj4;FM$Zx; zs*gZUekN59D6U2^NqHZ+9DuPwYmRN7?c_>-wv%i6vz=VKp6%qiM`4)&YG=UAACfe3 zf8ft)28M)$9Sj`mkaLDX?Eny_WPWV8>m@ZWlcRn#?^B%japg^xXFIu+p6%qahmIpu zKikPQ6S@}h#Iv1T51?xh{@^Glt_+vB0ks7_A7*6uf1ZJ1<-{-sHET#aK%GkCA(D t83-4Dw2hnL$594`|7RH()=v#!(6;-{Aa6!|UwF9YaeV$FH7|qI0|1~FDv1C9 literal 0 HcmV?d00001 diff --git a/src/video_core/shader/async_shaders.cpp b/src/video_core/shader/async_shaders.cpp index 3b40db9bcb..02adcf9c79 100644 --- a/src/video_core/shader/async_shaders.cpp +++ b/src/video_core/shader/async_shaders.cpp @@ -64,6 +64,7 @@ void AsyncShaders::FreeWorkers() { void AsyncShaders::KillWorkers() { is_thread_exiting.store(true); + cv.notify_all(); for (auto& thread : worker_threads) { thread.detach(); } diff --git a/src/yuzu/CMakeLists.txt b/src/yuzu/CMakeLists.txt index fb9967c8f2..b025ced1c8 100644 --- a/src/yuzu/CMakeLists.txt +++ b/src/yuzu/CMakeLists.txt @@ -151,6 +151,7 @@ add_executable(yuzu util/util.h compatdb.cpp compatdb.h + yuzu.qrc yuzu.rc ) diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index 28a52a56c0..0ba7c07cc9 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -2770,7 +2770,7 @@ void GMainWindow::OnReinitializeKeys(ReinitializeKeyBehavior behavior) { .arg(errors)); } - QProgressDialog prog; + QProgressDialog prog(this); prog.setRange(0, 0); prog.setLabelText(tr("Deriving keys...\nThis may take up to a minute depending \non your " "system's performance.")); @@ -2952,7 +2952,7 @@ void GMainWindow::filterBarSetChecked(bool state) { } void GMainWindow::UpdateUITheme() { - const QString default_icons = QStringLiteral(":/icons/default"); + const QString default_icons = QStringLiteral("default"); const QString& current_theme = UISettings::values.theme; const bool is_default_theme = current_theme == QString::fromUtf8(UISettings::themes[0].second); QStringList theme_paths(default_theme_paths); @@ -2968,7 +2968,6 @@ void GMainWindow::UpdateUITheme() { qApp->setStyleSheet({}); setStyleSheet({}); } - theme_paths.append(default_icons); QIcon::setThemeName(default_icons); } else { const QString theme_uri(QLatin1Char{':'} + current_theme + QStringLiteral("/style.qss")); @@ -2980,10 +2979,7 @@ void GMainWindow::UpdateUITheme() { } else { LOG_ERROR(Frontend, "Unable to set style, stylesheet file not found"); } - - const QString theme_name = QStringLiteral(":/icons/") + current_theme; - theme_paths.append({default_icons, theme_name}); - QIcon::setThemeName(theme_name); + QIcon::setThemeName(current_theme); } QIcon::setThemeSearchPaths(theme_paths); diff --git a/src/yuzu/main.ui b/src/yuzu/main.ui index e2ad5baf69..0488706875 100644 --- a/src/yuzu/main.ui +++ b/src/yuzu/main.ui @@ -14,8 +14,8 @@ yuzu - - ../dist/yuzu.ico../dist/yuzu.ico + + :/img/yuzu.ico:/img/yuzu.ico QTabWidget::Rounded @@ -303,6 +303,8 @@ - + + + diff --git a/src/yuzu/yuzu.qrc b/src/yuzu/yuzu.qrc new file mode 100644 index 0000000000..5733cac988 --- /dev/null +++ b/src/yuzu/yuzu.qrc @@ -0,0 +1,5 @@ + + + ../../dist/yuzu.ico + + diff --git a/src/yuzu_cmd/CMakeLists.txt b/src/yuzu_cmd/CMakeLists.txt index 0b3f2cb54f..8461f8896e 100644 --- a/src/yuzu_cmd/CMakeLists.txt +++ b/src/yuzu_cmd/CMakeLists.txt @@ -1,5 +1,15 @@ set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMakeModules) +function(create_resource file output filename) + # Read hex data from file + file(READ ${file} filedata HEX) + # Convert hex data for C compatibility + string(REGEX REPLACE "([0-9a-f][0-9a-f])" "0x\\1," filedata ${filedata}) + # Write data to output file + set(RESOURCES_DIR "${PROJECT_BINARY_DIR}/dist" PARENT_SCOPE) + file(WRITE "${PROJECT_BINARY_DIR}/dist/${output}" "const unsigned char ${filename}[] = {${filedata}};\nconst unsigned ${filename}_size = sizeof(${filename});\n") +endfunction() + add_executable(yuzu-cmd config.cpp config.h @@ -24,6 +34,9 @@ if (MSVC) endif() target_link_libraries(yuzu-cmd PRIVATE ${PLATFORM_LIBRARIES} SDL2 Threads::Threads) +create_resource("../../dist/yuzu.bmp" "yuzu_cmd/yuzu_icon.h" "yuzu_icon") +target_include_directories(yuzu-cmd PRIVATE ${RESOURCES_DIR}) + target_include_directories(yuzu-cmd PRIVATE ../../externals/Vulkan-Headers/include) if(UNIX AND NOT APPLE) diff --git a/src/yuzu_cmd/emu_window/emu_window_sdl2.cpp b/src/yuzu_cmd/emu_window/emu_window_sdl2.cpp index 39841aa28f..7e391ab895 100644 --- a/src/yuzu_cmd/emu_window/emu_window_sdl2.cpp +++ b/src/yuzu_cmd/emu_window/emu_window_sdl2.cpp @@ -12,6 +12,7 @@ #include "input_common/mouse/mouse_input.h" #include "input_common/sdl/sdl.h" #include "yuzu_cmd/emu_window/emu_window_sdl2.h" +#include "yuzu_cmd/yuzu_icon.h" EmuWindow_SDL2::EmuWindow_SDL2(InputCommon::InputSubsystem* input_subsystem_) : input_subsystem{input_subsystem_} { @@ -194,6 +195,22 @@ void EmuWindow_SDL2::WaitEvent() { } } +void EmuWindow_SDL2::SetWindowIcon() { + SDL_RWops* const yuzu_icon_stream = SDL_RWFromConstMem((void*)yuzu_icon, yuzu_icon_size); + if (yuzu_icon_stream == nullptr) { + LOG_WARNING(Frontend, "Failed to create yuzu icon stream."); + return; + } + SDL_Surface* const window_icon = SDL_LoadBMP_RW(yuzu_icon_stream, 1); + if (window_icon == nullptr) { + LOG_WARNING(Frontend, "Failed to read BMP from stream."); + return; + } + // The icon is attached to the window pointer + SDL_SetWindowIcon(render_window, window_icon); + SDL_FreeSurface(window_icon); +} + void EmuWindow_SDL2::OnMinimalClientAreaChangeRequest(std::pair minimal_size) { SDL_SetWindowMinimumSize(render_window, minimal_size.first, minimal_size.second); } diff --git a/src/yuzu_cmd/emu_window/emu_window_sdl2.h b/src/yuzu_cmd/emu_window/emu_window_sdl2.h index a931412401..51a12a6a97 100644 --- a/src/yuzu_cmd/emu_window/emu_window_sdl2.h +++ b/src/yuzu_cmd/emu_window/emu_window_sdl2.h @@ -32,6 +32,9 @@ public: /// Wait for the next event on the main thread. void WaitEvent(); + // Sets the window icon from yuzu.bmp + void SetWindowIcon(); + protected: /// Called by WaitEvent when a key is pressed or released. void OnKeyEvent(int key, u8 state); diff --git a/src/yuzu_cmd/emu_window/emu_window_sdl2_gl.cpp b/src/yuzu_cmd/emu_window/emu_window_sdl2_gl.cpp index deddea9ee8..a02485c14e 100644 --- a/src/yuzu_cmd/emu_window/emu_window_sdl2_gl.cpp +++ b/src/yuzu_cmd/emu_window/emu_window_sdl2_gl.cpp @@ -107,6 +107,8 @@ EmuWindow_SDL2_GL::EmuWindow_SDL2_GL(InputCommon::InputSubsystem* input_subsyste dummy_window = SDL_CreateWindow(NULL, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 0, 0, SDL_WINDOW_HIDDEN | SDL_WINDOW_OPENGL); + SetWindowIcon(); + if (fullscreen) { Fullscreen(); } diff --git a/src/yuzu_cmd/emu_window/emu_window_sdl2_vk.cpp b/src/yuzu_cmd/emu_window/emu_window_sdl2_vk.cpp index 3ba657c007..6f9b00461d 100644 --- a/src/yuzu_cmd/emu_window/emu_window_sdl2_vk.cpp +++ b/src/yuzu_cmd/emu_window/emu_window_sdl2_vk.cpp @@ -35,6 +35,8 @@ EmuWindow_SDL2_VK::EmuWindow_SDL2_VK(InputCommon::InputSubsystem* input_subsyste std::exit(EXIT_FAILURE); } + SetWindowIcon(); + switch (wm.subsystem) { #ifdef SDL_VIDEO_DRIVER_WINDOWS case SDL_SYSWM_TYPE::SDL_SYSWM_WINDOWS: