// FIXME-LEGACY: Prior to 1.61 our DragInt() function internally used floats and because of this the compile-time default value for format was "%.0f".
// Even though we changed the compile-time default, we expect users to have carried %f around, which would break DragInt() calls.
// To honor backward compatibility we are rewriting the format string, unless IMGUI_DISABLE_OBSOLETE_FUNCTIONS is enabled. Note that calling code has a fast-path that return "%d" if the string is "%.0f".
// Even though we changed the compile-time default, we expect users to have carried %f around, which would break the display of DragInt() calls.
// To honor backward compatibility we are rewriting the format string, unless IMGUI_DISABLE_OBSOLETE_FUNCTIONS is enabled. What could possibly go wrong?!
if(fmt[0]=='%'&&fmt[1]=='.'&&fmt[2]=='0'&&fmt[3]=='f'&&fmt[4]==0)// Fast legacy path for "%.0f" which is expected to be the most common case.
return"%d";
constchar*fmt_start=ImParseFormatFindStart(fmt);// Find % (if any, and ignore %%)
constchar*fmt_end=ImParseFormatFindEnd(fmt_start);// Find end of format specifier, which itself is an exercise of confidence/recklessness (because snprintf is dependent on libc or user).
if(fmt_end>fmt_start&&fmt_end[-1]=='f')
{
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
if(fmt_start==fmt&&fmt_end[0]==0)
return"%d";
ImGuiContext&g=*GImGui;
ImFormatString(g.TempBuffer,IM_ARRAYSIZE(g.TempBuffer),"%.*s%%d%s",(int)(fmt_start-fmt),fmt,fmt_end);// Honor leading and trailing decorations
ImFormatString(g.TempBuffer,IM_ARRAYSIZE(g.TempBuffer),"%.*s%%d%s",(int)(fmt_start-fmt),fmt,fmt_end);// Honor leading and trailing decorations, but lose alignment/precision.
returng.TempBuffer;
#else
IM_ASSERT(0&&"DragInt(): Invalid format string!");// Old versions used a default parameter of "%.0f", please replace with e.g. "%d"