Browse Source

Fonts: tidying up.

ocornut 5 months ago
parent
commit
526a5d0f8a
2 changed files with 16 additions and 20 deletions
  1. 9 13
      imgui_draw.cpp
  2. 7 7
      imgui_internal.h

+ 9 - 13
imgui_draw.cpp

@@ -2654,17 +2654,14 @@ void ImFontAtlas::ClearInputData()
         const ImFontLoader* loader = font_cfg.FontLoader ? font_cfg.FontLoader : FontLoader;
         const ImFontLoader* loader = font_cfg.FontLoader ? font_cfg.FontLoader : FontLoader;
         if (loader && loader->FontSrcDestroy != NULL)
         if (loader && loader->FontSrcDestroy != NULL)
             loader->FontSrcDestroy(this, &font_cfg);
             loader->FontSrcDestroy(this, &font_cfg);
-        ImFontAtlasBuildDiscardFontSource(this, &font_cfg);
+        ImFontAtlasBuildDestroyFontSourceData(this, &font_cfg);
     }
     }
 
 
-    // When clearing this we lose access to the font name and other information used to build the font.
     for (ImFont* font : Fonts)
     for (ImFont* font : Fonts)
     {
     {
-        if (font->Sources >= Sources.Data && font->Sources < Sources.Data + Sources.Size)
-        {
-            font->Sources = NULL;
-            font->SourcesCount = 0;
-        }
+        // When clearing this we lose access to the font name and other information used to build the font.
+        font->Sources = NULL;
+        font->SourcesCount = 0;
         font->Flags |= ImFontFlags_NoLoadGlyphs;
         font->Flags |= ImFontFlags_NoLoadGlyphs;
     }
     }
     Sources.clear();
     Sources.clear();
@@ -2978,14 +2975,14 @@ bool ImFontAtlas::Build()
 }
 }
 #endif // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
 #endif // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
 
 
-void ImFontAtlasBuildDiscardFontSource(ImFontAtlas* atlas, ImFontConfig* src)
+void ImFontAtlasBuildDestroyFontSourceData(ImFontAtlas* atlas, ImFontConfig* src)
 {
 {
     IM_UNUSED(atlas);
     IM_UNUSED(atlas);
     if (src->FontDataOwnedByAtlas)
     if (src->FontDataOwnedByAtlas)
         IM_FREE(src->FontData);
         IM_FREE(src->FontData);
+    src->FontData = NULL;
     if (src->GlyphExcludeRanges)
     if (src->GlyphExcludeRanges)
         IM_FREE((void*)src->GlyphExcludeRanges);
         IM_FREE((void*)src->GlyphExcludeRanges);
-    src->FontData = NULL;
     src->GlyphExcludeRanges = NULL;
     src->GlyphExcludeRanges = NULL;
 }
 }
 
 
@@ -3048,7 +3045,7 @@ ImFont* ImFontAtlas::AddFont(const ImFontConfig* font_cfg)
     if (!ImFontAtlasBuildAddFont(this, &new_font_cfg))
     if (!ImFontAtlasBuildAddFont(this, &new_font_cfg))
     {
     {
         // Rollback (this is a fragile/rarely exercised code-path. TestSuite's "misc_atlas_add_invalid_font" aim to test this)
         // Rollback (this is a fragile/rarely exercised code-path. TestSuite's "misc_atlas_add_invalid_font" aim to test this)
-        ImFontAtlasBuildDiscardFontSource(this, &new_font_cfg);
+        ImFontAtlasBuildDestroyFontSourceData(this, &new_font_cfg);
         Sources.pop_back();
         Sources.pop_back();
         if (!font_cfg->MergeMode)
         if (!font_cfg->MergeMode)
         {
         {
@@ -3593,9 +3590,8 @@ bool ImFontAtlasBuildAddFont(ImFontAtlas* atlas, ImFontConfig* src)
     }
     }
 
 
     const ImFontLoader* loader = src->FontLoader ? src->FontLoader : atlas->FontLoader;
     const ImFontLoader* loader = src->FontLoader ? src->FontLoader : atlas->FontLoader;
-    if (loader->FontSrcInit != NULL)
-        if (!loader->FontSrcInit(atlas, src))
-            return false;
+    if (loader->FontSrcInit != NULL && !loader->FontSrcInit(atlas, src))
+        return false;
 
 
     atlas->TexIsBuilt = false; // For legacy backends
     atlas->TexIsBuilt = false; // For legacy backends
     ImFontAtlasBuildSetupFontSpecialGlyphs(atlas, font, src);
     ImFontAtlasBuildSetupFontSpecialGlyphs(atlas, font, src);

+ 7 - 7
imgui_internal.h

@@ -3770,20 +3770,20 @@ IMGUI_API void              ImFontAtlasBuildGrowTexture(ImFontAtlas* atlas, int
 IMGUI_API void              ImFontAtlasBuildCompactTexture(ImFontAtlas* atlas);
 IMGUI_API void              ImFontAtlasBuildCompactTexture(ImFontAtlas* atlas);
 IMGUI_API ImVec2i           ImFontAtlasBuildGetTextureSizeEstimate(ImFontAtlas* atlas);
 IMGUI_API ImVec2i           ImFontAtlasBuildGetTextureSizeEstimate(ImFontAtlas* atlas);
 
 
+IMGUI_API bool              ImFontAtlasBuildAddFont(ImFontAtlas* atlas, ImFontConfig* src);
+IMGUI_API void              ImFontAtlasBuildSetupFontSpecialGlyphs(ImFontAtlas* atlas, ImFont* font, ImFontConfig* src);
+IMGUI_API void              ImFontAtlasBuildPreloadAllGlyphRanges(ImFontAtlas* atlas); // Legacy
+IMGUI_API void              ImFontAtlasBuildGetOversampleFactors(ImFontConfig* src, float size, int* out_oversample_h, int* out_oversample_v);
+IMGUI_API void              ImFontAtlasBuildDestroyFontSourceData(ImFontAtlas* atlas, ImFontConfig* src);
 IMGUI_API void              ImFontAtlasBuildReloadAll(ImFontAtlas* atlas);                     // Reinit/rebuild, notably if font loader params have changed.
 IMGUI_API void              ImFontAtlasBuildReloadAll(ImFontAtlas* atlas);                     // Reinit/rebuild, notably if font loader params have changed.
 IMGUI_API void              ImFontAtlasBuildReloadFont(ImFontAtlas* atlas, ImFontConfig* src); // Reinit/rebuild, notably if font loader params have changed.
 IMGUI_API void              ImFontAtlasBuildReloadFont(ImFontAtlas* atlas, ImFontConfig* src); // Reinit/rebuild, notably if font loader params have changed.
 
 
-IMGUI_API bool              ImFontAtlasBuildAddFont(ImFontAtlas* atlas, ImFontConfig* src);
-IMGUI_API void              ImFontAtlasBuildSetupFontSpecialGlyphs(ImFontAtlas* atlas, ImFont* font, ImFontConfig* src);
-IMGUI_API void              ImFontAtlasBuildDiscardBakes(ImFontAtlas* atlas, int unused_frames);
-IMGUI_API void              ImFontAtlasBuildDiscardFontBakes(ImFontAtlas* atlas, ImFont* font);
-IMGUI_API void              ImFontAtlasBuildDiscardFontSource(ImFontAtlas* atlas, ImFontConfig* src);
 IMGUI_API ImFontBaked*      ImFontAtlasBuildAddFontBaked(ImFontAtlas* atlas, ImFont* font, float font_size, ImGuiID baked_id);
 IMGUI_API ImFontBaked*      ImFontAtlasBuildAddFontBaked(ImFontAtlas* atlas, ImFont* font, float font_size, ImGuiID baked_id);
 IMGUI_API ImFontBaked*      ImFontAtlasBuildGetClosestFontBakedMatch(ImFontAtlas* atlas, ImFont* font, float font_size);
 IMGUI_API ImFontBaked*      ImFontAtlasBuildGetClosestFontBakedMatch(ImFontAtlas* atlas, ImFont* font, float font_size);
+IMGUI_API void              ImFontAtlasBuildDiscardBakes(ImFontAtlas* atlas, int unused_frames);
+IMGUI_API void              ImFontAtlasBuildDiscardFontBakes(ImFontAtlas* atlas, ImFont* font);
 IMGUI_API void              ImFontAtlasBuildDiscardFontBaked(ImFontAtlas* atlas, ImFont* font, ImFontBaked* baked);
 IMGUI_API void              ImFontAtlasBuildDiscardFontBaked(ImFontAtlas* atlas, ImFont* font, ImFontBaked* baked);
 IMGUI_API void              ImFontAtlasBuildDiscardFontBakedGlyph(ImFontAtlas* atlas, ImFont* font, ImFontBaked* baked, ImFontGlyph* glyph);
 IMGUI_API void              ImFontAtlasBuildDiscardFontBakedGlyph(ImFontAtlas* atlas, ImFont* font, ImFontBaked* baked, ImFontGlyph* glyph);
-IMGUI_API void              ImFontAtlasBuildPreloadAllGlyphRanges(ImFontAtlas* atlas); // Legacy
-IMGUI_API void              ImFontAtlasBuildGetOversampleFactors(ImFontConfig* src, float size, int* out_oversample_h, int* out_oversample_v);
 
 
 IMGUI_API ImFontGlyph*      ImFontAtlasBakedAddFontGlyph(ImFontAtlas* atlas, ImFontBaked* baked, ImFontConfig* src, const ImFontGlyph* in_glyph);
 IMGUI_API ImFontGlyph*      ImFontAtlasBakedAddFontGlyph(ImFontAtlas* atlas, ImFontBaked* baked, ImFontConfig* src, const ImFontGlyph* in_glyph);
 IMGUI_API void              ImFontAtlasBakedSetFontGlyphBitmap(ImFontAtlas* atlas, ImFontBaked* baked, ImFontConfig* src, ImFontGlyph* glyph, ImTextureRect* r, const unsigned char* src_pixels, ImTextureFormat src_fmt, int src_pitch);
 IMGUI_API void              ImFontAtlasBakedSetFontGlyphBitmap(ImFontAtlas* atlas, ImFontBaked* baked, ImFontConfig* src, ImFontGlyph* glyph, ImTextureRect* r, const unsigned char* src_pixels, ImTextureFormat src_fmt, int src_pitch);