mirror of
				https://git.suyu.dev/suyu/suyu.git
				synced 2025-10-31 06:46:40 +08:00 
			
		
		
		
	yuzu: Use new input on main and bootmanager
This commit is contained in:
		
							parent
							
								
									29ae42f3e2
								
							
						
					
					
						commit
						737d305f63
					
				| @ -27,12 +27,15 @@ | |||||||
| 
 | 
 | ||||||
| #include "common/assert.h" | #include "common/assert.h" | ||||||
| #include "common/microprofile.h" | #include "common/microprofile.h" | ||||||
|  | #include "common/param_package.h" | ||||||
| #include "common/scm_rev.h" | #include "common/scm_rev.h" | ||||||
| #include "common/scope_exit.h" | #include "common/scope_exit.h" | ||||||
| #include "common/settings.h" | #include "common/settings.h" | ||||||
| #include "core/core.h" | #include "core/core.h" | ||||||
| #include "core/frontend/framebuffer_layout.h" | #include "core/frontend/framebuffer_layout.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 "video_core/renderer_base.h" | #include "video_core/renderer_base.h" | ||||||
| #include "video_core/video_core.h" | #include "video_core/video_core.h" | ||||||
| @ -294,7 +297,6 @@ GRenderWindow::GRenderWindow(GMainWindow* parent, EmuThread* emu_thread_, | |||||||
|     layout->setContentsMargins(0, 0, 0, 0); |     layout->setContentsMargins(0, 0, 0, 0); | ||||||
|     setLayout(layout); |     setLayout(layout); | ||||||
|     input_subsystem->Initialize(); |     input_subsystem->Initialize(); | ||||||
| 
 |  | ||||||
|     this->setMouseTracking(true); |     this->setMouseTracking(true); | ||||||
| 
 | 
 | ||||||
|     connect(this, &GRenderWindow::FirstFrameDisplayed, parent, &GMainWindow::OnLoadComplete); |     connect(this, &GRenderWindow::FirstFrameDisplayed, parent, &GMainWindow::OnLoadComplete); | ||||||
| @ -392,34 +394,34 @@ void GRenderWindow::closeEvent(QCloseEvent* event) { | |||||||
| 
 | 
 | ||||||
| void GRenderWindow::keyPressEvent(QKeyEvent* event) { | void GRenderWindow::keyPressEvent(QKeyEvent* event) { | ||||||
|     if (!event->isAutoRepeat()) { |     if (!event->isAutoRepeat()) { | ||||||
|        // input_subsystem->GetKeyboard()->PressKey(event->key());
 |         input_subsystem->GetKeyboard()->PressKey(event->key()); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void GRenderWindow::keyReleaseEvent(QKeyEvent* event) { | void GRenderWindow::keyReleaseEvent(QKeyEvent* event) { | ||||||
|     if (!event->isAutoRepeat()) { |     if (!event->isAutoRepeat()) { | ||||||
|        // input_subsystem->GetKeyboard()->ReleaseKey(event->key());
 |         input_subsystem->GetKeyboard()->ReleaseKey(event->key()); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| //MouseInput::MouseButton GRenderWindow::QtButtonToMouseButton(Qt::MouseButton button) {
 | InputCommon::MouseButton GRenderWindow::QtButtonToMouseButton(Qt::MouseButton button) { | ||||||
| //    switch (button) {
 |     switch (button) { | ||||||
| //    case Qt::LeftButton:
 |     case Qt::LeftButton: | ||||||
| //        return MouseInput::MouseButton::Left;
 |         return InputCommon::MouseButton::Left; | ||||||
| //    case Qt::RightButton:
 |     case Qt::RightButton: | ||||||
| //        return MouseInput::MouseButton::Right;
 |         return InputCommon::MouseButton::Right; | ||||||
| //    case Qt::MiddleButton:
 |     case Qt::MiddleButton: | ||||||
| //        return MouseInput::MouseButton::Wheel;
 |         return InputCommon::MouseButton::Wheel; | ||||||
| //    case Qt::BackButton:
 |     case Qt::BackButton: | ||||||
| //        return MouseInput::MouseButton::Backward;
 |         return InputCommon::MouseButton::Backward; | ||||||
| //    case Qt::ForwardButton:
 |     case Qt::ForwardButton: | ||||||
| //        return MouseInput::MouseButton::Forward;
 |         return InputCommon::MouseButton::Forward; | ||||||
| //    case Qt::TaskButton:
 |     case Qt::TaskButton: | ||||||
| //        return MouseInput::MouseButton::Task;
 |         return InputCommon::MouseButton::Task; | ||||||
| //    default:
 |     default: | ||||||
| //        return MouseInput::MouseButton::Extra;
 |         return InputCommon::MouseButton::Extra; | ||||||
| //    }
 |     } | ||||||
| //}
 | } | ||||||
| 
 | 
 | ||||||
| void GRenderWindow::mousePressEvent(QMouseEvent* event) { | void GRenderWindow::mousePressEvent(QMouseEvent* event) { | ||||||
|     // Touch input is handled in TouchBeginEvent
 |     // Touch input is handled in TouchBeginEvent
 | ||||||
| @ -430,12 +432,9 @@ void GRenderWindow::mousePressEvent(QMouseEvent* event) { | |||||||
|     // coordinates and map them to the current render area
 |     // coordinates and map them to the current render area
 | ||||||
|     const auto pos = mapFromGlobal(QCursor::pos()); |     const auto pos = mapFromGlobal(QCursor::pos()); | ||||||
|     const auto [x, y] = ScaleTouch(pos); |     const auto [x, y] = ScaleTouch(pos); | ||||||
|     //const auto button = QtButtonToMouseButton(event->button());
 |     const auto [touch_x, touch_y] = MapToTouchScreen(x, y); | ||||||
|     //input_subsystem->GetMouse()->PressButton(x, y, button);
 |     const auto button = QtButtonToMouseButton(event->button()); | ||||||
| 
 |     input_subsystem->GetMouse()->PressButton(x, y, touch_x, touch_y, button); | ||||||
|     if (event->button() == Qt::LeftButton) { |  | ||||||
|         this->TouchPressed(x, y, 0); |  | ||||||
|     } |  | ||||||
| 
 | 
 | ||||||
|     emit MouseActivity(); |     emit MouseActivity(); | ||||||
| } | } | ||||||
| @ -449,10 +448,10 @@ void GRenderWindow::mouseMoveEvent(QMouseEvent* event) { | |||||||
|     // coordinates and map them to the current render area
 |     // coordinates and map them to the current render area
 | ||||||
|     const auto pos = mapFromGlobal(QCursor::pos()); |     const auto pos = mapFromGlobal(QCursor::pos()); | ||||||
|     const auto [x, y] = ScaleTouch(pos); |     const auto [x, y] = ScaleTouch(pos); | ||||||
|  |     const auto [touch_x, touch_y] = MapToTouchScreen(x, y); | ||||||
|     const int center_x = width() / 2; |     const int center_x = width() / 2; | ||||||
|     const int center_y = height() / 2; |     const int center_y = height() / 2; | ||||||
|     //input_subsystem->GetMouse()->MouseMove(x, y, center_x, center_y);
 |     input_subsystem->GetMouse()->MouseMove(x, y, touch_x, touch_y, center_x, center_y); | ||||||
|     this->TouchMoved(x, y, 0); |  | ||||||
| 
 | 
 | ||||||
|     if (Settings::values.mouse_panning) { |     if (Settings::values.mouse_panning) { | ||||||
|         QCursor::setPos(mapToGlobal({center_x, center_y})); |         QCursor::setPos(mapToGlobal({center_x, center_y})); | ||||||
| @ -467,12 +466,8 @@ void GRenderWindow::mouseReleaseEvent(QMouseEvent* event) { | |||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     //const auto button = QtButtonToMouseButton(event->button());
 |     const auto button = QtButtonToMouseButton(event->button()); | ||||||
|     //input_subsystem->GetMouse()->ReleaseButton(button);
 |     input_subsystem->GetMouse()->ReleaseButton(button); | ||||||
| 
 |  | ||||||
|     if (event->button() == Qt::LeftButton) { |  | ||||||
|         this->TouchReleased(0); |  | ||||||
|     } |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void GRenderWindow::TouchBeginEvent(const QTouchEvent* event) { | void GRenderWindow::TouchBeginEvent(const QTouchEvent* event) { | ||||||
| @ -495,7 +490,7 @@ void GRenderWindow::TouchUpdateEvent(const QTouchEvent* event) { | |||||||
|     for (std::size_t id = 0; id < touch_ids.size(); ++id) { |     for (std::size_t id = 0; id < touch_ids.size(); ++id) { | ||||||
|         if (!TouchExist(touch_ids[id], touch_points)) { |         if (!TouchExist(touch_ids[id], touch_points)) { | ||||||
|             touch_ids[id] = 0; |             touch_ids[id] = 0; | ||||||
|             this->TouchReleased(id + 1); |             input_subsystem->GetTouchScreen()->TouchReleased(id); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @ -504,28 +499,28 @@ void GRenderWindow::TouchEndEvent() { | |||||||
|     for (std::size_t id = 0; id < touch_ids.size(); ++id) { |     for (std::size_t id = 0; id < touch_ids.size(); ++id) { | ||||||
|         if (touch_ids[id] != 0) { |         if (touch_ids[id] != 0) { | ||||||
|             touch_ids[id] = 0; |             touch_ids[id] = 0; | ||||||
|             this->TouchReleased(id + 1); |             input_subsystem->GetTouchScreen()->TouchReleased(id); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool GRenderWindow::TouchStart(const QTouchEvent::TouchPoint& touch_point) { | void GRenderWindow::TouchStart(const QTouchEvent::TouchPoint& touch_point) { | ||||||
|     for (std::size_t id = 0; id < touch_ids.size(); ++id) { |     for (std::size_t id = 0; id < touch_ids.size(); ++id) { | ||||||
|         if (touch_ids[id] == 0) { |         if (touch_ids[id] == 0) { | ||||||
|             touch_ids[id] = touch_point.id() + 1; |             touch_ids[id] = touch_point.id() + 1; | ||||||
|             const auto [x, y] = ScaleTouch(touch_point.pos()); |             const auto [x, y] = ScaleTouch(touch_point.pos()); | ||||||
|             this->TouchPressed(x, y, id + 1); |             const auto [touch_x, touch_y] = MapToTouchScreen(x, y); | ||||||
|             return true; |             input_subsystem->GetTouchScreen()->TouchPressed(touch_x, touch_y, id); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|     return false; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool GRenderWindow::TouchUpdate(const QTouchEvent::TouchPoint& touch_point) { | bool GRenderWindow::TouchUpdate(const QTouchEvent::TouchPoint& touch_point) { | ||||||
|     for (std::size_t id = 0; id < touch_ids.size(); ++id) { |     for (std::size_t id = 0; id < touch_ids.size(); ++id) { | ||||||
|         if (touch_ids[id] == static_cast<std::size_t>(touch_point.id() + 1)) { |         if (touch_ids[id] == static_cast<std::size_t>(touch_point.id() + 1)) { | ||||||
|             const auto [x, y] = ScaleTouch(touch_point.pos()); |             const auto [x, y] = ScaleTouch(touch_point.pos()); | ||||||
|             this->TouchMoved(x, y, id + 1); |             const auto [touch_x, touch_y] = MapToTouchScreen(x, y); | ||||||
|  |             input_subsystem->GetTouchScreen()->TouchMoved(touch_x, touch_y, id); | ||||||
|             return true; |             return true; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @ -556,9 +551,9 @@ bool GRenderWindow::event(QEvent* event) { | |||||||
| 
 | 
 | ||||||
| void GRenderWindow::focusOutEvent(QFocusEvent* event) { | void GRenderWindow::focusOutEvent(QFocusEvent* event) { | ||||||
|     QWidget::focusOutEvent(event); |     QWidget::focusOutEvent(event); | ||||||
|     //input_subsystem->GetKeyboard()->ReleaseAllKeys();
 |     input_subsystem->GetKeyboard()->ReleaseAllKeys(); | ||||||
|     //input_subsystem->GetMouse()->ReleaseAllButtons();
 |     input_subsystem->GetMouse()->ReleaseAllButtons(); | ||||||
|     this->TouchReleased(0); |     input_subsystem->GetTouchScreen()->ReleaseAllTouch(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void GRenderWindow::resizeEvent(QResizeEvent* event) { | void GRenderWindow::resizeEvent(QResizeEvent* event) { | ||||||
|  | |||||||
| @ -30,11 +30,8 @@ class System; | |||||||
| 
 | 
 | ||||||
| namespace InputCommon { | namespace InputCommon { | ||||||
| class InputSubsystem; | class InputSubsystem; | ||||||
| } |  | ||||||
| 
 |  | ||||||
| namespace MouseInput { |  | ||||||
| enum class MouseButton; | enum class MouseButton; | ||||||
| } | } // namespace InputCommon
 | ||||||
| 
 | 
 | ||||||
| namespace VideoCore { | namespace VideoCore { | ||||||
| enum class LoadCallbackStage; | enum class LoadCallbackStage; | ||||||
| @ -165,7 +162,7 @@ public: | |||||||
|     void keyReleaseEvent(QKeyEvent* event) override; |     void keyReleaseEvent(QKeyEvent* event) override; | ||||||
| 
 | 
 | ||||||
|     /// Converts a Qt mouse button into MouseInput mouse button
 |     /// Converts a Qt mouse button into MouseInput mouse button
 | ||||||
|     // static MouseInput::MouseButton QtButtonToMouseButton(Qt::MouseButton button);
 |     static InputCommon::MouseButton QtButtonToMouseButton(Qt::MouseButton button); | ||||||
| 
 | 
 | ||||||
|     void mousePressEvent(QMouseEvent* event) override; |     void mousePressEvent(QMouseEvent* event) override; | ||||||
|     void mouseMoveEvent(QMouseEvent* event) override; |     void mouseMoveEvent(QMouseEvent* event) override; | ||||||
| @ -214,7 +211,7 @@ private: | |||||||
|     void TouchUpdateEvent(const QTouchEvent* event); |     void TouchUpdateEvent(const QTouchEvent* event); | ||||||
|     void TouchEndEvent(); |     void TouchEndEvent(); | ||||||
| 
 | 
 | ||||||
|     bool TouchStart(const QTouchEvent::TouchPoint& touch_point); |     void TouchStart(const QTouchEvent::TouchPoint& touch_point); | ||||||
|     bool TouchUpdate(const QTouchEvent::TouchPoint& touch_point); |     bool TouchUpdate(const QTouchEvent::TouchPoint& touch_point); | ||||||
|     bool TouchExist(std::size_t id, const QList<QTouchEvent::TouchPoint>& touch_points) const; |     bool TouchExist(std::size_t id, const QList<QTouchEvent::TouchPoint>& touch_points) const; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -106,8 +106,8 @@ static FileSys::VirtualFile VfsDirectoryCreateFileWrapper(const FileSys::Virtual | |||||||
| #include "core/loader/loader.h" | #include "core/loader/loader.h" | ||||||
| #include "core/perf_stats.h" | #include "core/perf_stats.h" | ||||||
| #include "core/telemetry_session.h" | #include "core/telemetry_session.h" | ||||||
|  | #include "input_common/drivers/tas_input.h" | ||||||
| #include "input_common/main.h" | #include "input_common/main.h" | ||||||
| #include "input_common/tas/tas_input.h" |  | ||||||
| #include "ui_main.h" | #include "ui_main.h" | ||||||
| #include "util/overlay_dialog.h" | #include "util/overlay_dialog.h" | ||||||
| #include "video_core/gpu.h" | #include "video_core/gpu.h" | ||||||
| @ -838,7 +838,6 @@ void GMainWindow::InitializeWidgets() { | |||||||
|             controller_type = Settings::ControllerType::ProController; |             controller_type = Settings::ControllerType::ProController; | ||||||
|             ConfigureDialog configure_dialog(this, hotkey_registry, input_subsystem.get(), *system); |             ConfigureDialog configure_dialog(this, hotkey_registry, input_subsystem.get(), *system); | ||||||
|             configure_dialog.ApplyConfiguration(); |             configure_dialog.ApplyConfiguration(); | ||||||
|             controller_dialog->refreshConfiguration(); |  | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         Settings::values.use_docked_mode.SetValue(!is_docked); |         Settings::values.use_docked_mode.SetValue(!is_docked); | ||||||
| @ -922,7 +921,7 @@ void GMainWindow::InitializeDebugWidgets() { | |||||||
|     waitTreeWidget->hide(); |     waitTreeWidget->hide(); | ||||||
|     debug_menu->addAction(waitTreeWidget->toggleViewAction()); |     debug_menu->addAction(waitTreeWidget->toggleViewAction()); | ||||||
| 
 | 
 | ||||||
|     controller_dialog = new ControllerDialog(this, input_subsystem.get()); |     controller_dialog = new ControllerDialog(this); | ||||||
|     controller_dialog->hide(); |     controller_dialog->hide(); | ||||||
|     debug_menu->addAction(controller_dialog->toggleViewAction()); |     debug_menu->addAction(controller_dialog->toggleViewAction()); | ||||||
| 
 | 
 | ||||||
| @ -2708,7 +2707,6 @@ void GMainWindow::OnConfigure() { | |||||||
| 
 | 
 | ||||||
|         ShowTelemetryCallout(); |         ShowTelemetryCallout(); | ||||||
|     } |     } | ||||||
|     controller_dialog->refreshConfiguration(); |  | ||||||
|     InitializeHotkeys(); |     InitializeHotkeys(); | ||||||
| 
 | 
 | ||||||
|     if (UISettings::values.theme != old_theme) { |     if (UISettings::values.theme != old_theme) { | ||||||
| @ -2969,15 +2967,15 @@ void GMainWindow::UpdateWindowTitle(std::string_view title_name, std::string_vie | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| QString GMainWindow::GetTasStateDescription() const { | QString GMainWindow::GetTasStateDescription() const { | ||||||
|     //auto [tas_status, current_tas_frame, total_tas_frames] = input_subsystem->GetTas()->GetStatus();
 |     auto [tas_status, current_tas_frame, total_tas_frames] = input_subsystem->GetTas()->GetStatus(); | ||||||
|     //switch (tas_status) {
 |     switch (tas_status) { | ||||||
|     //case TasInput::TasState::Running:
 |     case InputCommon::TasInput::TasState::Running: | ||||||
|     //    return tr("TAS state: Running %1/%2").arg(current_tas_frame).arg(total_tas_frames);
 |         return tr("TAS state: Running %1/%2").arg(current_tas_frame).arg(total_tas_frames); | ||||||
|     //case TasInput::TasState::Recording:
 |     case InputCommon::TasInput::TasState::Recording: | ||||||
|     //    return tr("TAS state: Recording %1").arg(total_tas_frames);
 |         return tr("TAS state: Recording %1").arg(total_tas_frames); | ||||||
|     //case TasInput::TasState::Stopped:
 |     case InputCommon::TasInput::TasState::Stopped: | ||||||
|     //    return tr("TAS state: Idle %1/%2").arg(current_tas_frame).arg(total_tas_frames);
 |         return tr("TAS state: Idle %1/%2").arg(current_tas_frame).arg(total_tas_frames); | ||||||
|     //default:
 |     default: | ||||||
|         return tr("TAS State: Invalid"); |         return tr("TAS State: Invalid"); | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @ -3371,6 +3369,7 @@ void GMainWindow::closeEvent(QCloseEvent* event) { | |||||||
|     UpdateUISettings(); |     UpdateUISettings(); | ||||||
|     game_list->SaveInterfaceLayout(); |     game_list->SaveInterfaceLayout(); | ||||||
|     hotkey_registry.SaveHotkeys(); |     hotkey_registry.SaveHotkeys(); | ||||||
|  |     Core::System::GetInstance().HIDCore().UnloadInputDevices(); | ||||||
| 
 | 
 | ||||||
|     // Shutdown session if the emu thread is active...
 |     // Shutdown session if the emu thread is active...
 | ||||||
|     if (emu_thread != nullptr) { |     if (emu_thread != nullptr) { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user