31 const void* p_step,
const void* p_step_fast,
32 const char* format,
float input_width,
33 ImGuiInputTextFlags flags,
bool no_step =
false) {
34 ImGuiWindow* window = ImGui::GetCurrentWindow();
35 if (window->SkipItems)
return false;
37 ImGuiContext& g = *GImGui;
38 ImGuiStyle& style = g.Style;
40 if (format == NULL) format = DataTypeGetInfo(data_type)->PrintFmt;
43 DataTypeFormatString(buf, IM_ARRAYSIZE(buf), data_type, p_data, format);
45 if (g.ActiveId == 0 && (flags & (ImGuiInputTextFlags_CharsDecimal |
46 ImGuiInputTextFlags_CharsHexadecimal |
47 ImGuiInputTextFlags_CharsScientific)) == 0)
48 flags |= InputScalar_DefaultCharsFilter(data_type, format);
49 flags |= ImGuiInputTextFlags_AutoSelectAll;
51 bool value_changed =
false;
57 const float button_size = GetFrameHeight();
58 AlignTextToFramePadding();
64 SetNextItemWidth(ImMax(
65 1.0f, CalcItemWidth() - (button_size + style.ItemInnerSpacing.x) * 2));
68 PushStyleVar(ImGuiStyleVar_ItemSpacing,
69 ImVec2{style.ItemSpacing.x, style.ItemSpacing.y});
70 PushStyleVar(ImGuiStyleVar_FramePadding,
71 ImVec2{style.FramePadding.x, style.FramePadding.y});
73 SetNextItemWidth(input_width);
74 if (InputText(
"", buf, IM_ARRAYSIZE(buf),
77 value_changed = DataTypeApplyFromText(buf, data_type, p_data, format);
78 IMGUI_TEST_ENGINE_ITEM_INFO(
79 g.LastItemData.ID, label,
80 g.LastItemData.StatusFlags | ImGuiItemStatusFlags_Inputable);
83 if (IsItemHovered() && g.IO.MouseWheel != 0.0f) {
84 float scroll_amount = g.IO.MouseWheel;
85 float scroll_speed = 0.25f;
87 if (g.IO.KeyCtrl && p_step_fast)
88 scroll_amount *= *(
const float*)p_step_fast;
90 scroll_amount *= *(
const float*)p_step;
92 if (scroll_amount > 0.0f) {
93 scroll_amount *= scroll_speed;
94 DataTypeApplyOp(data_type,
'+', p_data, p_data, &scroll_amount);
96 }
else if (scroll_amount < 0.0f) {
97 scroll_amount *= -scroll_speed;
98 DataTypeApplyOp(data_type,
'-', p_data, p_data, &scroll_amount);
105 const ImVec2 backup_frame_padding = style.FramePadding;
106 style.FramePadding.x = style.FramePadding.y;
107 ImGuiButtonFlags button_flags = ImGuiButtonFlags_PressedOnClick;
108 if (flags & ImGuiInputTextFlags_ReadOnly) BeginDisabled();
109 SameLine(0, style.ItemInnerSpacing.x);
110 if (ButtonEx(
"-", ImVec2(button_size, button_size), button_flags)) {
111 DataTypeApplyOp(data_type,
'-', p_data, p_data,
112 g.IO.KeyCtrl && p_step_fast ? p_step_fast : p_step);
113 value_changed =
true;
115 SameLine(0, style.ItemInnerSpacing.x);
116 if (ButtonEx(
"+", ImVec2(button_size, button_size), button_flags)) {
117 DataTypeApplyOp(data_type,
'+', p_data, p_data,
118 g.IO.KeyCtrl && p_step_fast ? p_step_fast : p_step);
119 value_changed =
true;
122 if (flags & ImGuiInputTextFlags_ReadOnly) EndDisabled();
124 style.FramePadding = backup_frame_padding;
128 ImGui::PopStyleVar(2);
130 if (value_changed) MarkItemEdited(g.LastItemData.ID);
132 return value_changed;