mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	citra-qt: Fix mouse events coordinates on high-DPI screens
This commit is contained in:
		
							parent
							
								
									2f4a1e0d59
								
							
						
					
					
						commit
						ba5d0f594d
					
				
					 2 changed files with 21 additions and 12 deletions
				
			
		|  | @ -181,16 +181,9 @@ void GRenderWindow::PollEvents() { | |||
| void GRenderWindow::OnFramebufferSizeChanged() | ||||
| { | ||||
|     // Screen changes potentially incur a change in screen DPI, hence we should update the framebuffer size
 | ||||
| #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) | ||||
|     // windowHandle() might not be accessible until the window is displayed to screen.
 | ||||
|     auto pixel_ratio = windowHandle() ? (windowHandle()->screen()->devicePixelRatio()) : 1.0; | ||||
| 
 | ||||
|     unsigned width = child->QPaintDevice::width() * pixel_ratio; | ||||
|     unsigned height = child->QPaintDevice::height() * pixel_ratio; | ||||
| #else | ||||
|     unsigned width = child->QPaintDevice::width(); | ||||
|     unsigned height = child->QPaintDevice::height(); | ||||
| #endif | ||||
|     qreal pixelRatio = windowPixelRatio(); | ||||
|     unsigned width = child->QPaintDevice::width() * pixelRatio; | ||||
|     unsigned height = child->QPaintDevice::height() * pixelRatio; | ||||
| 
 | ||||
|     NotifyFramebufferLayoutChanged(EmuWindow::FramebufferLayout::DefaultScreenLayout(width, height)); | ||||
| } | ||||
|  | @ -223,6 +216,16 @@ QByteArray GRenderWindow::saveGeometry() | |||
|         return geometry; | ||||
| } | ||||
| 
 | ||||
| qreal GRenderWindow::windowPixelRatio() | ||||
| { | ||||
| #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) | ||||
|     // windowHandle() might not be accessible until the window is displayed to screen.
 | ||||
|     return windowHandle() ? windowHandle()->screen()->devicePixelRatio() : 1.0f; | ||||
| #else | ||||
|     return 1.0f; | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| void GRenderWindow::closeEvent(QCloseEvent* event) { | ||||
|     emit Closed(); | ||||
|     QWidget::closeEvent(event); | ||||
|  | @ -243,14 +246,18 @@ void GRenderWindow::mousePressEvent(QMouseEvent *event) | |||
|     if (event->button() == Qt::LeftButton) | ||||
|     { | ||||
|         auto pos = event->pos(); | ||||
|         this->TouchPressed(static_cast<unsigned>(pos.x()), static_cast<unsigned>(pos.y())); | ||||
|         qreal pixelRatio = windowPixelRatio(); | ||||
|         this->TouchPressed(static_cast<unsigned>(pos.x() * pixelRatio), | ||||
|                            static_cast<unsigned>(pos.y() * pixelRatio)); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void GRenderWindow::mouseMoveEvent(QMouseEvent *event) | ||||
| { | ||||
|     auto pos = event->pos(); | ||||
|     this->TouchMoved(static_cast<unsigned>(std::max(pos.x(), 0)), static_cast<unsigned>(std::max(pos.y(), 0))); | ||||
|     qreal pixelRatio = windowPixelRatio(); | ||||
|     this->TouchMoved(std::max(static_cast<unsigned>(pos.x() * pixelRatio), 0u), | ||||
|                      std::max(static_cast<unsigned>(pos.y() * pixelRatio), 0u)); | ||||
| } | ||||
| 
 | ||||
| void GRenderWindow::mouseReleaseEvent(QMouseEvent *event) | ||||
|  |  | |||
|  | @ -111,6 +111,8 @@ public: | |||
|     void restoreGeometry(const QByteArray& geometry); // overridden
 | ||||
|     QByteArray saveGeometry();  // overridden
 | ||||
| 
 | ||||
|     qreal windowPixelRatio(); | ||||
| 
 | ||||
|     void closeEvent(QCloseEvent* event) override; | ||||
| 
 | ||||
|     void keyPressEvent(QKeyEvent* event) override; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue