From d3110b9521d3b67daf41b45b6a520907ff11773a Mon Sep 17 00:00:00 2001 From: TellowKrinkle Date: Sat, 10 Jun 2023 02:11:14 -0500 Subject: [PATCH] VideoCommon: Update imgui scale when dpi changes --- Source/Core/VideoCommon/OnScreenUI.cpp | 5 ++++- Source/Core/VideoCommon/Present.cpp | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Source/Core/VideoCommon/OnScreenUI.cpp b/Source/Core/VideoCommon/OnScreenUI.cpp index e2fa2593a7..d5949e356f 100644 --- a/Source/Core/VideoCommon/OnScreenUI.cpp +++ b/Source/Core/VideoCommon/OnScreenUI.cpp @@ -55,7 +55,6 @@ bool OnScreenUI::Initialize(u32 width, u32 height, float scale) // Don't create an ini file. TODO: Do we want this in the future? ImGui::GetIO().IniFilename = nullptr; SetScale(scale); - ImGui::GetStyle().WindowRounding = 7.0f; PortableVertexDeclaration vdecl = {}; vdecl.position = {ComponentFormat::Float, 2, offsetof(ImDrawVert, pos), true, false}; @@ -343,6 +342,10 @@ void OnScreenUI::SetScale(float backbuffer_scale) ImGui::GetIO().DisplayFramebufferScale.x = backbuffer_scale; ImGui::GetIO().DisplayFramebufferScale.y = backbuffer_scale; ImGui::GetIO().FontGlobalScale = backbuffer_scale; + // ScaleAllSizes scales in-place, so calling it twice will double-apply the scale + // Reset the style first so that the scale is applied to the base style, not an already-scaled one + ImGui::GetStyle() = {}; + ImGui::GetStyle().WindowRounding = 7.0f; ImGui::GetStyle().ScaleAllSizes(backbuffer_scale); m_backbuffer_scale = backbuffer_scale; diff --git a/Source/Core/VideoCommon/Present.cpp b/Source/Core/VideoCommon/Present.cpp index 3ac4d516df..7de3fd9d84 100644 --- a/Source/Core/VideoCommon/Present.cpp +++ b/Source/Core/VideoCommon/Present.cpp @@ -176,6 +176,8 @@ void Presenter::SetBackbuffer(SurfaceInfo info) m_backbuffer_height = info.height; m_backbuffer_scale = info.scale; m_backbuffer_format = info.format; + if (m_onscreen_ui) + m_onscreen_ui->SetScale(info.scale); UpdateDrawRectangle(); }