Преглед изворни кода

Merge branch 'inolen-atlas_build_clear_font'

omar пре 8 година
родитељ
комит
b52e207758
3 измењених фајлова са 10 додато и 11 уклоњено
  1. 1 1
      imgui.h
  2. 2 0
      imgui_demo.cpp
  3. 7 10
      imgui_draw.cpp

+ 1 - 1
imgui.h

@@ -1500,7 +1500,7 @@ struct ImFont
     // Methods
     // Methods
     IMGUI_API ImFont();
     IMGUI_API ImFont();
     IMGUI_API ~ImFont();
     IMGUI_API ~ImFont();
-    IMGUI_API void              Clear();
+    IMGUI_API void              ClearOutputData();
     IMGUI_API void              BuildLookupTable();
     IMGUI_API void              BuildLookupTable();
     IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const;
     IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const;
     IMGUI_API void              SetFallbackChar(ImWchar c);
     IMGUI_API void              SetFallbackChar(ImWchar c);

+ 2 - 0
imgui_demo.cpp

@@ -1951,6 +1951,7 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref)
         for (int i = 0; i < atlas->Fonts.Size; i++)
         for (int i = 0; i < atlas->Fonts.Size; i++)
         {
         {
             ImFont* font = atlas->Fonts[i];
             ImFont* font = atlas->Fonts[i];
+            ImGui::PushID(font);
             bool font_details_opened = ImGui::TreeNode(font, "Font %d: \'%s\', %.2f px, %d glyphs", i, font->ConfigData ? font->ConfigData[0].Name : "", font->FontSize, font->Glyphs.Size);
             bool font_details_opened = ImGui::TreeNode(font, "Font %d: \'%s\', %.2f px, %d glyphs", i, font->ConfigData ? font->ConfigData[0].Name : "", font->FontSize, font->Glyphs.Size);
             ImGui::SameLine(); if (ImGui::SmallButton("Set as default")) ImGui::GetIO().FontDefault = font;
             ImGui::SameLine(); if (ImGui::SmallButton("Set as default")) ImGui::GetIO().FontDefault = font;
             if (font_details_opened)
             if (font_details_opened)
@@ -2011,6 +2012,7 @@ void ImGui::ShowStyleEditor(ImGuiStyle* ref)
                 }
                 }
                 ImGui::TreePop();
                 ImGui::TreePop();
             }
             }
+            ImGui::PopID();
         }
         }
         static float window_scale = 1.0f;
         static float window_scale = 1.0f;
         ImGui::DragFloat("this window scale", &window_scale, 0.005f, 0.3f, 2.0f, "%.1f");              // scale only this window
         ImGui::DragFloat("this window scale", &window_scale, 0.005f, 0.3f, 2.0f, "%.1f");              // scale only this window

+ 7 - 10
imgui_draw.cpp

@@ -1577,7 +1577,6 @@ bool    ImFontAtlasBuildWithStbTruetype(ImFontAtlas* atlas)
         const float off_x = cfg.GlyphOffset.x;
         const float off_x = cfg.GlyphOffset.x;
         const float off_y = cfg.GlyphOffset.y + (float)(int)(dst_font->Ascent + 0.5f);
         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++)
         for (int i = 0; i < tmp.RangesCount; i++)
         {
         {
             stbtt_pack_range& range = tmp.Ranges[i];
             stbtt_pack_range& range = tmp.Ranges[i];
@@ -1619,14 +1618,12 @@ void ImFontAtlasBuildSetupFont(ImFontAtlas* atlas, ImFont* font, ImFontConfig* f
 {
 {
     if (!font_config->MergeMode)
     if (!font_config->MergeMode)
     {
     {
-        font->ContainerAtlas = atlas;
-        font->ConfigData = font_config;
-        font->ConfigDataCount = 0;
+        font->ClearOutputData();
         font->FontSize = font_config->SizePixels;
         font->FontSize = font_config->SizePixels;
+        font->ConfigData = font_config;
+        font->ContainerAtlas = atlas;
         font->Ascent = ascent;
         font->Ascent = ascent;
         font->Descent = descent;
         font->Descent = descent;
-        font->Glyphs.resize(0);
-        font->MetricsTotalSurface = 0;
     }
     }
     font->ConfigDataCount++;
     font->ConfigDataCount++;
 }
 }
@@ -1903,7 +1900,8 @@ ImFont::ImFont()
 {
 {
     Scale = 1.0f;
     Scale = 1.0f;
     FallbackChar = (ImWchar)'?';
     FallbackChar = (ImWchar)'?';
-    Clear();
+    DisplayOffset = ImVec2(0.0f, 1.0f);
+    ClearOutputData();
 }
 }
 
 
 ImFont::~ImFont()
 ImFont::~ImFont()
@@ -1916,13 +1914,12 @@ ImFont::~ImFont()
     if (g.Font == this)
     if (g.Font == this)
         g.Font = NULL;
         g.Font = NULL;
     */
     */
-    Clear();
+    ClearOutputData();
 }
 }
 
 
-void    ImFont::Clear()
+void    ImFont::ClearOutputData()
 {
 {
     FontSize = 0.0f;
     FontSize = 0.0f;
-    DisplayOffset = ImVec2(0.0f, 1.0f);
     Glyphs.clear();
     Glyphs.clear();
     IndexAdvanceX.clear();
     IndexAdvanceX.clear();
     IndexLookup.clear();
     IndexLookup.clear();