|
|
@@ -577,6 +577,7 @@ bool ImGui::ButtonEx(const char* label, const ImVec2& size_arg, ImGuiButtonFlags
|
|
|
//if (pressed && !(flags & ImGuiButtonFlags_DontClosePopups) && (window->Flags & ImGuiWindowFlags_Popup))
|
|
|
// CloseCurrentPopup();
|
|
|
|
|
|
+ IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.LastItemStatusFlags);
|
|
|
return pressed;
|
|
|
}
|
|
|
|
|
|
@@ -1929,6 +1930,7 @@ bool ImGui::DragScalar(const char* label, ImGuiDataType data_type, void* v, floa
|
|
|
if (label_size.x > 0.0f)
|
|
|
RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, inner_bb.Min.y), label);
|
|
|
|
|
|
+ IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags);
|
|
|
return value_changed;
|
|
|
}
|
|
|
|
|
|
@@ -2383,6 +2385,7 @@ bool ImGui::SliderScalar(const char* label, ImGuiDataType data_type, void* v, co
|
|
|
if (label_size.x > 0.0f)
|
|
|
RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label);
|
|
|
|
|
|
+ IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags);
|
|
|
return value_changed;
|
|
|
}
|
|
|
|
|
|
@@ -2629,17 +2632,15 @@ int ImParseFormatPrecision(const char* fmt, int default_precision)
|
|
|
}
|
|
|
|
|
|
// Create text input in place of an active drag/slider (used when doing a CTRL+Click on drag/slider widgets)
|
|
|
-// FIXME: Logic is awkward and confusing. This should be reworked to facilitate using in other situations.
|
|
|
+// FIXME: Facilitate using this in variety of other situations.
|
|
|
bool ImGui::InputScalarAsWidgetReplacement(const ImRect& bb, ImGuiID id, const char* label, ImGuiDataType data_type, void* data_ptr, const char* format)
|
|
|
{
|
|
|
ImGuiContext& g = *GImGui;
|
|
|
- ImGuiWindow* window = GetCurrentWindow();
|
|
|
|
|
|
- // Our replacement widget will override the focus ID (registered previously to allow for a TAB focus to happen)
|
|
|
- // On the first frame, g.ScalarAsInputTextId == 0, then on subsequent frames it becomes == id
|
|
|
- SetActiveID(g.ScalarAsInputTextId, window);
|
|
|
- SetHoveredID(0);
|
|
|
- g.ActiveIdAllowNavDirFlags = (1 << ImGuiDir_Up) | (1 << ImGuiDir_Down);
|
|
|
+ // On the first frame, g.ScalarAsInputTextId == 0, then on subsequent frames it becomes == id.
|
|
|
+ // We clear ActiveID on the first frame to allow the InputText() taking it back.
|
|
|
+ if (g.ScalarAsInputTextId == 0)
|
|
|
+ ClearActiveID();
|
|
|
|
|
|
char fmt_buf[32];
|
|
|
char data_buf[32];
|
|
|
@@ -2648,11 +2649,11 @@ bool ImGui::InputScalarAsWidgetReplacement(const ImRect& bb, ImGuiID id, const c
|
|
|
ImStrTrimBlanks(data_buf);
|
|
|
ImGuiInputTextFlags flags = ImGuiInputTextFlags_AutoSelectAll | ((data_type == ImGuiDataType_Float || data_type == ImGuiDataType_Double) ? ImGuiInputTextFlags_CharsScientific : ImGuiInputTextFlags_CharsDecimal);
|
|
|
bool value_changed = InputTextEx(label, data_buf, IM_ARRAYSIZE(data_buf), bb.GetSize(), flags);
|
|
|
- if (g.ScalarAsInputTextId == 0) // First frame we started displaying the InputText widget
|
|
|
+ if (g.ScalarAsInputTextId == 0)
|
|
|
{
|
|
|
- IM_ASSERT(g.ActiveId == id); // InputText ID expected to match the Slider ID
|
|
|
+ // First frame we started displaying the InputText widget, we expect it to take the active id.
|
|
|
+ IM_ASSERT(g.ActiveId == id);
|
|
|
g.ScalarAsInputTextId = g.ActiveId;
|
|
|
- SetHoveredID(id);
|
|
|
}
|
|
|
if (value_changed)
|
|
|
return DataTypeApplyOpFromText(data_buf, g.InputTextState.InitialText.Data, data_type, data_ptr, NULL);
|
|
|
@@ -3269,8 +3270,9 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
|
|
|
SetActiveID(id, window);
|
|
|
SetFocusID(id, window);
|
|
|
FocusWindow(window);
|
|
|
+ g.ActiveIdBlockNavInputFlags = (1 << ImGuiNavInput_Cancel);
|
|
|
if (!is_multiline && !(flags & ImGuiInputTextFlags_CallbackHistory))
|
|
|
- g.ActiveIdAllowNavDirFlags |= ((1 << ImGuiDir_Up) | (1 << ImGuiDir_Down));
|
|
|
+ g.ActiveIdAllowNavDirFlags = ((1 << ImGuiDir_Up) | (1 << ImGuiDir_Down));
|
|
|
}
|
|
|
else if (io.MouseClicked[0])
|
|
|
{
|
|
|
@@ -3600,7 +3602,7 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
|
|
|
}
|
|
|
|
|
|
// If the underlying buffer resize was denied or not carried to the next frame, apply_new_text_length+1 may be >= buf_size.
|
|
|
- ImStrncpy(buf, edit_state.TempBuffer.Data, ImMin(apply_new_text_length + 1, buf_size));
|
|
|
+ ImStrncpy(buf, apply_new_text, ImMin(apply_new_text_length + 1, buf_size));
|
|
|
value_changed = true;
|
|
|
}
|
|
|
|
|
|
@@ -3806,6 +3808,7 @@ bool ImGui::InputTextEx(const char* label, char* buf, int buf_size, const ImVec2
|
|
|
if (value_changed)
|
|
|
MarkItemEdited(id);
|
|
|
|
|
|
+ IMGUI_TEST_ENGINE_ITEM_INFO(id, label, window->DC.ItemFlags);
|
|
|
if ((flags & ImGuiInputTextFlags_EnterReturnsTrue) != 0)
|
|
|
return enter_pressed;
|
|
|
else
|