mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-04 07:01:04 +01:00 
			
		
		
		
	Fixed InputFloatX, SliderFloatX, DragFloatX functions erroneously reporting IsItemEdited() multiple times when the text input doesn't match the formatted output value (e.g. input "1" shows "1.000"). It wasn't much of a problem because we typically use the return value instead of IsItemEdited() here. (#1875, #2034)
This commit is contained in:
		@@ -2760,7 +2760,8 @@ bool ImGui::TempInputTextScalar(const ImRect& bb, ImGuiID id, const char* label,
 | 
			
		||||
    ImStrTrimBlanks(data_buf);
 | 
			
		||||
 | 
			
		||||
    g.CurrentWindow->DC.CursorPos = bb.Min;
 | 
			
		||||
    ImGuiInputTextFlags flags = ImGuiInputTextFlags_AutoSelectAll | ((data_type == ImGuiDataType_Float || data_type == ImGuiDataType_Double) ? ImGuiInputTextFlags_CharsScientific : ImGuiInputTextFlags_CharsDecimal);
 | 
			
		||||
    ImGuiInputTextFlags flags = ImGuiInputTextFlags_AutoSelectAll | ImGuiInputTextFlags_NoMarkEdited;
 | 
			
		||||
    flags |= ((data_type == ImGuiDataType_Float || data_type == ImGuiDataType_Double) ? ImGuiInputTextFlags_CharsScientific : ImGuiInputTextFlags_CharsDecimal);
 | 
			
		||||
    bool value_changed = InputTextEx(label, NULL, data_buf, IM_ARRAYSIZE(data_buf), bb.GetSize(), flags);
 | 
			
		||||
    if (init)
 | 
			
		||||
    {
 | 
			
		||||
@@ -2769,7 +2770,11 @@ bool ImGui::TempInputTextScalar(const ImRect& bb, ImGuiID id, const char* label,
 | 
			
		||||
        g.TempInputTextId = g.ActiveId;
 | 
			
		||||
    }
 | 
			
		||||
    if (value_changed)
 | 
			
		||||
        return DataTypeApplyOpFromText(data_buf, g.InputTextState.InitialTextA.Data, data_type, data_ptr, NULL);
 | 
			
		||||
    {
 | 
			
		||||
        value_changed = DataTypeApplyOpFromText(data_buf, g.InputTextState.InitialTextA.Data, data_type, data_ptr, NULL);
 | 
			
		||||
        if (value_changed)
 | 
			
		||||
            MarkItemEdited(id);
 | 
			
		||||
    }
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -2792,6 +2797,7 @@ bool ImGui::InputScalar(const char* label, ImGuiDataType data_type, void* data_p
 | 
			
		||||
    if ((flags & (ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsScientific)) == 0)
 | 
			
		||||
        flags |= ImGuiInputTextFlags_CharsDecimal;
 | 
			
		||||
    flags |= ImGuiInputTextFlags_AutoSelectAll;
 | 
			
		||||
    flags |= ImGuiInputTextFlags_NoMarkEdited;  // We call MarkItemEdited() ourselve by comparing the actual data rather than the string.
 | 
			
		||||
 | 
			
		||||
    if (step != NULL)
 | 
			
		||||
    {
 | 
			
		||||
@@ -2833,6 +2839,8 @@ bool ImGui::InputScalar(const char* label, ImGuiDataType data_type, void* data_p
 | 
			
		||||
        if (InputText(label, buf, IM_ARRAYSIZE(buf), flags))
 | 
			
		||||
            value_changed = DataTypeApplyOpFromText(buf, g.InputTextState.InitialTextA.Data, data_type, data_ptr, format);
 | 
			
		||||
    }
 | 
			
		||||
    if (value_changed)
 | 
			
		||||
        MarkItemEdited(window->DC.LastItemId);
 | 
			
		||||
 | 
			
		||||
    return value_changed;
 | 
			
		||||
}
 | 
			
		||||
@@ -4012,7 +4020,7 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_
 | 
			
		||||
    if (label_size.x > 0)
 | 
			
		||||
        RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label);
 | 
			
		||||
 | 
			
		||||
    if (value_changed)
 | 
			
		||||
    if (value_changed && !(flags & ImGuiInputTextFlags_NoMarkEdited))
 | 
			
		||||
        MarkItemEdited(id);
 | 
			
		||||
 | 
			
		||||
    IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user