|
|
|
@ -3200,7 +3200,25 @@ void ImFont::BuildLookupTable() |
|
|
|
|
SetGlyphVisible((ImWchar)' ', false); |
|
|
|
|
SetGlyphVisible((ImWchar)'\t', false); |
|
|
|
|
|
|
|
|
|
// Ellipsis character is required for rendering elided text. We prefer using U+2026 (horizontal ellipsis).
|
|
|
|
|
// Setup Fallback character
|
|
|
|
|
const ImWchar fallback_chars[] = { (ImWchar)IM_UNICODE_CODEPOINT_INVALID, (ImWchar)'?', (ImWchar)' ' }; |
|
|
|
|
FallbackGlyph = FindGlyphNoFallback(FallbackChar); |
|
|
|
|
if (FallbackGlyph == NULL) |
|
|
|
|
{ |
|
|
|
|
FallbackChar = FindFirstExistingGlyph(this, fallback_chars, IM_ARRAYSIZE(fallback_chars)); |
|
|
|
|
FallbackGlyph = FindGlyphNoFallback(FallbackChar); |
|
|
|
|
if (FallbackGlyph == NULL) |
|
|
|
|
{ |
|
|
|
|
FallbackGlyph = &Glyphs.back(); |
|
|
|
|
FallbackChar = (ImWchar)FallbackGlyph->Codepoint; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
FallbackAdvanceX = FallbackGlyph->AdvanceX; |
|
|
|
|
for (int i = 0; i < max_codepoint + 1; i++) |
|
|
|
|
if (IndexAdvanceX[i] < 0.0f) |
|
|
|
|
IndexAdvanceX[i] = FallbackAdvanceX; |
|
|
|
|
|
|
|
|
|
// Setup Ellipsis character. It is required for rendering elided text. We prefer using U+2026 (horizontal ellipsis).
|
|
|
|
|
// However some old fonts may contain ellipsis at U+0085. Here we auto-detect most suitable ellipsis character.
|
|
|
|
|
// FIXME: Note that 0x2026 is rarely included in our font ranges. Because of this we are more likely to use three individual dots.
|
|
|
|
|
const ImWchar ellipsis_chars[] = { (ImWchar)0x2026, (ImWchar)0x0085 }; |
|
|
|
@ -3221,25 +3239,6 @@ void ImFont::BuildLookupTable() |
|
|
|
|
EllipsisCharStep = (glyph->X1 - glyph->X0) + 1.0f; |
|
|
|
|
EllipsisWidth = EllipsisCharStep * 3.0f - 1.0f; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Setup fallback character
|
|
|
|
|
const ImWchar fallback_chars[] = { (ImWchar)IM_UNICODE_CODEPOINT_INVALID, (ImWchar)'?', (ImWchar)' ' }; |
|
|
|
|
FallbackGlyph = FindGlyphNoFallback(FallbackChar); |
|
|
|
|
if (FallbackGlyph == NULL) |
|
|
|
|
{ |
|
|
|
|
FallbackChar = FindFirstExistingGlyph(this, fallback_chars, IM_ARRAYSIZE(fallback_chars)); |
|
|
|
|
FallbackGlyph = FindGlyphNoFallback(FallbackChar); |
|
|
|
|
if (FallbackGlyph == NULL) |
|
|
|
|
{ |
|
|
|
|
FallbackGlyph = &Glyphs.back(); |
|
|
|
|
FallbackChar = (ImWchar)FallbackGlyph->Codepoint; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
FallbackAdvanceX = FallbackGlyph->AdvanceX; |
|
|
|
|
for (int i = 0; i < max_codepoint + 1; i++) |
|
|
|
|
if (IndexAdvanceX[i] < 0.0f) |
|
|
|
|
IndexAdvanceX[i] = FallbackAdvanceX; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// API is designed this way to avoid exposing the 4K page size
|
|
|
|
|