diff --git a/docs/CHANGELOG.txt b/docs/CHANGELOG.txt index ee7e3f28f..de1d3cf91 100644 --- a/docs/CHANGELOG.txt +++ b/docs/CHANGELOG.txt @@ -53,6 +53,10 @@ Other Changes: other than compiling misc/freetype/imgui_freetype.cpp and linking with FreeType. - Use '#define IMGUI_ENABLE_STB_TRUETYPE' if you somehow need the stb_truetype rasterizer to be compiled in along with the FreeType one, otherwise it is enabled by default. +- Fonts: Fixed CalcTextSize() width rounding so it behaves more like a ceil. This is in order for text wrapping + to have enough space when provided width precisely calculated with CalcTextSize().x. (#3776) + Note that the rounding of either positions and widths are technically undesirable (e.g. #3437, #791) but + variety of code is currently on it so we are first fixing current behavior before we'll eventually chhnge it. - ImDrawList: Fixed AddCircle()/AddCircleFilled() with (rad > 0.0f && rad < 1.0f && num_segments == 0). (#3738) Would lead to a buffer read overflow. - Backends: Win32: Dynamically loading XInput DLL instead of linking with it, facilite compiling with diff --git a/imgui.cpp b/imgui.cpp index 380df5702..5f32a2cea 100644 --- a/imgui.cpp +++ b/imgui.cpp @@ -4410,7 +4410,11 @@ ImVec2 ImGui::CalcTextSize(const char* text, const char* text_end, bool hide_tex ImVec2 text_size = font->CalcTextSizeA(font_size, FLT_MAX, wrap_width, text, text_display_end, NULL); // Round - text_size.x = IM_FLOOR(text_size.x + 0.95f); + // FIXME: This has been here since Dec 2015 (7b0bf230) but down the line we want this out. + // FIXME: Investigate using ceilf or e.g. + // - https://git.musl-libc.org/cgit/musl/tree/src/math/ceilf.c + // - https://embarkstudios.github.io/rust-gpu/api/src/libm/math/ceilf.rs.html + text_size.x = IM_FLOOR(text_size.x + 0.99999f); return text_size; }