Merge branch 'inolen-atlas_build_clear_font'

This commit is contained in:
omar 2017-10-22 10:25:08 +02:00
commit b52e207758
3 changed files with 10 additions and 11 deletions

View File

@ -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);

View File

@ -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

View File

@ -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->ClearOutputData();
font->ConfigData = font_config;
font->ConfigDataCount = 0;
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();