mirror of
https://github.com/ocornut/imgui.git
synced 2026-05-27 19:15:24 +08:00
+20
-21
@@ -3710,29 +3710,28 @@ bool ImGui::TempInputScalar(const ImRect& bb, ImGuiID id, const char* label, ImG
|
|||||||
|
|
||||||
ImGuiInputTextFlags flags = ImGuiInputTextFlags_AutoSelectAll | (ImGuiInputTextFlags)ImGuiInputTextFlags_LocalizeDecimalPoint;
|
ImGuiInputTextFlags flags = ImGuiInputTextFlags_AutoSelectAll | (ImGuiInputTextFlags)ImGuiInputTextFlags_LocalizeDecimalPoint;
|
||||||
g.LastItemData.ItemFlags |= ImGuiItemFlags_NoMarkEdited; // Because TempInputText() uses ImGuiInputTextFlags_MergedItem it doesn't submit a new item, so we poke LastItemData.
|
g.LastItemData.ItemFlags |= ImGuiItemFlags_NoMarkEdited; // Because TempInputText() uses ImGuiInputTextFlags_MergedItem it doesn't submit a new item, so we poke LastItemData.
|
||||||
bool value_changed = false;
|
if (!TempInputText(bb, id, label, data_buf, IM_COUNTOF(data_buf), flags))
|
||||||
if (TempInputText(bb, id, label, data_buf, IM_COUNTOF(data_buf), flags))
|
return false;
|
||||||
|
|
||||||
|
// Backup old value
|
||||||
|
size_t data_type_size = type_info->Size;
|
||||||
|
ImGuiDataTypeStorage data_backup;
|
||||||
|
memcpy(&data_backup, p_data, data_type_size);
|
||||||
|
|
||||||
|
// Apply new value (or operations) then clamp
|
||||||
|
DataTypeApplyFromText(data_buf, data_type, p_data, format, NULL);
|
||||||
|
if (p_clamp_min || p_clamp_max)
|
||||||
{
|
{
|
||||||
// Backup old value
|
if (p_clamp_min && p_clamp_max && DataTypeCompare(data_type, p_clamp_min, p_clamp_max) > 0)
|
||||||
size_t data_type_size = type_info->Size;
|
ImSwap(p_clamp_min, p_clamp_max);
|
||||||
ImGuiDataTypeStorage data_backup;
|
DataTypeClamp(data_type, p_data, p_clamp_min, p_clamp_max);
|
||||||
memcpy(&data_backup, p_data, data_type_size);
|
|
||||||
|
|
||||||
// Apply new value (or operations) then clamp
|
|
||||||
DataTypeApplyFromText(data_buf, data_type, p_data, format, NULL);
|
|
||||||
if (p_clamp_min || p_clamp_max)
|
|
||||||
{
|
|
||||||
if (p_clamp_min && p_clamp_max && DataTypeCompare(data_type, p_clamp_min, p_clamp_max) > 0)
|
|
||||||
ImSwap(p_clamp_min, p_clamp_max);
|
|
||||||
DataTypeClamp(data_type, p_data, p_clamp_min, p_clamp_max);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Only mark as edited if new value is different
|
|
||||||
g.LastItemData.ItemFlags &= ~ImGuiItemFlags_NoMarkEdited;
|
|
||||||
value_changed = memcmp(&data_backup, p_data, data_type_size) != 0;
|
|
||||||
if (value_changed)
|
|
||||||
MarkItemEdited(id);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Only mark as edited if new value is different
|
||||||
|
g.LastItemData.ItemFlags &= ~ImGuiItemFlags_NoMarkEdited;
|
||||||
|
bool value_changed = memcmp(&data_backup, p_data, data_type_size) != 0;
|
||||||
|
if (value_changed)
|
||||||
|
MarkItemEdited(id);
|
||||||
return value_changed;
|
return value_changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user