mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-29 04:01:07 +01:00 
			
		
		
		
	ImFontGlyphRangesBuilder: Using 32-bits fields for storage instead of 8-bit ones, comments, todo.
This commit is contained in:
		| @@ -319,6 +319,7 @@ It's mostly a bunch of personal notes, probably incomplete. Feel free to query i | ||||
|  - optimization: replace vsnprintf with stb_printf? or enable the defines/infrastructure to allow it (#1038) | ||||
|  - optimization: add clipping for multi-component widgets (SliderFloatX, ColorEditX, etc.). one problem is that nav branch can't easily clip parent group when there is a move request. | ||||
|  - optimization: add a flag to disable most of rendering, for the case where the user expect to skip it (#335) | ||||
|  - optimization: fully covered window (covered by another with non-translucent bg + WindowRounding worth of padding) may want to clip rendering. | ||||
|  - optimization: use another hash function than crc32, e.g. FNV1a | ||||
|  - optimization/render: merge command-lists with same clip-rect into one even if they aren't sequential? (as long as in-between clip rectangle don't overlap)? | ||||
|  - optimization: turn some the various stack vectors into statically-sized arrays | ||||
|   | ||||
							
								
								
									
										18
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								imgui.h
									
									
									
									
									
								
							| @@ -13,14 +13,14 @@ Index of this file: | ||||
| // Forward declarations and basic types | ||||
| // ImGui API (Dear ImGui end-user API) | ||||
| // Flags & Enumerations | ||||
| // ImVector | ||||
| // ImVector<> | ||||
| // ImGuiStyle | ||||
| // ImGuiIO | ||||
| // Misc data structures (ImGuiInputTextCallbackData, ImGuiSizeCallbackData, ImGuiPayload) | ||||
| // Obsolete functions | ||||
| // Helpers (ImGuiOnceUponAFrame, ImGuiTextFilter, ImGuiTextBuffer, ImGuiStorage, ImGuiListClipper, ImColor) | ||||
| // Draw List API (ImDrawCmd, ImDrawIdx, ImDrawVert, ImDrawChannel, ImDrawListFlags, ImDrawList, ImDrawData) | ||||
| // Font API (ImFontConfig, ImFontGlyph, ImFontAtlasFlags, ImFontAtlas, ImFont) | ||||
| // Font API (ImFontConfig, ImFontGlyph, ImFontGlyphRangesBuilder, ImFontAtlasFlags, ImFontAtlas, ImFont) | ||||
|  | ||||
| */ | ||||
|  | ||||
| @@ -1155,11 +1155,11 @@ enum ImGuiCond_ | ||||
|  | ||||
| //----------------------------------------------------------------------------- | ||||
| // Helper: ImVector<> | ||||
| // Lightweight std::vector<>-like class to avoid dragging dependencies (also: some implementations of STL with debug enabled are absurdly slow, we bypass it so our code runs fast in debug). | ||||
| // Lightweight std::vector<>-like class to avoid dragging dependencies (also, some implementations of STL with debug enabled are absurdly slow, we bypass it so our code runs fast in debug). | ||||
| // You generally do NOT need to care or use this ever. But we need to make it available in imgui.h because some of our data structures are relying on it. | ||||
| // Important: clear() frees memory, resize(0) keep the allocated buffer. We use resize(0) a lot to intentionally recycle allocated buffers across frames and amortize our costs. | ||||
| // Important: our implementation does NOT call C++ constructors/destructors, we treat everything as raw data! This is intentional but be extra mindful of that,  | ||||
| // do NOT use this class as a std::vector replacement in your own code! | ||||
| // do NOT use this class as a std::vector replacement in your own code! Many of the structures used by dear imgui can be safely initialized by a zero-memset. | ||||
| //----------------------------------------------------------------------------- | ||||
|  | ||||
| template<typename T> | ||||
| @@ -1933,12 +1933,14 @@ struct ImFontGlyph | ||||
| }; | ||||
|  | ||||
| // Helper to build glyph ranges from text/string data. Feed your application strings/characters to it then call BuildRanges(). | ||||
| // This is essentially a tightly packed of vector of 64k booleans = 8KB storage. | ||||
| struct ImFontGlyphRangesBuilder | ||||
| { | ||||
|     ImVector<unsigned char> UsedChars;  // Store 1-bit per Unicode code point (0=unused, 1=used) | ||||
|     ImFontGlyphRangesBuilder()          { UsedChars.resize(0x10000 / 8); memset(UsedChars.Data, 0, 0x10000 / 8); } | ||||
|     bool           GetBit(int n) const  { return (UsedChars[n >> 3] & (1 << (n & 7))) != 0; } | ||||
|     void           SetBit(int n)        { UsedChars[n >> 3] |= 1 << (n & 7); }  // Set bit 'c' in the array | ||||
|     ImVector<int> UsedChars;            // Store 1-bit per Unicode code point (0=unused, 1=used) | ||||
|  | ||||
|     ImFontGlyphRangesBuilder()          { UsedChars.resize(0x10000 / 32); memset(UsedChars.Data, 0, 0x10000 / 32); } | ||||
|     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 | ||||
|     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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user