diff --git a/imgui.h b/imgui.h index f99eaedd3..b63b0ed4e 100644 --- a/imgui.h +++ b/imgui.h @@ -3479,7 +3479,7 @@ struct ImFontConfig }; // Hold rendering data for one glyph. -// (Note: some language parsers may fail to convert the 31+1 bitfield members, in this case maybe drop store a single u32 or we can rework this) +// (Note: some language parsers may fail to convert the bitfield members, in this case maybe drop store a single u32 or we can rework this) struct ImFontGlyph { unsigned int Colored : 1; // Flag to indicate glyph is colored and should generally ignore tinting (make it usable with no shift on little-endian as this is used in loops) diff --git a/imgui_draw.cpp b/imgui_draw.cpp index 40ae02ed5..c311b18af 100644 --- a/imgui_draw.cpp +++ b/imgui_draw.cpp @@ -5013,23 +5013,23 @@ bool ImFont::IsGlyphRangeUnused(unsigned int c_begin, unsigned int c_last) // x0/y0/x1/y1 are offset from the character upper-left layout position, in pixels. Therefore x0/y0 are often fairly close to zero. // Not to be mistaken with texture coordinates, which are held by u0/v0/u1/v1 in normalized format (0.0..1.0 on each texture axis). -// 'src' is not necessarily == 'this->Sources' because multiple source fonts+configs can be used to build one target font. +// - 'src' is not necessarily == 'this->Sources' because multiple source fonts+configs can be used to build one target font. ImFontGlyph* ImFontAtlasBakedAddFontGlyph(ImFontAtlas* atlas, ImFontBaked* baked, ImFontConfig* src, const ImFontGlyph* in_glyph) { int glyph_idx = baked->Glyphs.Size; baked->Glyphs.push_back(*in_glyph); - ImFontGlyph& glyph = baked->Glyphs[glyph_idx]; + ImFontGlyph* glyph = &baked->Glyphs[glyph_idx]; IM_ASSERT(baked->Glyphs.Size < 0xFFFE); // IndexLookup[] hold 16-bit values and -1/-2 are reserved. // Set UV from packed rectangle - if (glyph.PackId != ImFontAtlasRectId_Invalid) + if (glyph->PackId != ImFontAtlasRectId_Invalid) { - ImTextureRect* r = ImFontAtlasPackGetRect(atlas, glyph.PackId); - IM_ASSERT(glyph.U0 == 0.0f && glyph.V0 == 0.0f && glyph.U1 == 0.0f && glyph.V1 == 0.0f); - glyph.U0 = (r->x) * atlas->TexUvScale.x; - glyph.V0 = (r->y) * atlas->TexUvScale.y; - glyph.U1 = (r->x + r->w) * atlas->TexUvScale.x; - glyph.V1 = (r->y + r->h) * atlas->TexUvScale.y; + ImTextureRect* r = ImFontAtlasPackGetRect(atlas, glyph->PackId); + IM_ASSERT(glyph->U0 == 0.0f && glyph->V0 == 0.0f && glyph->U1 == 0.0f && glyph->V1 == 0.0f); + glyph->U0 = (r->x) * atlas->TexUvScale.x; + glyph->V0 = (r->y) * atlas->TexUvScale.y; + glyph->U1 = (r->x + r->w) * atlas->TexUvScale.x; + glyph->V1 = (r->y + r->h) * atlas->TexUvScale.y; baked->MetricsTotalSurface += r->w * r->h; } @@ -5037,12 +5037,12 @@ ImFontGlyph* ImFontAtlasBakedAddFontGlyph(ImFontAtlas* atlas, ImFontBaked* baked { // Clamp & recenter if needed const float offsets_scale = baked->Size / baked->ContainerFont->Sources[0].SizePixels; - float advance_x = ImClamp(glyph.AdvanceX, src->GlyphMinAdvanceX * offsets_scale, src->GlyphMaxAdvanceX * offsets_scale); - if (advance_x != glyph.AdvanceX) + float advance_x = ImClamp(glyph->AdvanceX, src->GlyphMinAdvanceX * offsets_scale, src->GlyphMaxAdvanceX * offsets_scale); + if (advance_x != glyph->AdvanceX) { - float char_off_x = src->PixelSnapH ? ImTrunc((advance_x - glyph.AdvanceX) * 0.5f) : (advance_x - glyph.AdvanceX) * 0.5f; - glyph.X0 += char_off_x; - glyph.X1 += char_off_x; + float char_off_x = src->PixelSnapH ? ImTrunc((advance_x - glyph->AdvanceX) * 0.5f) : (advance_x - glyph->AdvanceX) * 0.5f; + glyph->X0 += char_off_x; + glyph->X1 += char_off_x; } // Snap to pixel @@ -5050,20 +5050,20 @@ ImFontGlyph* ImFontAtlasBakedAddFontGlyph(ImFontAtlas* atlas, ImFontBaked* baked advance_x = IM_ROUND(advance_x); // Bake spacing - glyph.AdvanceX = advance_x + src->GlyphExtraAdvanceX; + glyph->AdvanceX = advance_x + src->GlyphExtraAdvanceX; } - if (glyph.Colored) + if (glyph->Colored) atlas->TexPixelsUseColors = atlas->TexData->UseColors = true; // Update lookup tables - int codepoint = glyph.Codepoint; + const int codepoint = glyph->Codepoint; ImFontBaked_BuildGrowIndex(baked, codepoint + 1); - baked->IndexAdvanceX[codepoint] = glyph.AdvanceX; + baked->IndexAdvanceX[codepoint] = glyph->AdvanceX; baked->IndexLookup[codepoint] = (ImU16)glyph_idx; const int page_n = codepoint / 8192; baked->ContainerFont->Used8kPagesMap[page_n >> 3] |= 1 << (page_n & 7); - return &glyph; + return glyph; } // Copy to texture, post-process and queue update for backend