From 2ae76e0b149b3410d27143f0f381002d7aade715 Mon Sep 17 00:00:00 2001 From: Yimura <24669514+Yimura@users.noreply.github.com> Date: Fri, 9 Dec 2022 20:43:01 +0100 Subject: [PATCH] feat(renderer): add UI scaling (#674) Closes #587 --- src/renderer.cpp | 10 ++++++++++ src/renderer.hpp | 2 ++ src/views/settings/view_gui_settings.cpp | 10 ++++++++++ 3 files changed, 22 insertions(+) diff --git a/src/renderer.cpp b/src/renderer.cpp index 1bcb9e5f..8cd3e319 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -110,6 +110,8 @@ namespace big g->window.font_icon = io.Fonts->AddFontFromMemoryTTF(const_cast(font_icons), sizeof(font_icons), 24.f, &font_icons_cfg); } + rescale(g->window.gui_scale); + g_gui.dx_init(); g_renderer = this; } @@ -152,6 +154,14 @@ namespace big ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData()); } + void renderer::rescale(float rel_size) + { + pre_reset(); + ImGui::GetStyle().ScaleAllSizes(rel_size); + ImGui::GetIO().FontGlobalScale = rel_size; + post_reset(); + } + void renderer::pre_reset() { ImGui_ImplDX11_InvalidateDeviceObjects(); diff --git a/src/renderer.hpp b/src/renderer.hpp index 10ec01d8..6f204f19 100644 --- a/src/renderer.hpp +++ b/src/renderer.hpp @@ -12,6 +12,8 @@ namespace big void on_present(); + void rescale(float rel_size); + void pre_reset(); void post_reset(); diff --git a/src/views/settings/view_gui_settings.cpp b/src/views/settings/view_gui_settings.cpp index ac6aabe2..a6f1435c 100644 --- a/src/views/settings/view_gui_settings.cpp +++ b/src/views/settings/view_gui_settings.cpp @@ -1,9 +1,19 @@ #include "views/view.hpp" +#include "renderer.hpp" namespace big { void view::gui_settings() { + components::sub_title("UI Scale"); + ImGui::SliderFloat("##gui-scale", &g->window.gui_scale, 1.f, 1.5f, "%.2f"); + ImGui::SameLine(); + if (ImGui::Button("Apply##gui-scale")) + g_renderer->rescale(g->window.gui_scale); + if (ImGui::IsItemHovered()) + ImGui::SetTooltip("Changing the UI scale may break rendering and require you to unload and inject YimMenu again."); + + components::sub_title("Colors"); static ImVec4 col_gui = ImGui::ColorConvertU32ToFloat4(g->window.color); if (ImGui::ColorEdit4("Gui Color##gui_picker", (float*)&col_gui, ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_NoSidePreview)) {