mirror of
				https://git.suyu.dev/suyu/suyu.git
				synced 2025-10-31 23:06:43 +08:00 
			
		
		
		
	yuzu_cmd: Use new input
This commit is contained in:
		
							parent
							
								
									737d305f63
								
							
						
					
					
						commit
						14b949a0da
					
				| @ -9,10 +9,10 @@ | |||||||
| #include "common/settings.h" | #include "common/settings.h" | ||||||
| #include "core/core.h" | #include "core/core.h" | ||||||
| #include "core/perf_stats.h" | #include "core/perf_stats.h" | ||||||
| #include "input_common/keyboard.h" | #include "input_common/drivers/keyboard.h" | ||||||
|  | #include "input_common/drivers/mouse.h" | ||||||
|  | #include "input_common/drivers/touch_screen.h" | ||||||
| #include "input_common/main.h" | #include "input_common/main.h" | ||||||
| #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/emu_window/emu_window_sdl2.h" | ||||||
| #include "yuzu_cmd/yuzu_icon.h" | #include "yuzu_cmd/yuzu_icon.h" | ||||||
| 
 | 
 | ||||||
| @ -32,42 +32,32 @@ EmuWindow_SDL2::~EmuWindow_SDL2() { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void EmuWindow_SDL2::OnMouseMotion(s32 x, s32 y) { | void EmuWindow_SDL2::OnMouseMotion(s32 x, s32 y) { | ||||||
|     TouchMoved((unsigned)std::max(x, 0), (unsigned)std::max(y, 0), 0); |     input_subsystem->GetMouse()->MouseMove(x, y, 0, 0, 0, 0); | ||||||
| 
 |  | ||||||
|     input_subsystem->GetMouse()->MouseMove(x, y, 0, 0); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| MouseInput::MouseButton EmuWindow_SDL2::SDLButtonToMouseButton(u32 button) const { | InputCommon::MouseButton EmuWindow_SDL2::SDLButtonToMouseButton(u32 button) const { | ||||||
|     switch (button) { |     switch (button) { | ||||||
|     case SDL_BUTTON_LEFT: |     case SDL_BUTTON_LEFT: | ||||||
|         return MouseInput::MouseButton::Left; |         return InputCommon::MouseButton::Left; | ||||||
|     case SDL_BUTTON_RIGHT: |     case SDL_BUTTON_RIGHT: | ||||||
|         return MouseInput::MouseButton::Right; |         return InputCommon::MouseButton::Right; | ||||||
|     case SDL_BUTTON_MIDDLE: |     case SDL_BUTTON_MIDDLE: | ||||||
|         return MouseInput::MouseButton::Wheel; |         return InputCommon::MouseButton::Wheel; | ||||||
|     case SDL_BUTTON_X1: |     case SDL_BUTTON_X1: | ||||||
|         return MouseInput::MouseButton::Backward; |         return InputCommon::MouseButton::Backward; | ||||||
|     case SDL_BUTTON_X2: |     case SDL_BUTTON_X2: | ||||||
|         return MouseInput::MouseButton::Forward; |         return InputCommon::MouseButton::Forward; | ||||||
|     default: |     default: | ||||||
|         return MouseInput::MouseButton::Undefined; |         return InputCommon::MouseButton::Undefined; | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void EmuWindow_SDL2::OnMouseButton(u32 button, u8 state, s32 x, s32 y) { | void EmuWindow_SDL2::OnMouseButton(u32 button, u8 state, s32 x, s32 y) { | ||||||
|     const auto mouse_button = SDLButtonToMouseButton(button); |     const auto mouse_button = SDLButtonToMouseButton(button); | ||||||
|     if (button == SDL_BUTTON_LEFT) { |     if (state == SDL_PRESSED) { | ||||||
|         if (state == SDL_PRESSED) { |         input_subsystem->GetMouse()->PressButton(x, y, 0, 0, mouse_button); | ||||||
|             TouchPressed((unsigned)std::max(x, 0), (unsigned)std::max(y, 0), 0); |  | ||||||
|         } else { |  | ||||||
|             TouchReleased(0); |  | ||||||
|         } |  | ||||||
|     } else { |     } else { | ||||||
|         if (state == SDL_PRESSED) { |         input_subsystem->GetMouse()->ReleaseButton(mouse_button); | ||||||
|             input_subsystem->GetMouse()->PressButton(x, y, mouse_button); |  | ||||||
|         } else { |  | ||||||
|             input_subsystem->GetMouse()->ReleaseButton(mouse_button); |  | ||||||
|         } |  | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -82,29 +72,35 @@ std::pair<unsigned, unsigned> EmuWindow_SDL2::TouchToPixelPos(float touch_x, flo | |||||||
|             static_cast<unsigned>(std::max(std::round(touch_y), 0.0f))}; |             static_cast<unsigned>(std::max(std::round(touch_y), 0.0f))}; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void EmuWindow_SDL2::OnFingerDown(float x, float y) { | void EmuWindow_SDL2::OnFingerDown(float x, float y, std::size_t id) { | ||||||
|     // TODO(NeatNit): keep track of multitouch using the fingerID and a dictionary of some kind
 |     int width, height; | ||||||
|     // This isn't critical because the best we can do when we have that is to average them, like the
 |     SDL_GetWindowSize(render_window, &width, &height); | ||||||
|     // 3DS does
 |  | ||||||
| 
 |  | ||||||
|     const auto [px, py] = TouchToPixelPos(x, y); |     const auto [px, py] = TouchToPixelPos(x, y); | ||||||
|     TouchPressed(px, py, 0); |     const float fx = px * 1.0f / width; | ||||||
|  |     const float fy = py * 1.0f / height; | ||||||
|  | 
 | ||||||
|  |     input_subsystem->GetTouchScreen()->TouchPressed(fx, fy, id); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void EmuWindow_SDL2::OnFingerMotion(float x, float y) { | void EmuWindow_SDL2::OnFingerMotion(float x, float y, std::size_t id) { | ||||||
|  |     int width, height; | ||||||
|  |     SDL_GetWindowSize(render_window, &width, &height); | ||||||
|     const auto [px, py] = TouchToPixelPos(x, y); |     const auto [px, py] = TouchToPixelPos(x, y); | ||||||
|     TouchMoved(px, py, 0); |     const float fx = px * 1.0f / width; | ||||||
|  |     const float fy = py * 1.0f / height; | ||||||
|  | 
 | ||||||
|  |     input_subsystem->GetTouchScreen()->TouchMoved(fx, fy, id); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void EmuWindow_SDL2::OnFingerUp() { | void EmuWindow_SDL2::OnFingerUp() { | ||||||
|     TouchReleased(0); |     input_subsystem->GetTouchScreen()->TouchReleased(0); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void EmuWindow_SDL2::OnKeyEvent(int key, u8 state) { | void EmuWindow_SDL2::OnKeyEvent(int key, u8 state) { | ||||||
|     if (state == SDL_PRESSED) { |     if (state == SDL_PRESSED) { | ||||||
|         input_subsystem->GetKeyboard()->PressKey(key); |         input_subsystem->GetKeyboard()->PressKey(static_cast<std::size_t>(key)); | ||||||
|     } else if (state == SDL_RELEASED) { |     } else if (state == SDL_RELEASED) { | ||||||
|         input_subsystem->GetKeyboard()->ReleaseKey(key); |         input_subsystem->GetKeyboard()->ReleaseKey(static_cast<std::size_t>(key)); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -205,10 +201,12 @@ void EmuWindow_SDL2::WaitEvent() { | |||||||
|         } |         } | ||||||
|         break; |         break; | ||||||
|     case SDL_FINGERDOWN: |     case SDL_FINGERDOWN: | ||||||
|         OnFingerDown(event.tfinger.x, event.tfinger.y); |         OnFingerDown(event.tfinger.x, event.tfinger.y, | ||||||
|  |                      static_cast<std::size_t>(event.tfinger.touchId)); | ||||||
|         break; |         break; | ||||||
|     case SDL_FINGERMOTION: |     case SDL_FINGERMOTION: | ||||||
|         OnFingerMotion(event.tfinger.x, event.tfinger.y); |         OnFingerMotion(event.tfinger.x, event.tfinger.y, | ||||||
|  |                        static_cast<std::size_t>(event.tfinger.touchId)); | ||||||
|         break; |         break; | ||||||
|     case SDL_FINGERUP: |     case SDL_FINGERUP: | ||||||
|         OnFingerUp(); |         OnFingerUp(); | ||||||
|  | |||||||
| @ -16,11 +16,8 @@ class System; | |||||||
| 
 | 
 | ||||||
| namespace InputCommon { | namespace InputCommon { | ||||||
| class InputSubsystem; | class InputSubsystem; | ||||||
| } |  | ||||||
| 
 |  | ||||||
| namespace MouseInput { |  | ||||||
| enum class MouseButton; | enum class MouseButton; | ||||||
| } | } // namespace InputCommon
 | ||||||
| 
 | 
 | ||||||
| class EmuWindow_SDL2 : public Core::Frontend::EmuWindow { | class EmuWindow_SDL2 : public Core::Frontend::EmuWindow { | ||||||
| public: | public: | ||||||
| @ -47,7 +44,7 @@ protected: | |||||||
|     void OnMouseMotion(s32 x, s32 y); |     void OnMouseMotion(s32 x, s32 y); | ||||||
| 
 | 
 | ||||||
|     /// Converts a SDL mouse button into MouseInput mouse button
 |     /// Converts a SDL mouse button into MouseInput mouse button
 | ||||||
|     MouseInput::MouseButton SDLButtonToMouseButton(u32 button) const; |     InputCommon::MouseButton SDLButtonToMouseButton(u32 button) const; | ||||||
| 
 | 
 | ||||||
|     /// Called by WaitEvent when a mouse button is pressed or released
 |     /// Called by WaitEvent when a mouse button is pressed or released
 | ||||||
|     void OnMouseButton(u32 button, u8 state, s32 x, s32 y); |     void OnMouseButton(u32 button, u8 state, s32 x, s32 y); | ||||||
| @ -56,10 +53,10 @@ protected: | |||||||
|     std::pair<unsigned, unsigned> TouchToPixelPos(float touch_x, float touch_y) const; |     std::pair<unsigned, unsigned> TouchToPixelPos(float touch_x, float touch_y) const; | ||||||
| 
 | 
 | ||||||
|     /// Called by WaitEvent when a finger starts touching the touchscreen
 |     /// Called by WaitEvent when a finger starts touching the touchscreen
 | ||||||
|     void OnFingerDown(float x, float y); |     void OnFingerDown(float x, float y, std::size_t id); | ||||||
| 
 | 
 | ||||||
|     /// Called by WaitEvent when a finger moves while touching the touchscreen
 |     /// Called by WaitEvent when a finger moves while touching the touchscreen
 | ||||||
|     void OnFingerMotion(float x, float y); |     void OnFingerMotion(float x, float y, std::size_t id); | ||||||
| 
 | 
 | ||||||
|     /// Called by WaitEvent when a finger stops touching the touchscreen
 |     /// Called by WaitEvent when a finger stops touching the touchscreen
 | ||||||
|     void OnFingerUp(); |     void OnFingerUp(); | ||||||
|  | |||||||
| @ -17,7 +17,6 @@ | |||||||
| #include "common/settings.h" | #include "common/settings.h" | ||||||
| #include "common/string_util.h" | #include "common/string_util.h" | ||||||
| #include "core/core.h" | #include "core/core.h" | ||||||
| #include "input_common/keyboard.h" |  | ||||||
| #include "input_common/main.h" | #include "input_common/main.h" | ||||||
| #include "video_core/renderer_base.h" | #include "video_core/renderer_base.h" | ||||||
| #include "yuzu_cmd/emu_window/emu_window_sdl2_gl.h" | #include "yuzu_cmd/emu_window/emu_window_sdl2_gl.h" | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user