mirror of
https://github.com/ocornut/imgui.git
synced 2024-11-24 05:19:02 +08:00
Fonts: Ensure calling AddFontXXX function doesn't invalidates ImFont's ConfigData pointers prior to building again. (#6825)
This commit is contained in:
parent
b101cf46b6
commit
6addf28c4b
@ -82,6 +82,8 @@ Other changes:
|
|||||||
This is because our layout/font system currently doesn't fully support non-integer sizes. Until
|
This is because our layout/font system currently doesn't fully support non-integer sizes. Until
|
||||||
it does, this has been a common pitfall leading to more or less subtle issues. (#3164, #3309, #6800)
|
it does, this has been a common pitfall leading to more or less subtle issues. (#3164, #3309, #6800)
|
||||||
- Fonts: Better assert during load when passing truncated font data or wrong data size. (#6822)
|
- Fonts: Better assert during load when passing truncated font data or wrong data size. (#6822)
|
||||||
|
- Fonts: Ensure calling AddFontXXX function doesn't invalidates ImFont's ConfigData pointers
|
||||||
|
prior to building again. (#6825)
|
||||||
- InputTextMultiline: Fixed a crash pressing Down on last empty line of a multiline buffer.
|
- InputTextMultiline: Fixed a crash pressing Down on last empty line of a multiline buffer.
|
||||||
(regression from 1.89.2, only happened in some states). (#6783, #6000)
|
(regression from 1.89.2, only happened in some states). (#6783, #6000)
|
||||||
- InputTextMultiline: Fixed Tabbing cycle leading to a situation where Enter key wouldn't
|
- InputTextMultiline: Fixed Tabbing cycle leading to a situation where Enter key wouldn't
|
||||||
|
@ -2183,6 +2183,8 @@ ImFont* ImFontAtlas::AddFont(const ImFontConfig* font_cfg)
|
|||||||
if (new_font_cfg.DstFont->EllipsisChar == (ImWchar)-1)
|
if (new_font_cfg.DstFont->EllipsisChar == (ImWchar)-1)
|
||||||
new_font_cfg.DstFont->EllipsisChar = font_cfg->EllipsisChar;
|
new_font_cfg.DstFont->EllipsisChar = font_cfg->EllipsisChar;
|
||||||
|
|
||||||
|
ImFontAtlasUpdateConfigDataPointers(this);
|
||||||
|
|
||||||
// Invalidate texture
|
// Invalidate texture
|
||||||
TexReady = false;
|
TexReady = false;
|
||||||
ClearTexData();
|
ClearTexData();
|
||||||
@ -2695,19 +2697,31 @@ const ImFontBuilderIO* ImFontAtlasGetBuilderForStbTruetype()
|
|||||||
|
|
||||||
#endif // IMGUI_ENABLE_STB_TRUETYPE
|
#endif // IMGUI_ENABLE_STB_TRUETYPE
|
||||||
|
|
||||||
|
void ImFontAtlasUpdateConfigDataPointers(ImFontAtlas* atlas)
|
||||||
|
{
|
||||||
|
for (ImFontConfig& font_cfg : atlas->ConfigData)
|
||||||
|
{
|
||||||
|
ImFont* font = font_cfg.DstFont;
|
||||||
|
if (!font_cfg.MergeMode)
|
||||||
|
{
|
||||||
|
font->ConfigData = &font_cfg;
|
||||||
|
font->ConfigDataCount = 0;
|
||||||
|
}
|
||||||
|
font->ConfigDataCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void ImFontAtlasBuildSetupFont(ImFontAtlas* atlas, ImFont* font, ImFontConfig* font_config, float ascent, float descent)
|
void ImFontAtlasBuildSetupFont(ImFontAtlas* atlas, ImFont* font, ImFontConfig* font_config, float ascent, float descent)
|
||||||
{
|
{
|
||||||
if (!font_config->MergeMode)
|
if (!font_config->MergeMode)
|
||||||
{
|
{
|
||||||
font->ClearOutputData();
|
font->ClearOutputData();
|
||||||
font->FontSize = font_config->SizePixels;
|
font->FontSize = font_config->SizePixels;
|
||||||
font->ConfigData = font_config;
|
IM_ASSERT(font->ConfigData == font_config);
|
||||||
font->ConfigDataCount = 0;
|
|
||||||
font->ContainerAtlas = atlas;
|
font->ContainerAtlas = atlas;
|
||||||
font->Ascent = ascent;
|
font->Ascent = ascent;
|
||||||
font->Descent = descent;
|
font->Descent = descent;
|
||||||
}
|
}
|
||||||
font->ConfigDataCount++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImFontAtlasBuildPackCustomRects(ImFontAtlas* atlas, void* stbrp_context_opaque)
|
void ImFontAtlasBuildPackCustomRects(ImFontAtlas* atlas, void* stbrp_context_opaque)
|
||||||
@ -3269,6 +3283,7 @@ void ImFont::BuildLookupTable()
|
|||||||
max_codepoint = ImMax(max_codepoint, (int)Glyphs[i].Codepoint);
|
max_codepoint = ImMax(max_codepoint, (int)Glyphs[i].Codepoint);
|
||||||
|
|
||||||
// Build lookup table
|
// Build lookup table
|
||||||
|
IM_ASSERT(Glyphs.Size > 0 && "Font has not loaded glyph!");
|
||||||
IM_ASSERT(Glyphs.Size < 0xFFFF); // -1 is reserved
|
IM_ASSERT(Glyphs.Size < 0xFFFF); // -1 is reserved
|
||||||
IndexAdvanceX.clear();
|
IndexAdvanceX.clear();
|
||||||
IndexLookup.clear();
|
IndexLookup.clear();
|
||||||
|
@ -3385,6 +3385,7 @@ struct ImFontBuilderIO
|
|||||||
#ifdef IMGUI_ENABLE_STB_TRUETYPE
|
#ifdef IMGUI_ENABLE_STB_TRUETYPE
|
||||||
IMGUI_API const ImFontBuilderIO* ImFontAtlasGetBuilderForStbTruetype();
|
IMGUI_API const ImFontBuilderIO* ImFontAtlasGetBuilderForStbTruetype();
|
||||||
#endif
|
#endif
|
||||||
|
IMGUI_API void ImFontAtlasUpdateConfigDataPointers(ImFontAtlas* atlas);
|
||||||
IMGUI_API void ImFontAtlasBuildInit(ImFontAtlas* atlas);
|
IMGUI_API void ImFontAtlasBuildInit(ImFontAtlas* atlas);
|
||||||
IMGUI_API void ImFontAtlasBuildSetupFont(ImFontAtlas* atlas, ImFont* font, ImFontConfig* font_config, float ascent, float descent);
|
IMGUI_API void ImFontAtlasBuildSetupFont(ImFontAtlas* atlas, ImFont* font, ImFontConfig* font_config, float ascent, float descent);
|
||||||
IMGUI_API void ImFontAtlasBuildPackCustomRects(ImFontAtlas* atlas, void* stbrp_context_opaque);
|
IMGUI_API void ImFontAtlasBuildPackCustomRects(ImFontAtlas* atlas, void* stbrp_context_opaque);
|
||||||
|
Loading…
Reference in New Issue
Block a user