23 const void* p_step,
const void* p_step_fast,
24 const char* format,
float input_width,
25 ImGuiInputTextFlags flags,
bool no_step =
false) {
26 ImGuiWindow* window = ImGui::GetCurrentWindow();
27 if (window->SkipItems)
return false;
29 ImGuiContext& g = *GImGui;
30 ImGuiStyle& style = g.Style;
32 if (format == NULL) format = DataTypeGetInfo(data_type)->PrintFmt;
35 DataTypeFormatString(buf, IM_ARRAYSIZE(buf), data_type, p_data, format);
37 if (g.ActiveId == 0 && (flags & (ImGuiInputTextFlags_CharsDecimal |
38 ImGuiInputTextFlags_CharsHexadecimal |
39 ImGuiInputTextFlags_CharsScientific)) == 0)
40 flags |= InputScalar_DefaultCharsFilter(data_type, format);
41 flags |= ImGuiInputTextFlags_AutoSelectAll;
43 bool value_changed =
false;
49 const float button_size = GetFrameHeight();
50 AlignTextToFramePadding();
56 SetNextItemWidth(ImMax(
57 1.0f, CalcItemWidth() - (button_size + style.ItemInnerSpacing.x) * 2));
60 PushStyleVar(ImGuiStyleVar_ItemSpacing,
61 ImVec2{style.ItemSpacing.x, style.ItemSpacing.y});
62 PushStyleVar(ImGuiStyleVar_FramePadding,
63 ImVec2{style.FramePadding.x, style.FramePadding.y});
65 SetNextItemWidth(input_width);
66 if (InputText(
"", buf, IM_ARRAYSIZE(buf),
69 value_changed = DataTypeApplyFromText(buf, data_type, p_data, format);
70 IMGUI_TEST_ENGINE_ITEM_INFO(
71 g.LastItemData.ID, label,
72 g.LastItemData.StatusFlags | ImGuiItemStatusFlags_Inputable);
75 if (IsItemHovered() && g.IO.MouseWheel != 0.0f) {
76 float scroll_amount = g.IO.MouseWheel;
77 float scroll_speed = 0.25f;
79 if (g.IO.KeyCtrl && p_step_fast)
80 scroll_amount *= *(
const float*)p_step_fast;
82 scroll_amount *= *(
const float*)p_step;
84 if (scroll_amount > 0.0f) {
85 scroll_amount *= scroll_speed;
86 DataTypeApplyOp(data_type,
'+', p_data, p_data, &scroll_amount);
88 }
else if (scroll_amount < 0.0f) {
89 scroll_amount *= -scroll_speed;
90 DataTypeApplyOp(data_type,
'-', p_data, p_data, &scroll_amount);
97 const ImVec2 backup_frame_padding = style.FramePadding;
98 style.FramePadding.x = style.FramePadding.y;
99 ImGuiButtonFlags button_flags = ImGuiButtonFlags_PressedOnClick;
100 if (flags & ImGuiInputTextFlags_ReadOnly) BeginDisabled();
101 SameLine(0, style.ItemInnerSpacing.x);
102 if (ButtonEx(
"-", ImVec2(button_size, button_size), button_flags)) {
103 DataTypeApplyOp(data_type,
'-', p_data, p_data,
104 g.IO.KeyCtrl && p_step_fast ? p_step_fast : p_step);
105 value_changed =
true;
107 SameLine(0, style.ItemInnerSpacing.x);
108 if (ButtonEx(
"+", ImVec2(button_size, button_size), button_flags)) {
109 DataTypeApplyOp(data_type,
'+', p_data, p_data,
110 g.IO.KeyCtrl && p_step_fast ? p_step_fast : p_step);
111 value_changed =
true;
114 if (flags & ImGuiInputTextFlags_ReadOnly) EndDisabled();
116 style.FramePadding = backup_frame_padding;
120 ImGui::PopStyleVar(2);
122 if (value_changed) MarkItemEdited(g.LastItemData.ID);
124 return value_changed;