mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-03 22:51:06 +01:00 
			
		
		
		
	Added ImFontAtlas::AddFontFromMemoryCompressedBase85TTF()
This commit is contained in:
		
							
								
								
									
										29
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								imgui.cpp
									
									
									
									
									
								
							@@ -9895,10 +9895,9 @@ ImFont* ImFontAtlas::AddFont(const ImFontConfig* font_cfg)
 | 
				
			|||||||
    return Fonts.back();
 | 
					    return Fonts.back();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Default font ttf is compressed with stb_compress then base85 encoded (see extra_fonts/binary_to_compressed_c.cpp for encoder)
 | 
				
			||||||
static unsigned int stb_decompress_length(unsigned char *input);
 | 
					static unsigned int stb_decompress_length(unsigned char *input);
 | 
				
			||||||
static unsigned int stb_decompress(unsigned char *output, unsigned char *i, unsigned int length);
 | 
					static unsigned int stb_decompress(unsigned char *output, unsigned char *i, unsigned int length);
 | 
				
			||||||
 | 
					 | 
				
			||||||
// Default font ttf is compressed with stb_compress then base85 encoded (see extra_fonts/binary_to_compressed_c.cpp for encoder)
 | 
					 | 
				
			||||||
static const char*  GetDefaultCompressedFontDataTTFBase85();
 | 
					static const char*  GetDefaultCompressedFontDataTTFBase85();
 | 
				
			||||||
static unsigned int Decode85Byte(char c)                                    { return c >= '\\' ? c-36 : c-35; }
 | 
					static unsigned int Decode85Byte(char c)                                    { return c >= '\\' ? c-36 : c-35; }
 | 
				
			||||||
static void         Decode85(const unsigned char* src, unsigned int* dst)   { for (; *src; src += 5) *dst++ = Decode85Byte(src[0]) + 85*(Decode85Byte(src[1]) + 85*(Decode85Byte(src[2]) + 85*(Decode85Byte(src[3]) + 85*Decode85Byte(src[4])))); }
 | 
					static void         Decode85(const unsigned char* src, unsigned int* dst)   { for (; *src; src += 5) *dst++ = Decode85Byte(src[0]) + 85*(Decode85Byte(src[1]) + 85*(Decode85Byte(src[2]) + 85*(Decode85Byte(src[3]) + 85*Decode85Byte(src[4])))); }
 | 
				
			||||||
@@ -9906,22 +9905,16 @@ static void         Decode85(const unsigned char* src, unsigned int* dst)   { fo
 | 
				
			|||||||
// Load embedded ProggyClean.ttf at size 13
 | 
					// Load embedded ProggyClean.ttf at size 13
 | 
				
			||||||
ImFont* ImFontAtlas::AddFontDefault(const ImFontConfig* font_cfg_template)
 | 
					ImFont* ImFontAtlas::AddFontDefault(const ImFontConfig* font_cfg_template)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    const char* ttf_compressed_base85 = GetDefaultCompressedFontDataTTFBase85();
 | 
					    ImFontConfig font_cfg = font_cfg_template ? *font_cfg_template : ImFontConfig();
 | 
				
			||||||
    int ttf_compressed_size = (((int)strlen(ttf_compressed_base85) + 4) / 5) * 4;
 | 
					    if (!font_cfg_template)
 | 
				
			||||||
    void* ttf_compressed = ImGui::MemAlloc(ttf_compressed_size);
 | 
					 | 
				
			||||||
    Decode85((const unsigned char*)ttf_compressed_base85, (unsigned int*)ttf_compressed);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ImFontConfig font_cfg;
 | 
					 | 
				
			||||||
    if (font_cfg_template)
 | 
					 | 
				
			||||||
        font_cfg = *font_cfg_template;
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        font_cfg.OversampleH = font_cfg.OversampleV = 1;
 | 
					        font_cfg.OversampleH = font_cfg.OversampleV = 1;
 | 
				
			||||||
        font_cfg.PixelSnapH = true;
 | 
					        font_cfg.PixelSnapH = true;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if (font_cfg.Name[0] == '\0') strcpy(font_cfg.Name, "<default>");
 | 
					    if (font_cfg.Name[0] == '\0') strcpy(font_cfg.Name, "<default>");
 | 
				
			||||||
    ImFont* font = AddFontFromMemoryCompressedTTF(ttf_compressed, ttf_compressed_size, 13.0f, &font_cfg, GetGlyphRangesDefault());
 | 
					
 | 
				
			||||||
    ImGui::MemFree(ttf_compressed);
 | 
					    const char* ttf_compressed_base85 = GetDefaultCompressedFontDataTTFBase85();
 | 
				
			||||||
 | 
					    ImFont* font = AddFontFromMemoryCompressedBase85TTF(ttf_compressed_base85, 13.0f, &font_cfg, GetGlyphRangesDefault());
 | 
				
			||||||
    return font;
 | 
					    return font;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -9969,6 +9962,16 @@ ImFont* ImFontAtlas::AddFontFromMemoryCompressedTTF(const void* compressed_ttf_d
 | 
				
			|||||||
    return AddFontFromMemoryTTF(buf_decompressed_data, (int)buf_decompressed_size, size_pixels, font_cfg_template, glyph_ranges);
 | 
					    return AddFontFromMemoryTTF(buf_decompressed_data, (int)buf_decompressed_size, size_pixels, font_cfg_template, glyph_ranges);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ImFont* ImFontAtlas::AddFontFromMemoryCompressedBase85TTF(const char* compressed_ttf_data_base85, float size_pixels, const ImFontConfig* font_cfg, const ImWchar* glyph_ranges)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int compressed_ttf_size = (((int)strlen(compressed_ttf_data_base85) + 4) / 5) * 4;
 | 
				
			||||||
 | 
					    void* compressed_ttf = ImGui::MemAlloc(compressed_ttf_size);
 | 
				
			||||||
 | 
					    Decode85((const unsigned char*)compressed_ttf_data_base85, (unsigned int*)compressed_ttf);
 | 
				
			||||||
 | 
					    ImFont* font = AddFontFromMemoryCompressedTTF(compressed_ttf, compressed_ttf_size, size_pixels, font_cfg, glyph_ranges);
 | 
				
			||||||
 | 
					    ImGui::MemFree(compressed_ttf);
 | 
				
			||||||
 | 
					    return font;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool    ImFontAtlas::Build()
 | 
					bool    ImFontAtlas::Build()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    IM_ASSERT(ConfigData.Size > 0);
 | 
					    IM_ASSERT(ConfigData.Size > 0);
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										3
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								imgui.h
									
									
									
									
									
								
							@@ -1155,7 +1155,8 @@ struct ImFontAtlas
 | 
				
			|||||||
    IMGUI_API ImFont*           AddFontDefault(const ImFontConfig* font_cfg = NULL);
 | 
					    IMGUI_API ImFont*           AddFontDefault(const ImFontConfig* font_cfg = NULL);
 | 
				
			||||||
    IMGUI_API ImFont*           AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL);
 | 
					    IMGUI_API ImFont*           AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL);
 | 
				
			||||||
    IMGUI_API ImFont*           AddFontFromMemoryTTF(void* ttf_data, int ttf_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL);                                        // Transfer ownership of 'ttf_data' to ImFontAtlas, will be deleted after Build()
 | 
					    IMGUI_API ImFont*           AddFontFromMemoryTTF(void* ttf_data, int ttf_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL);                                        // Transfer ownership of 'ttf_data' to ImFontAtlas, will be deleted after Build()
 | 
				
			||||||
    IMGUI_API ImFont*           AddFontFromMemoryCompressedTTF(const void* compressed_ttf_data, int compressed_ttf_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL);  // 'compressed_ttf_data' untouched and still owned by caller. Compress with binary_to_compressed_c.cpp
 | 
					    IMGUI_API ImFont*           AddFontFromMemoryCompressedTTF(const void* compressed_ttf_data, int compressed_ttf_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL);  // 'compressed_ttf_data' still owned by caller. Compress with binary_to_compressed_c.cpp
 | 
				
			||||||
 | 
					    IMGUI_API ImFont*           AddFontFromMemoryCompressedBase85TTF(const char* compressed_ttf_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL);              // 'compressed_ttf_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 paramaeter
 | 
				
			||||||
    IMGUI_API void              ClearTexData();             // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory.
 | 
					    IMGUI_API void              ClearTexData();             // Clear the CPU-side texture data. Saves RAM once the texture has been copied to graphics memory.
 | 
				
			||||||
    IMGUI_API void              ClearInputData();           // Clear the input TTF data (inc sizes, glyph ranges)
 | 
					    IMGUI_API void              ClearInputData();           // Clear the input TTF data (inc sizes, glyph ranges)
 | 
				
			||||||
    IMGUI_API void              ClearFonts();               // Clear the ImGui-side font data (glyphs storage, UV coordinates)
 | 
					    IMGUI_API void              ClearFonts();               // Clear the ImGui-side font data (glyphs storage, UV coordinates)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user