.. | |||
README.md | 7 years ago | ||
imgui_freetype.cpp | 7 years ago | ||
imgui_freetype.h | 7 years ago |
This is an attempt to replace stb_truetype (the default imgui's font rasterizer) with FreeType. Currently not optimal and probably has some limitations or bugs. By Vuhdo (Aleksei Skriabin). Improvements by @mikesart. Maintained by @ocornut.
Usage
// See ImGuiFreeType::RasterizationFlags unsigned int flags = ImGuiFreeType::DisableHinting; ImGuiFreeType::BuildFontAtlas(io.Fonts, flags); io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height);
Test code Usage
#include "misc/freetype/imgui_freetype.h" #include "misc/freetype/imgui_freetype.cpp" // Load various small fonts ImGuiIO& io = ImGui::GetIO(); io.Fonts->AddFontFromFileTTF("../../misc/fonts/Roboto-Medium.ttf", 13.0f); io.Fonts->AddFontFromFileTTF("../../misc/fonts/Cousine-Regular.ttf", 13.0f); io.Fonts->AddFontDefault(); FreeTypeTest freetype_test; // Main Loop while (true) { if (freetype_test.UpdateRebuild()) { // REUPLOAD FONT TEXTURE TO GPU // e.g ImGui_ImplGlfwGL3_InvalidateDeviceObjects() + ImGui_ImplGlfwGL3_CreateDeviceObjects() } ImGui::NewFrame(); freetype_test.ShowFreetypeOptionsWindow(); ... } }
Test code
#include "misc/freetype/imgui_freetype.h" #include "misc/freetype/imgui_freetype.cpp" struct FreeTypeTest { enum FontBuildMode { FontBuildMode_FreeType, FontBuildMode_Stb, }; FontBuildMode BuildMode; bool WantRebuild; float FontsMultiply; unsigned int FontsFlags; FreeTypeTest() { BuildMode = FontBuildMode_FreeType; WantRebuild = true; FontsMultiply = 1.0f; FontsFlags = 0; } // Call _BEFORE_ NewFrame() bool UpdateRebuild() { if (!WantRebuild) return false; ImGuiIO& io = ImGui::GetIO(); for (int n = 0; n < io.Fonts->Fonts.Size; n++) { io.Fonts->Fonts[n]->ConfigData->RasterizerMultiply = FontsMultiply; io.Fonts->Fonts[n]->ConfigData->RasterizerFlags = (BuildMode == FontBuildMode_FreeType) ? FontsFlags : 0x00; } if (BuildMode == FontBuildMode_FreeType) ImGuiFreeType::BuildFontAtlas(io.Fonts, FontsFlags); else if (BuildMode == FontBuildMode_Stb) io.Fonts->Build(); WantRebuild = false; return true; } // Call to draw interface void ShowFreetypeOptionsWindow() { ImGui::Begin("FreeType Options"); ImGui::ShowFontSelector("Fonts"); WantRebuild |= ImGui::RadioButton("FreeType", (int*)&BuildMode, FontBuildMode_FreeType); ImGui::SameLine(); WantRebuild |= ImGui::RadioButton("Stb (Default)", (int*)&BuildMode, FontBuildMode_Stb); WantRebuild |= ImGui::DragFloat("Multiply", &FontsMultiply, 0.001f, 0.0f, 2.0f); if (BuildMode == FontBuildMode_FreeType) { WantRebuild |= ImGui::CheckboxFlags("NoHinting", &FontsFlags, ImGuiFreeType::NoHinting); WantRebuild |= ImGui::CheckboxFlags("NoAutoHint", &FontsFlags, ImGuiFreeType::NoAutoHint); WantRebuild |= ImGui::CheckboxFlags("ForceAutoHint", &FontsFlags, ImGuiFreeType::ForceAutoHint); WantRebuild |= ImGui::CheckboxFlags("LightHinting", &FontsFlags, ImGuiFreeType::LightHinting); WantRebuild |= ImGui::CheckboxFlags("MonoHinting", &FontsFlags, ImGuiFreeType::MonoHinting); WantRebuild |= ImGui::CheckboxFlags("Bold", &FontsFlags, ImGuiFreeType::Bold); WantRebuild |= ImGui::CheckboxFlags("Oblique", &FontsFlags, ImGuiFreeType::Oblique); } ImGui::End(); } };
Known issues
Obligatory comparison screenshots
Using Windows built-in segoeui.ttf font. Open in new browser tabs, view at 1080p+.