From bf6f738d2ea8f67c022084beeaa393b6dad2a904 Mon Sep 17 00:00:00 2001 From: WerWolv Date: Sat, 28 Dec 2024 20:42:05 +0100 Subject: [PATCH] impr: Make text look super pretty on macOS finally --- main/gui/source/window/macos_window.cpp | 5 ++++- plugins/fonts/source/font_loader.cpp | 9 ++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/main/gui/source/window/macos_window.cpp b/main/gui/source/window/macos_window.cpp index 92f20acb7..61ec156a3 100644 --- a/main/gui/source/window/macos_window.cpp +++ b/main/gui/source/window/macos_window.cpp @@ -26,7 +26,7 @@ namespace hex { glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); - glfwWindowHint(GLFW_COCOA_RETINA_FRAMEBUFFER, GLFW_FALSE); + glfwWindowHint(GLFW_COCOA_RETINA_FRAMEBUFFER, GLFW_TRUE); glfwWindowHint(GLFW_COCOA_GRAPHICS_SWITCHING, GLFW_TRUE); glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GLFW_TRUE); } @@ -96,6 +96,9 @@ namespace hex { auto win = static_cast(glfwGetWindowUserPointer(window)); win->fullFrame(); }); + + // Done to get super crisp font rendering together with GLFW_COCOA_RETINA_FRAMEBUFFER + ImGui::GetIO().FontGlobalScale = 1.0F / getBackingScaleFactor(); } void Window::beginNativeWindowFrame() { diff --git a/plugins/fonts/source/font_loader.cpp b/plugins/fonts/source/font_loader.cpp index 3cc99f791..7b66e75e4 100644 --- a/plugins/fonts/source/font_loader.cpp +++ b/plugins/fonts/source/font_loader.cpp @@ -81,6 +81,13 @@ namespace hex::fonts { ImFontConfig config = m_config; config.FontDataOwnedByAtlas = false; + // Since macOS reports half the framebuffer size that's actually available, + // we'll multiply all font sizes by that and then divide the global font scale + // by the same amount to get super crisp font rendering. + #if defined(OS_MACOS) + fontSize *= getBackingScaleFactor(); + #endif + config.GlyphOffset = { offset.x, offset.y }; auto font = m_fontAtlas->AddFontFromMemoryTTF(storedFontData.data(), int(storedFontData.size()), fontSize, &config, !glyphRange.empty() ? glyphRange.Data : m_glyphRange.Data); m_fontSizes.emplace_back(scalable, fontSize); @@ -322,7 +329,7 @@ namespace hex::fonts { if (pixelPerfectFont) defaultFont = fontAtlas.addDefaultFont(); else - defaultFont = fontAtlas.addFontFromRomFs("fonts/JetBrainsMono.ttf", 16, true, ImVec2()); + defaultFont = fontAtlas.addFontFromRomFs("fonts/JetBrainsMono.ttf", 14, true, ImVec2()); if (!fontAtlas.build()) { log::fatal("Failed to load default font!");