mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-30 20:51:06 +01:00 
			
		
		
		
	Internals: Missing const, some renaming. Tweak legacy fast path.
This commit is contained in:
		
							
								
								
									
										26
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								imgui.cpp
									
									
									
									
									
								
							| @@ -9271,19 +9271,21 @@ bool ImGui::DragBehavior(ImGuiID id, ImGuiDataType data_type, void* v, float v_s | ||||
| } | ||||
|  | ||||
| // 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?! | ||||
| static const char* PatchFormatStringFloatToInt(const char* fmt) | ||||
| { | ||||
|     const char* fmt_start = ImParseFormatFindStart(fmt); | ||||
|     const char* fmt_end = ImParseFormatFindEnd(fmt_start); | ||||
|     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"; | ||||
|     const char* fmt_start = ImParseFormatFindStart(fmt);    // Find % (if any, and ignore %%) | ||||
|     const char* 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. | ||||
|         return g.TempBuffer; | ||||
| #else | ||||
|         IM_ASSERT(0 && "DragInt(): Invalid format string!"); // Old versions used a default parameter of "%.0f", please replace with e.g. "%d" | ||||
| @@ -9321,7 +9323,7 @@ bool ImGui::DragScalar(const char* label, ImGuiDataType data_type, void* v, floa | ||||
|  | ||||
|     // Patch old "%.0f" format string to use "%d", read function comments for more details. | ||||
|     if (data_type == ImGuiDataType_S32 && strcmp(format, "%d") != 0) | ||||
|         format = (strcmp(format, "%.0f") == 0) ? "%d" : PatchFormatStringFloatToInt(format); | ||||
|         format = PatchFormatStringFloatToInt(format); | ||||
|  | ||||
|     // Tabbing or CTRL-clicking on Drag turns it into an input box | ||||
|     bool start_text_input = false; | ||||
| @@ -10675,7 +10677,7 @@ bool ImGui::InputTextMultiline(const char* label, char* buf, size_t buf_size, co | ||||
| } | ||||
|  | ||||
| // NB: format here must be a simple "%xx" format string with no prefix/suffix (unlike the Drag/Slider functions "format" argument) | ||||
| bool ImGui::InputScalar(const char* label, ImGuiDataType data_type, void* data_ptr, void* step_ptr, void* step_fast_ptr, const char* format, ImGuiInputTextFlags extra_flags) | ||||
| bool ImGui::InputScalar(const char* label, ImGuiDataType data_type, void* data_ptr, const void* step, const void* step_fast, const char* format, ImGuiInputTextFlags extra_flags) | ||||
| { | ||||
|     ImGuiWindow* window = GetCurrentWindow(); | ||||
|     if (window->SkipItems) | ||||
| @@ -10692,7 +10694,7 @@ bool ImGui::InputScalar(const char* label, ImGuiDataType data_type, void* data_p | ||||
|         extra_flags |= ImGuiInputTextFlags_CharsDecimal; | ||||
|     extra_flags |= ImGuiInputTextFlags_AutoSelectAll; | ||||
|  | ||||
|     if (step_ptr) | ||||
|     if (step != NULL) | ||||
|     { | ||||
|         const float button_size = GetFrameHeight(); | ||||
|  | ||||
| @@ -10707,13 +10709,13 @@ bool ImGui::InputScalar(const char* label, ImGuiDataType data_type, void* data_p | ||||
|         SameLine(0, style.ItemInnerSpacing.x); | ||||
|         if (ButtonEx("-", ImVec2(button_size, button_size), ImGuiButtonFlags_Repeat | ImGuiButtonFlags_DontClosePopups)) | ||||
|         { | ||||
|             DataTypeApplyOp(data_type, '-', data_ptr, data_ptr, g.IO.KeyCtrl && step_fast_ptr ? step_fast_ptr : step_ptr); | ||||
|             DataTypeApplyOp(data_type, '-', data_ptr, data_ptr, g.IO.KeyCtrl && step_fast ? step_fast : step); | ||||
|             value_changed = true; | ||||
|         } | ||||
|         SameLine(0, style.ItemInnerSpacing.x); | ||||
|         if (ButtonEx("+", ImVec2(button_size, button_size), ImGuiButtonFlags_Repeat | ImGuiButtonFlags_DontClosePopups)) | ||||
|         { | ||||
|             DataTypeApplyOp(data_type, '+', data_ptr, data_ptr, g.IO.KeyCtrl && step_fast_ptr ? step_fast_ptr : step_ptr); | ||||
|             DataTypeApplyOp(data_type, '+', data_ptr, data_ptr, g.IO.KeyCtrl && step_fast ? step_fast : step); | ||||
|             value_changed = true; | ||||
|         } | ||||
|         SameLine(0, style.ItemInnerSpacing.x); | ||||
| @@ -10750,7 +10752,7 @@ bool ImGui::InputInt(const char* label, int* v, int step, int step_fast, ImGuiIn | ||||
|     return InputScalar(label, ImGuiDataType_S32, (void*)v, (void*)(step>0 ? &step : NULL), (void*)(step_fast>0 ? &step_fast : NULL), format, extra_flags); | ||||
| } | ||||
|  | ||||
| bool ImGui::InputScalarN(const char* label, ImGuiDataType data_type, void* v, int components, void* step_ptr, void* step_fast_ptr, const char* format, ImGuiInputTextFlags extra_flags) | ||||
| bool ImGui::InputScalarN(const char* label, ImGuiDataType data_type, void* v, int components, const void* step, const void* step_fast, const char* format, ImGuiInputTextFlags extra_flags) | ||||
| { | ||||
|     ImGuiWindow* window = GetCurrentWindow(); | ||||
|     if (window->SkipItems) | ||||
| @@ -10765,7 +10767,7 @@ bool ImGui::InputScalarN(const char* label, ImGuiDataType data_type, void* v, in | ||||
|     for (int i = 0; i < components; i++) | ||||
|     { | ||||
|         PushID(i); | ||||
|         value_changed |= InputScalar("##v", data_type, v, step_ptr, step_fast_ptr, format, extra_flags); | ||||
|         value_changed |= InputScalar("##v", data_type, v, step, step_fast, format, extra_flags); | ||||
|         SameLine(0, g.Style.ItemInnerSpacing.x); | ||||
|         PopID(); | ||||
|         PopItemWidth(); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user