|
|
@@ -1,4 +1,4 @@
|
|
|
-// dear imgui, v1.76
|
|
|
+// dear imgui, v1.77 WIP
|
|
|
// (widgets code)
|
|
|
|
|
|
/*
|
|
|
@@ -500,11 +500,13 @@ bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool
|
|
|
if (g.DragDropActive && (flags & ImGuiButtonFlags_PressedOnDragDropHold) && !(g.DragDropSourceFlags & ImGuiDragDropFlags_SourceNoHoldToOpenOthers))
|
|
|
if (IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByActiveItem))
|
|
|
{
|
|
|
+ const float DRAG_DROP_HOLD_TIMER = 0.70f;
|
|
|
hovered = true;
|
|
|
SetHoveredID(id);
|
|
|
- if (CalcTypematicRepeatAmount(g.HoveredIdTimer + 0.0001f - g.IO.DeltaTime, g.HoveredIdTimer + 0.0001f, 0.70f, 0.00f))
|
|
|
+ if (CalcTypematicRepeatAmount(g.HoveredIdTimer + 0.0001f - g.IO.DeltaTime, g.HoveredIdTimer + 0.0001f, DRAG_DROP_HOLD_TIMER, 0.00f))
|
|
|
{
|
|
|
pressed = true;
|
|
|
+ g.DragDropHoldJustPressedId = id;
|
|
|
FocusWindow(window);
|
|
|
}
|
|
|
}
|
|
|
@@ -5375,10 +5377,11 @@ bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* l
|
|
|
// It is rather standard that arrow click react on Down rather than Up and we'd be tempted to make it the default
|
|
|
// (by removing the _OpenOnArrow test below), however this would have a perhaps surprising effect on CollapsingHeader()?
|
|
|
// So right now we are making this optional. May evolve later.
|
|
|
+ // We set ImGuiButtonFlags_PressedOnClickRelease on OpenOnDoubleClick because we want the item to be active on the initial MouseDown in order for drag and drop to work.
|
|
|
if (is_mouse_x_over_arrow && (flags & ImGuiTreeNodeFlags_OpenOnArrow))
|
|
|
button_flags |= ImGuiButtonFlags_PressedOnClick;
|
|
|
else if (flags & ImGuiTreeNodeFlags_OpenOnDoubleClick)
|
|
|
- button_flags |= ImGuiButtonFlags_PressedOnDoubleClick;
|
|
|
+ button_flags |= ImGuiButtonFlags_PressedOnClickRelease | ImGuiButtonFlags_PressedOnDoubleClick;
|
|
|
else
|
|
|
button_flags |= ImGuiButtonFlags_PressedOnClickRelease;
|
|
|
|
|
|
@@ -5390,7 +5393,7 @@ bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* l
|
|
|
bool toggled = false;
|
|
|
if (!is_leaf)
|
|
|
{
|
|
|
- if (pressed)
|
|
|
+ if (pressed && g.DragDropHoldJustPressedId != id)
|
|
|
{
|
|
|
if ((flags & (ImGuiTreeNodeFlags_OpenOnArrow | ImGuiTreeNodeFlags_OpenOnDoubleClick)) == 0 || (g.NavActivateId == id))
|
|
|
toggled = true;
|
|
|
@@ -5398,8 +5401,12 @@ bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* l
|
|
|
toggled |= is_mouse_x_over_arrow && !g.NavDisableMouseHover; // Lightweight equivalent of IsMouseHoveringRect() since ButtonBehavior() already did the job
|
|
|
if ((flags & ImGuiTreeNodeFlags_OpenOnDoubleClick) && g.IO.MouseDoubleClicked[0])
|
|
|
toggled = true;
|
|
|
- if (g.DragDropActive && is_open) // When using Drag and Drop "hold to open" we keep the node highlighted after opening, but never close it again.
|
|
|
- toggled = false;
|
|
|
+ }
|
|
|
+ else if (pressed && g.DragDropHoldJustPressedId == id)
|
|
|
+ {
|
|
|
+ IM_ASSERT(button_flags & ImGuiButtonFlags_PressedOnDragDropHold);
|
|
|
+ if (!is_open) // When using Drag and Drop "hold to open" we keep the node highlighted after opening, but never close it again.
|
|
|
+ toggled = true;
|
|
|
}
|
|
|
|
|
|
if (g.NavId == id && g.NavMoveRequest && g.NavMoveDir == ImGuiDir_Left && is_open)
|