|
@@ -1997,12 +1997,13 @@ struct ImFontGlyph
|
|
|
// This is essentially a tightly packed of vector of 64k booleans = 8KB storage.
|
|
|
struct ImFontGlyphRangesBuilder
|
|
|
{
|
|
|
- ImVector<int> UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used)
|
|
|
+ ImVector<ImU32> UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used)
|
|
|
|
|
|
- ImFontGlyphRangesBuilder() { UsedChars.resize(0x10000 / sizeof(int)); memset(UsedChars.Data, 0, 0x10000 / sizeof(int)); }
|
|
|
- bool GetBit(int n) const { int off = (n >> 5); int mask = 1 << (n & 31); return (UsedChars[off] & mask) != 0; } // Get bit n in the array
|
|
|
- void SetBit(int n) { int off = (n >> 5); int mask = 1 << (n & 31); UsedChars[off] |= mask; } // Set bit n in the array
|
|
|
- void AddChar(ImWchar c) { SetBit(c); } // Add character
|
|
|
+ ImFontGlyphRangesBuilder() { Clear(); }
|
|
|
+ inline void Clear() { int size_in_bytes = 0x10000 / 8; UsedChars.resize(size_in_bytes / (int)sizeof(ImU32)); memset(UsedChars.Data, 0, (size_t)size_in_bytes); }
|
|
|
+ inline bool GetBit(int n) const { int off = (n >> 5); ImU32 mask = 1u << (n & 31); return (UsedChars[off] & mask) != 0; } // Get bit n in the array
|
|
|
+ inline void SetBit(int n) { int off = (n >> 5); ImU32 mask = 1u << (n & 31); UsedChars[off] |= mask; } // Set bit n in the array
|
|
|
+ inline void AddChar(ImWchar c) { SetBit(c); } // Add character
|
|
|
IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added)
|
|
|
IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault()) to force add all of ASCII/Latin+Ext
|
|
|
IMGUI_API void BuildRanges(ImVector<ImWchar>* out_ranges); // Output new ranges
|