From 686df4a2037d232723e23bbab43f034f1b3d22d0 Mon Sep 17 00:00:00 2001
From: Connor McLaughlin <stenzek@gmail.com>
Date: Tue, 7 Jan 2020 18:52:33 +1000
Subject: [PATCH] Qt: Improve imgui hidpi scaling

---
 src/core/host_interface.cpp            | 8 +++++---
 src/duckstation-qt/qtdisplaywindow.cpp | 8 +++++++-
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/src/core/host_interface.cpp b/src/core/host_interface.cpp
index 3123fbcc3..8f6ed75cb 100644
--- a/src/core/host_interface.cpp
+++ b/src/core/host_interface.cpp
@@ -12,8 +12,8 @@
 #include "spu.h"
 #include "system.h"
 #include "timers.h"
-#include <cstring>
 #include <cmath>
+#include <cstring>
 #include <imgui.h>
 Log_SetChannel(HostInterface);
 
@@ -113,8 +113,10 @@ void HostInterface::DrawFPSWindow()
   if (!(show_fps | show_vps | show_speed))
     return;
 
-  ImGui::SetNextWindowPos(ImVec2(ImGui::GetIO().DisplaySize.x - 175.0f, 0.0f), ImGuiCond_Always);
-  ImGui::SetNextWindowSize(ImVec2(175.0f, 16.0f));
+  const ImVec2 window_size =
+    ImVec2(175.0f * ImGui::GetIO().DisplayFramebufferScale.x, 16.0f * ImGui::GetIO().DisplayFramebufferScale.y);
+  ImGui::SetNextWindowPos(ImVec2(ImGui::GetIO().DisplaySize.x - window_size.x, 0.0f), ImGuiCond_Always);
+  ImGui::SetNextWindowSize(window_size);
 
   if (!ImGui::Begin("FPSWindow", nullptr,
                     ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoCollapse |
diff --git a/src/duckstation-qt/qtdisplaywindow.cpp b/src/duckstation-qt/qtdisplaywindow.cpp
index 8258ac124..6bd9b00e9 100644
--- a/src/duckstation-qt/qtdisplaywindow.cpp
+++ b/src/duckstation-qt/qtdisplaywindow.cpp
@@ -45,6 +45,12 @@ bool QtDisplayWindow::createImGuiContext()
   io.DisplaySize.x = static_cast<float>(m_window_width);
   io.DisplaySize.y = static_cast<float>(m_window_height);
 
+  const float framebuffer_scale = static_cast<float>(devicePixelRatio());
+  io.DisplayFramebufferScale.x = framebuffer_scale;
+  io.DisplayFramebufferScale.y = framebuffer_scale;
+  io.FontGlobalScale = framebuffer_scale;
+  ImGui::GetStyle().ScaleAllSizes(framebuffer_scale);
+
   return true;
 }
 
@@ -95,7 +101,7 @@ void QtDisplayWindow::keyReleaseEvent(QKeyEvent* event)
 void QtDisplayWindow::resizeEvent(QResizeEvent* event)
 {
   QWindow::resizeEvent(event);
-  
+
   const int width = static_cast<int>(static_cast<qreal>(event->size().width()) * devicePixelRatio());
   const int height = static_cast<int>(static_cast<qreal>(event->size().height()) * devicePixelRatio());
   emit windowResizedEvent(width, height);