duckstation

duckstation, but archived from the revision just before upstream changed it to a proprietary software project, this version is the libre one
git clone https://git.neptards.moe/u3shit/duckstation.git
Log | Files | Refs | README | LICENSE

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