Explorar o código

Completely clear font when rebuilding atlas.

Previously, IndexLookup was not cleared on each font, causing FindGlyph to return old glyphs when using MergeMode.
Anthony Pesch %!s(int64=8) %!d(string=hai) anos
pai
achega
c38526d14b
Modificáronse 1 ficheiros con 7 adicións e 6 borrados
  1. 7 6
      imgui_draw.cpp

+ 7 - 6
imgui_draw.cpp

@@ -1540,7 +1540,6 @@ bool    ImFontAtlasBuildWithStbTruetype(ImFontAtlas* atlas)
         const float off_x = cfg.GlyphOffset.x;
         const float off_y = cfg.GlyphOffset.y + (float)(int)(dst_font->Ascent + 0.5f);
 
-        dst_font->FallbackGlyph = NULL; // Always clear fallback so FindGlyph can return NULL. It will be set again in BuildLookupTable()
         for (int i = 0; i < tmp.RangesCount; i++)
         {
             stbtt_pack_range& range = tmp.Ranges[i];
@@ -1582,14 +1581,16 @@ void ImFontAtlasBuildSetupFont(ImFontAtlas* atlas, ImFont* font, ImFontConfig* f
 {
     if (!font_config->MergeMode)
     {
-        font->ContainerAtlas = atlas;
-        font->ConfigData = font_config;
-        font->ConfigDataCount = 0;
+        ImVec2 display_offset = font->DisplayOffset;
+
+        font->Clear();
+
         font->FontSize = font_config->SizePixels;
+        font->DisplayOffset = display_offset;
+        font->ConfigData = font_config;
+        font->ContainerAtlas = atlas;
         font->Ascent = ascent;
         font->Descent = descent;
-        font->Glyphs.resize(0);
-        font->MetricsTotalSurface = 0;
     }
     font->ConfigDataCount++;
 }