Compiling the code as-is results in the following warning:
-->8--
imgui_freetype.cpp:341:72: warning: ‘void* memset(void*, int, size_t)’
clearing an object of type ‘struct ImFontBuildSrcDataFT’ with no
trivial copy-assignment; use assignment or value-initialization
instead [-Wclass-memaccess]
341 | memset(src_tmp_array.Data, 0, (size_t)src_tmp_array.size_in_bytes());
| ^
imgui_freetype.cpp:302:8: note: ‘struct ImFontBuildSrcDataFT’ declared here
302 | struct ImFontBuildSrcDataFT
| ^~~~~~~~~~~~~~~~~~~~
--8<--
This is caused by presence of ImVector<> directly in ImFontBuildSrcDataFT data
structure, as well as in the child ImBitVector. Since ImVector<> has a
constructor, the compiler infers that initialization by memset is not valid.
Such initialization is not a bug, however, as the default ImVector<> ctor just
sets the structure data members to 0, which is exactly what the memset does.
Casting the data structure address to void* pointer silences this warning.
Copies the #define magic from imgui_draw.cpp to the imgui_freetype implementation to allow the use of a custom stb rect_pack here as well.
References: fe5347ef94
Macro is used to ensure that flooring operation is always inlined even in debug builds. __forceinline does not force inlining in /Od builds with MSVC.
(cherry picked from commit bc165df6fd)
- Fixed abnormally high atlas height. (#618)
- Fixed support for any values of TexGlyphPadding (not just only 1). (#618)
- Atlas width is now properly based on total surface rather than glyph count (unless overridden with TexDesiredWidth). (#618)
- Fixed atlas builder so missing glyphs won't influence the atlas texture width. (#2233, #618)
- Fixed atlas builder so duplicate glyphs (when merging fonts) won't be included in the rasterized atlas. (#618)
If you were conveniently using the imgui copy of those STB headers in your project, you will have to update your include paths.
The reason for this change is to avoid conflicts for projects that may also be importing their own copy of the STB libraries. Note that imgui's copy of stb_textedit.h is modified.