imgui_freetype.h (3599B)
1 // dear imgui: FreeType font builder (used as a replacement for the stb_truetype builder) 2 // (headers) 3 4 #pragma once 5 #include "imgui.h" // IMGUI_API 6 #ifndef IMGUI_DISABLE 7 8 // Forward declarations 9 struct ImFontAtlas; 10 struct ImFontBuilderIO; 11 12 // Hinting greatly impacts visuals (and glyph sizes). 13 // - By default, hinting is enabled and the font's native hinter is preferred over the auto-hinter. 14 // - When disabled, FreeType generates blurrier glyphs, more or less matches the stb_truetype.h 15 // - The Default hinting mode usually looks good, but may distort glyphs in an unusual way. 16 // - The Light hinting mode generates fuzzier glyphs but better matches Microsoft's rasterizer. 17 // You can set those flags globaly in ImFontAtlas::FontBuilderFlags 18 // You can set those flags on a per font basis in ImFontConfig::FontBuilderFlags 19 enum ImGuiFreeTypeBuilderFlags 20 { 21 ImGuiFreeTypeBuilderFlags_NoHinting = 1 << 0, // Disable hinting. This generally generates 'blurrier' bitmap glyphs when the glyph are rendered in any of the anti-aliased modes. 22 ImGuiFreeTypeBuilderFlags_NoAutoHint = 1 << 1, // Disable auto-hinter. 23 ImGuiFreeTypeBuilderFlags_ForceAutoHint = 1 << 2, // Indicates that the auto-hinter is preferred over the font's native hinter. 24 ImGuiFreeTypeBuilderFlags_LightHinting = 1 << 3, // A lighter hinting algorithm for gray-level modes. Many generated glyphs are fuzzier but better resemble their original shape. This is achieved by snapping glyphs to the pixel grid only vertically (Y-axis), as is done by Microsoft's ClearType and Adobe's proprietary font renderer. This preserves inter-glyph spacing in horizontal text. 25 ImGuiFreeTypeBuilderFlags_MonoHinting = 1 << 4, // Strong hinting algorithm that should only be used for monochrome output. 26 ImGuiFreeTypeBuilderFlags_Bold = 1 << 5, // Styling: Should we artificially embolden the font? 27 ImGuiFreeTypeBuilderFlags_Oblique = 1 << 6, // Styling: Should we slant the font, emulating italic style? 28 ImGuiFreeTypeBuilderFlags_Monochrome = 1 << 7, // Disable anti-aliasing. Combine this with MonoHinting for best results! 29 ImGuiFreeTypeBuilderFlags_LoadColor = 1 << 8, // Enable FreeType color-layered glyphs 30 ImGuiFreeTypeBuilderFlags_Bitmap = 1 << 9 // Enable FreeType bitmap glyphs 31 }; 32 33 namespace ImGuiFreeType 34 { 35 // This is automatically assigned when using '#define IMGUI_ENABLE_FREETYPE'. 36 // If you need to dynamically select between multiple builders: 37 // - you can manually assign this builder with 'atlas->FontBuilderIO = ImGuiFreeType::GetBuilderForFreeType()' 38 // - prefer deep-copying this into your own ImFontBuilderIO instance if you use hot-reloading that messes up static data. 39 IMGUI_API const ImFontBuilderIO* GetBuilderForFreeType(); 40 41 // Override allocators. By default ImGuiFreeType will use IM_ALLOC()/IM_FREE() 42 // However, as FreeType does lots of allocations we provide a way for the user to redirect it to a separate memory heap if desired. 43 IMGUI_API void SetAllocatorFunctions(void* (*alloc_func)(size_t sz, void* user_data), void (*free_func)(void* ptr, void* user_data), void* user_data = nullptr); 44 45 // Obsolete names (will be removed soon) 46 #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS 47 //static inline bool BuildFontAtlas(ImFontAtlas* atlas, unsigned int flags = 0) { atlas->FontBuilderIO = GetBuilderForFreeType(); atlas->FontBuilderFlags = flags; return atlas->Build(); } // Prefer using '#define IMGUI_ENABLE_FREETYPE' 48 #endif 49 } 50 51 #endif // #ifndef IMGUI_DISABLE