mirror of
https://github.com/ocornut/imgui.git
synced 2026-01-09 23:54:20 +00:00
Fonts: fixed handling of ImFontConfig::FontDataOwnedByAtlas = false which did erroneously make a copy of the font data. (#9086)
Amend 815168c7e
+ Added explicit casts for intent/clarity when passing to stb_truetype/freetype.
This commit is contained in:
parent
5f82275ba1
commit
98636f4a23
3 changed files with 8 additions and 9 deletions
|
|
@ -43,6 +43,11 @@ Breaking Changes:
|
|||
|
||||
Other Changes:
|
||||
|
||||
- Fonts: fixed handling of `ImFontConfig::FontDataOwnedByAtlas = false` which
|
||||
did erroneously make a copy of the font data, essentially defeating the purpose
|
||||
of this flag and wasting memory.
|
||||
Undetected since July 2015 and now spotted by @TellowKrinkle, this is perhaps
|
||||
the oldest bug in Dear ImGui history (albeit for a rarely used feature)! (#9086)
|
||||
- Scrollbar: fixed a codepath leading to a divide-by-zero (which would not be
|
||||
noticeable by user but detected by sanitizers). (#9089) [@judicaelclair]
|
||||
|
||||
|
|
|
|||
|
|
@ -3052,12 +3052,6 @@ ImFont* ImFontAtlas::AddFont(const ImFontConfig* font_cfg_in)
|
|||
font->Sources.push_back(font_cfg);
|
||||
ImFontAtlasBuildUpdatePointers(this); // Pointers to Sources are otherwise dangling after we called Sources.push_back().
|
||||
|
||||
if (font_cfg->FontDataOwnedByAtlas == false)
|
||||
{
|
||||
font_cfg->FontDataOwnedByAtlas = true;
|
||||
font_cfg->FontData = ImMemdup(font_cfg->FontData, (size_t)font_cfg->FontDataSize);
|
||||
}
|
||||
|
||||
// Sanity check
|
||||
// We don't round cfg.SizePixels yet as relative size of merged fonts are used afterwards.
|
||||
if (font_cfg->GlyphExcludeRanges != NULL)
|
||||
|
|
@ -4583,14 +4577,14 @@ static bool ImGui_ImplStbTrueType_FontSrcInit(ImFontAtlas* atlas, ImFontConfig*
|
|||
IM_ASSERT(src->FontLoaderData == NULL);
|
||||
|
||||
// Initialize helper structure for font loading and verify that the TTF/OTF data is correct
|
||||
const int font_offset = stbtt_GetFontOffsetForIndex((unsigned char*)src->FontData, src->FontNo);
|
||||
const int font_offset = stbtt_GetFontOffsetForIndex((const unsigned char*)src->FontData, src->FontNo);
|
||||
if (font_offset < 0)
|
||||
{
|
||||
IM_DELETE(bd_font_data);
|
||||
IM_ASSERT_USER_ERROR(0, "stbtt_GetFontOffsetForIndex(): FontData is incorrect, or FontNo cannot be found.");
|
||||
return false;
|
||||
}
|
||||
if (!stbtt_InitFont(&bd_font_data->FontInfo, (unsigned char*)src->FontData, font_offset))
|
||||
if (!stbtt_InitFont(&bd_font_data->FontInfo, (const unsigned char*)src->FontData, font_offset))
|
||||
{
|
||||
IM_DELETE(bd_font_data);
|
||||
IM_ASSERT_USER_ERROR(0, "stbtt_InitFont(): failed to parse FontData. It is correct and complete? Check FontDataSize.");
|
||||
|
|
|
|||
|
|
@ -174,7 +174,7 @@ struct ImGui_ImplFreeType_FontSrcBakedData
|
|||
|
||||
bool ImGui_ImplFreeType_FontSrcData::InitFont(FT_Library ft_library, ImFontConfig* src, ImGuiFreeTypeLoaderFlags extra_font_loader_flags)
|
||||
{
|
||||
FT_Error error = FT_New_Memory_Face(ft_library, (uint8_t*)src->FontData, (FT_Long)src->FontDataSize, (FT_Long)src->FontNo, &FtFace);
|
||||
FT_Error error = FT_New_Memory_Face(ft_library, (const FT_Byte*)src->FontData, (FT_Long)src->FontDataSize, (FT_Long)src->FontNo, &FtFace);
|
||||
if (error != 0)
|
||||
return false;
|
||||
error = FT_Select_Charmap(FtFace, FT_ENCODING_UNICODE);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue