Fonts: removed size rounding in AddFont() which breaks relative sizing of merged fonts (8502)

# Conflicts:
#	imgui.cpp
This commit is contained in:
ocornut
2025-03-20 15:45:27 +01:00
parent 2de15dc64b
commit 168b97c291
3 changed files with 13 additions and 7 deletions

View File

@@ -3024,6 +3024,7 @@ ImFont* ImFontAtlas::AddFont(const ImFontConfig* font_cfg)
}
// Sanity check
// We don't round cfg.SizePixels yet as relative size of merged fonts are used afterwards.
if (font_cfg->GlyphExcludeRanges != NULL)
{
int size = 0;
@@ -3039,12 +3040,6 @@ ImFont* ImFontAtlas::AddFont(const ImFontConfig* font_cfg)
}
IM_ASSERT(font_cfg->FontLoaderData == NULL);
// Round font size
// - We started rounding in 1.90 WIP (18991) as our layout system currently doesn't support non-rounded font size well yet.
// - Note that using io.FontGlobalScale or SetWindowFontScale(), with are legacy-ish, partially supported features, can still lead to unrounded sizes.
// - We may support it better later and remove this rounding.
new_font_cfg.SizePixels = ImTrunc(new_font_cfg.SizePixels);
// Pointers to Sources are otherwise dangling
ImFontAtlasBuildUpdatePointers(this);
if (!ImFontAtlasBuildAddFont(this, &new_font_cfg))
@@ -5164,6 +5159,11 @@ ImGuiID ImFontAtlasBakedGetId(ImGuiID font_id, float baked_size)
ImFontBaked* ImFont::GetFontBaked(float size)
{
ImFontBaked* baked = LastBaked;
// Round font size
// - ImGui::PushFontSize() will already round, but other paths calling GetFontBaked() directly also needs it (e.g. ImFontAtlasBuildPreloadAllGlyphRanges)
size = ImGui::GetRoundedFontSize(size);
if (baked && baked->Size == size)
return baked;