mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 13:50:03 +00:00 
			
		
		
		
	Merge pull request #1951 from wwylele/motion-sensor
Emulate motion sensor in frontend
This commit is contained in:
		
						commit
						7cfe3ef046
					
				
					 14 changed files with 321 additions and 16 deletions
				
			
		|  | @ -191,6 +191,7 @@ qreal GRenderWindow::windowPixelRatio() { | |||
| } | ||||
| 
 | ||||
| void GRenderWindow::closeEvent(QCloseEvent* event) { | ||||
|     motion_emu = nullptr; | ||||
|     emit Closed(); | ||||
|     QWidget::closeEvent(event); | ||||
| } | ||||
|  | @ -204,11 +205,13 @@ void GRenderWindow::keyReleaseEvent(QKeyEvent* event) { | |||
| } | ||||
| 
 | ||||
| void GRenderWindow::mousePressEvent(QMouseEvent* event) { | ||||
|     auto pos = event->pos(); | ||||
|     if (event->button() == Qt::LeftButton) { | ||||
|         auto pos = event->pos(); | ||||
|         qreal pixelRatio = windowPixelRatio(); | ||||
|         this->TouchPressed(static_cast<unsigned>(pos.x() * pixelRatio), | ||||
|                            static_cast<unsigned>(pos.y() * pixelRatio)); | ||||
|     } else if (event->button() == Qt::RightButton) { | ||||
|         motion_emu->BeginTilt(pos.x(), pos.y()); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | @ -217,11 +220,14 @@ void GRenderWindow::mouseMoveEvent(QMouseEvent* event) { | |||
|     qreal pixelRatio = windowPixelRatio(); | ||||
|     this->TouchMoved(std::max(static_cast<unsigned>(pos.x() * pixelRatio), 0u), | ||||
|                      std::max(static_cast<unsigned>(pos.y() * pixelRatio), 0u)); | ||||
|     motion_emu->Tilt(pos.x(), pos.y()); | ||||
| } | ||||
| 
 | ||||
| void GRenderWindow::mouseReleaseEvent(QMouseEvent* event) { | ||||
|     if (event->button() == Qt::LeftButton) | ||||
|         this->TouchReleased(); | ||||
|     else if (event->button() == Qt::RightButton) | ||||
|         motion_emu->EndTilt(); | ||||
| } | ||||
| 
 | ||||
| void GRenderWindow::ReloadSetKeymaps() { | ||||
|  | @ -279,11 +285,13 @@ void GRenderWindow::OnMinimalClientAreaChangeRequest( | |||
| } | ||||
| 
 | ||||
| void GRenderWindow::OnEmulationStarting(EmuThread* emu_thread) { | ||||
|     motion_emu = std::make_unique<Motion::MotionEmu>(*this); | ||||
|     this->emu_thread = emu_thread; | ||||
|     child->DisablePainting(); | ||||
| } | ||||
| 
 | ||||
| void GRenderWindow::OnEmulationStopping() { | ||||
|     motion_emu = nullptr; | ||||
|     emu_thread = nullptr; | ||||
|     child->EnablePainting(); | ||||
| } | ||||
|  |  | |||
|  | @ -11,6 +11,7 @@ | |||
| #include <QThread> | ||||
| #include "common/thread.h" | ||||
| #include "core/frontend/emu_window.h" | ||||
| #include "core/frontend/motion_emu.h" | ||||
| 
 | ||||
| class QKeyEvent; | ||||
| class QScreen; | ||||
|  | @ -156,6 +157,9 @@ private: | |||
| 
 | ||||
|     EmuThread* emu_thread; | ||||
| 
 | ||||
|     /// Motion sensors emulation
 | ||||
|     std::unique_ptr<Motion::MotionEmu> motion_emu; | ||||
| 
 | ||||
| protected: | ||||
|     void showEvent(QShowEvent* event) override; | ||||
| }; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue