From d95c96e20e86ecba415f29ea2e22a9cb9a57dd54 Mon Sep 17 00:00:00 2001 From: ocornut Date: Thu, 16 Jan 2025 15:41:46 +0100 Subject: [PATCH] WIP - Added a bit of user facing tooling. --- imgui.cpp | 29 +++++++++++++++++++++++++++++ imgui_demo.cpp | 3 ++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/imgui.cpp b/imgui.cpp index 3e261ddbb..c81b3289b 100644 --- a/imgui.cpp +++ b/imgui.cpp @@ -21202,6 +21202,13 @@ namespace ImGuiFreeType { IMGUI_API const ImFontLoader* GetFontLoader(); } // [DEBUG] List fonts in a font atlas and display its texture void ImGui::ShowFontAtlas(ImFontAtlas* atlas) { + SeparatorText("Fonts"); + Text("Read the FAQ at "); + SameLine(0, 0); + TextLinkOpenURL("https://www.dearimgui.com/faq/"); + SameLine(0, 0); + Text(" for details on font loading."); + // Font loaders if (TreeNode("Loader", "Loader: \'%s\'", atlas->FontLoaderName ? atlas->FontLoaderName : "NULL")) { @@ -21240,6 +21247,28 @@ void ImGui::ShowFontAtlas(ImFontAtlas* atlas) PopID(); } + SeparatorText("Font Atlas"); + if (Button("Clear Cache")) + atlas->ClearCache(); + SameLine(); + if (Button("Grow")) + ImFontAtlasBuildGrowTexture(atlas); + SameLine(); + if (Button("Compact")) + ImFontAtlasBuildCompactTexture(atlas); + + for (int tex_n = 0; tex_n < atlas->TexList.Size; tex_n++) + { + ImTextureData* tex = atlas->TexList[tex_n]; + if (tex_n > 0) + SameLine(); + Text("Tex: %dx%d", tex->Width, tex->Height); + } + const int packed_surface_sqrt = (int)sqrtf((float)atlas->Builder->RectsPackedSurface); + const int discarded_surface_sqrt = (int)sqrtf((float)atlas->Builder->RectsDiscardedSurface); + Text("Packed rects: %d, area: about %d px ~%dx%d px", atlas->Builder->RectsPackedCount, atlas->Builder->RectsPackedSurface, packed_surface_sqrt, packed_surface_sqrt); + Text("incl. Discarded rects: %d, area: about %d px ~%dx%d px", atlas->Builder->RectsDiscardedCount, atlas->Builder->RectsDiscardedSurface, discarded_surface_sqrt, discarded_surface_sqrt); + // Texture list for (ImTextureData* tex : atlas->TexList) { diff --git a/imgui_demo.cpp b/imgui_demo.cpp index 07d086170..051880ef4 100644 --- a/imgui_demo.cpp +++ b/imgui_demo.cpp @@ -8440,11 +8440,12 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref) { ImGuiIO& io = ImGui::GetIO(); ImFontAtlas* atlas = io.Fonts; - HelpMarker("Read FAQ and docs/FONTS.md for details on font loading."); + ImGui::ShowFontAtlas(atlas); // Post-baking font scaling. Note that this is NOT the nice way of scaling fonts, read below. // (we enforce hard clamping manually as by default DragFloat/SliderFloat allows CTRL+Click text to get out of bounds). + ImGui::SeparatorText("Legacy Scaling"); const float MIN_SCALE = 0.3f; const float MAX_SCALE = 2.0f; HelpMarker(