|
|
@@ -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)
|