summaryrefslogtreecommitdiff
path: root/src/yuzu_cmd/emu_window
diff options
context:
space:
mode:
authorGravatar bunnei2021-02-14 00:20:41 -0800
committerGravatar bunnei2021-02-14 00:20:41 -0800
commiteae9f2e4404f6bdf8a192bc9c09e53cd87e4359d (patch)
tree3f5cfe0d7067853437249cd167e79d9299c984b1 /src/yuzu_cmd/emu_window
parentMerge pull request #5925 from ReinUsesLisp/resource-pool-clean (diff)
downloadyuzu-eae9f2e4404f6bdf8a192bc9c09e53cd87e4359d.tar.gz
yuzu-eae9f2e4404f6bdf8a192bc9c09e53cd87e4359d.tar.xz
yuzu-eae9f2e4404f6bdf8a192bc9c09e53cd87e4359d.zip
yuzu: Various frontend improvements to avoid crashes and improve experience on Linux.
Diffstat (limited to 'src/yuzu_cmd/emu_window')
-rw-r--r--src/yuzu_cmd/emu_window/emu_window_sdl2.cpp17
-rw-r--r--src/yuzu_cmd/emu_window/emu_window_sdl2.h3
-rw-r--r--src/yuzu_cmd/emu_window/emu_window_sdl2_gl.cpp2
-rw-r--r--src/yuzu_cmd/emu_window/emu_window_sdl2_vk.cpp2
4 files changed, 24 insertions, 0 deletions
diff --git a/src/yuzu_cmd/emu_window/emu_window_sdl2.cpp b/src/yuzu_cmd/emu_window/emu_window_sdl2.cpp
index 39841aa28..7e391ab89 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 @@
12#include "input_common/mouse/mouse_input.h" 12#include "input_common/mouse/mouse_input.h"
13#include "input_common/sdl/sdl.h" 13#include "input_common/sdl/sdl.h"
14#include "yuzu_cmd/emu_window/emu_window_sdl2.h" 14#include "yuzu_cmd/emu_window/emu_window_sdl2.h"
15#include "yuzu_cmd/yuzu_icon.h"
15 16
16EmuWindow_SDL2::EmuWindow_SDL2(InputCommon::InputSubsystem* input_subsystem_) 17EmuWindow_SDL2::EmuWindow_SDL2(InputCommon::InputSubsystem* input_subsystem_)
17 : input_subsystem{input_subsystem_} { 18 : input_subsystem{input_subsystem_} {
@@ -194,6 +195,22 @@ void EmuWindow_SDL2::WaitEvent() {
194 } 195 }
195} 196}
196 197
198void EmuWindow_SDL2::SetWindowIcon() {
199 SDL_RWops* const yuzu_icon_stream = SDL_RWFromConstMem((void*)yuzu_icon, yuzu_icon_size);
200 if (yuzu_icon_stream == nullptr) {
201 LOG_WARNING(Frontend, "Failed to create yuzu icon stream.");
202 return;
203 }
204 SDL_Surface* const window_icon = SDL_LoadBMP_RW(yuzu_icon_stream, 1);
205 if (window_icon == nullptr) {
206 LOG_WARNING(Frontend, "Failed to read BMP from stream.");
207 return;
208 }
209 // The icon is attached to the window pointer
210 SDL_SetWindowIcon(render_window, window_icon);
211 SDL_FreeSurface(window_icon);
212}
213
197void EmuWindow_SDL2::OnMinimalClientAreaChangeRequest(std::pair<unsigned, unsigned> minimal_size) { 214void EmuWindow_SDL2::OnMinimalClientAreaChangeRequest(std::pair<unsigned, unsigned> minimal_size) {
198 SDL_SetWindowMinimumSize(render_window, minimal_size.first, minimal_size.second); 215 SDL_SetWindowMinimumSize(render_window, minimal_size.first, minimal_size.second);
199} 216}
diff --git a/src/yuzu_cmd/emu_window/emu_window_sdl2.h b/src/yuzu_cmd/emu_window/emu_window_sdl2.h
index a93141240..51a12a6a9 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:
32 /// Wait for the next event on the main thread. 32 /// Wait for the next event on the main thread.
33 void WaitEvent(); 33 void WaitEvent();
34 34
35 // Sets the window icon from yuzu.bmp
36 void SetWindowIcon();
37
35protected: 38protected:
36 /// Called by WaitEvent when a key is pressed or released. 39 /// Called by WaitEvent when a key is pressed or released.
37 void OnKeyEvent(int key, u8 state); 40 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 deddea9ee..a02485c14 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
107 dummy_window = SDL_CreateWindow(NULL, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 0, 0, 107 dummy_window = SDL_CreateWindow(NULL, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 0, 0,
108 SDL_WINDOW_HIDDEN | SDL_WINDOW_OPENGL); 108 SDL_WINDOW_HIDDEN | SDL_WINDOW_OPENGL);
109 109
110 SetWindowIcon();
111
110 if (fullscreen) { 112 if (fullscreen) {
111 Fullscreen(); 113 Fullscreen();
112 } 114 }
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 3ba657c00..6f9b00461 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
35 std::exit(EXIT_FAILURE); 35 std::exit(EXIT_FAILURE);
36 } 36 }
37 37
38 SetWindowIcon();
39
38 switch (wm.subsystem) { 40 switch (wm.subsystem) {
39#ifdef SDL_VIDEO_DRIVER_WINDOWS 41#ifdef SDL_VIDEO_DRIVER_WINDOWS
40 case SDL_SYSWM_TYPE::SDL_SYSWM_WINDOWS: 42 case SDL_SYSWM_TYPE::SDL_SYSWM_WINDOWS: