mirror of
https://github.com/Drezil/imgui.git
synced 2024-11-15 01:17:00 +00:00
Drag and Drop: Fixed submitting a tooltip from drop target location. Added demo.
Amend7bbf8f2
,92b7d6b
.
This commit is contained in:
parent
64b1aeebf5
commit
a63e2f0a33
@ -87,6 +87,8 @@ Other changes:
|
|||||||
- Mostly legacy behavior when used inside old Columns(), as we favored that idiom back then,
|
- Mostly legacy behavior when used inside old Columns(), as we favored that idiom back then,
|
||||||
only different is left position follows indentation level, to match calling a Separator()
|
only different is left position follows indentation level, to match calling a Separator()
|
||||||
inside or outside Columns().
|
inside or outside Columns().
|
||||||
|
- Drag and Drop: Fixed submitting a tooltip from drop target location when using AcceptDragDropPayload()
|
||||||
|
with ImGuiDragDropFlags_AcceptNoPreviewTooltip and submitting a tooltip manually.
|
||||||
- Tables: Fixed an edge-case when no columns are visible + table scrollbar is visible + user
|
- Tables: Fixed an edge-case when no columns are visible + table scrollbar is visible + user
|
||||||
code is always testing return value of TableSetColumnIndex() to coarse clip. With an active
|
code is always testing return value of TableSetColumnIndex() to coarse clip. With an active
|
||||||
clipper it would have asserted. Without a clipper, the scrollbar range would be wrong.
|
clipper it would have asserted. Without a clipper, the scrollbar range would be wrong.
|
||||||
@ -123,6 +125,7 @@ Other changes:
|
|||||||
- Debug Tools: Metrics: Added "Show groups rectangles" in tools.
|
- Debug Tools: Metrics: Added "Show groups rectangles" in tools.
|
||||||
- ImDrawList: Added AddEllipse(), AddEllipseFilled(), PathEllipticalArcTo(). (#2743) [@Doohl]
|
- ImDrawList: Added AddEllipse(), AddEllipseFilled(), PathEllipticalArcTo(). (#2743) [@Doohl]
|
||||||
- ImVector: Added find_index() helper.
|
- ImVector: Added find_index() helper.
|
||||||
|
- Demo: Added "Drag and Drop -> Tooltip at target location" demo.
|
||||||
- Backends: GLFW: Clear emscripten's MouseWheel callback before shutdown. (#6790, #6096, #4019) [@halx99]
|
- Backends: GLFW: Clear emscripten's MouseWheel callback before shutdown. (#6790, #6096, #4019) [@halx99]
|
||||||
- Backends: Win32: Added support for keyboard codepage conversion for when application
|
- Backends: Win32: Added support for keyboard codepage conversion for when application
|
||||||
is compiled in MBCS mode and using a non-Unicode window. (#6785, #6782, #5725, #5961) [@sneakyevil]
|
is compiled in MBCS mode and using a non-Unicode window. (#6785, #6782, #5725, #5961) [@sneakyevil]
|
||||||
|
17
imgui.cpp
17
imgui.cpp
@ -12403,6 +12403,14 @@ void ImGui::ClearDragDrop()
|
|||||||
memset(&g.DragDropPayloadBufLocal, 0, sizeof(g.DragDropPayloadBufLocal));
|
memset(&g.DragDropPayloadBufLocal, 0, sizeof(g.DragDropPayloadBufLocal));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ImGui::BeginTooltipHidden()
|
||||||
|
{
|
||||||
|
ImGuiContext& g = *GImGui;
|
||||||
|
bool ret = Begin("##Tooltip_Hidden", NULL, ImGuiWindowFlags_Tooltip | ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_AlwaysAutoResize);
|
||||||
|
SetWindowHiddendAndSkipItemsForCurrentFrame(g.CurrentWindow);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
// When this returns true you need to: a) call SetDragDropPayload() exactly once, b) you may render the payload visual/description, c) call EndDragDropSource()
|
// When this returns true you need to: a) call SetDragDropPayload() exactly once, b) you may render the payload visual/description, c) call EndDragDropSource()
|
||||||
// If the item has an identifier:
|
// If the item has an identifier:
|
||||||
// - This assume/require the item to be activated (typically via ButtonBehavior).
|
// - This assume/require the item to be activated (typically via ButtonBehavior).
|
||||||
@ -12505,12 +12513,13 @@ bool ImGui::BeginDragDropSource(ImGuiDragDropFlags flags)
|
|||||||
{
|
{
|
||||||
// Target can request the Source to not display its tooltip (we use a dedicated flag to make this request explicit)
|
// Target can request the Source to not display its tooltip (we use a dedicated flag to make this request explicit)
|
||||||
// We unfortunately can't just modify the source flags and skip the call to BeginTooltip, as caller may be emitting contents.
|
// We unfortunately can't just modify the source flags and skip the call to BeginTooltip, as caller may be emitting contents.
|
||||||
bool ret = BeginTooltip();
|
bool ret;
|
||||||
|
if (g.DragDropAcceptIdPrev && (g.DragDropAcceptFlags & ImGuiDragDropFlags_AcceptNoPreviewTooltip))
|
||||||
|
ret = BeginTooltipHidden();
|
||||||
|
else
|
||||||
|
ret = BeginTooltip();
|
||||||
IM_ASSERT(ret); // FIXME-NEWBEGIN: If this ever becomes false, we need to Begin("##Hidden", NULL, ImGuiWindowFlags_NoSavedSettings) + SetWindowHiddendAndSkipItemsForCurrentFrame().
|
IM_ASSERT(ret); // FIXME-NEWBEGIN: If this ever becomes false, we need to Begin("##Hidden", NULL, ImGuiWindowFlags_NoSavedSettings) + SetWindowHiddendAndSkipItemsForCurrentFrame().
|
||||||
IM_UNUSED(ret);
|
IM_UNUSED(ret);
|
||||||
|
|
||||||
if (g.DragDropAcceptIdPrev && (g.DragDropAcceptFlags & ImGuiDragDropFlags_AcceptNoPreviewTooltip))
|
|
||||||
SetWindowHiddendAndSkipItemsForCurrentFrame(g.CurrentWindow);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(flags & ImGuiDragDropFlags_SourceNoDisableHover) && !(flags & ImGuiDragDropFlags_SourceExtern))
|
if (!(flags & ImGuiDragDropFlags_SourceNoDisableHover) && !(flags & ImGuiDragDropFlags_SourceExtern))
|
||||||
|
@ -2425,6 +2425,35 @@ static void ShowDemoWindowWidgets()
|
|||||||
ImGui::TreePop();
|
ImGui::TreePop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IMGUI_DEMO_MARKER("Widgets/Drag and Drop/Tooltip at target location");
|
||||||
|
if (ImGui::TreeNode("Tooltip at target location"))
|
||||||
|
{
|
||||||
|
for (int n = 0; n < 2; n++)
|
||||||
|
{
|
||||||
|
// Drop targets
|
||||||
|
ImGui::Button(n ? "drop here##1" : "drop here##0");
|
||||||
|
if (ImGui::BeginDragDropTarget())
|
||||||
|
{
|
||||||
|
ImGuiDragDropFlags drop_target_flags = ImGuiDragDropFlags_AcceptBeforeDelivery | ImGuiDragDropFlags_AcceptNoPreviewTooltip;
|
||||||
|
if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F, drop_target_flags))
|
||||||
|
{
|
||||||
|
ImGui::SetMouseCursor(ImGuiMouseCursor_NotAllowed);
|
||||||
|
ImGui::BeginTooltip();
|
||||||
|
ImGui::Text("Cannot drop here!");
|
||||||
|
ImGui::EndTooltip();
|
||||||
|
}
|
||||||
|
ImGui::EndDragDropTarget();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Drop source
|
||||||
|
static ImVec4 col4 = { 1.0f, 0.0f, 0.2f, 1.0f };
|
||||||
|
if (n == 0)
|
||||||
|
ImGui::ColorButton("drag me", col4);
|
||||||
|
|
||||||
|
}
|
||||||
|
ImGui::TreePop();
|
||||||
|
}
|
||||||
|
|
||||||
ImGui::TreePop();
|
ImGui::TreePop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3013,6 +3013,7 @@ namespace ImGui
|
|||||||
IMGUI_API bool IsPopupOpen(ImGuiID id, ImGuiPopupFlags popup_flags);
|
IMGUI_API bool IsPopupOpen(ImGuiID id, ImGuiPopupFlags popup_flags);
|
||||||
IMGUI_API bool BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_flags);
|
IMGUI_API bool BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_flags);
|
||||||
IMGUI_API bool BeginTooltipEx(ImGuiTooltipFlags tooltip_flags, ImGuiWindowFlags extra_window_flags);
|
IMGUI_API bool BeginTooltipEx(ImGuiTooltipFlags tooltip_flags, ImGuiWindowFlags extra_window_flags);
|
||||||
|
IMGUI_API bool BeginTooltipHidden();
|
||||||
IMGUI_API ImRect GetPopupAllowedExtentRect(ImGuiWindow* window);
|
IMGUI_API ImRect GetPopupAllowedExtentRect(ImGuiWindow* window);
|
||||||
IMGUI_API ImGuiWindow* GetTopMostPopupModal();
|
IMGUI_API ImGuiWindow* GetTopMostPopupModal();
|
||||||
IMGUI_API ImGuiWindow* GetTopMostAndVisiblePopupModal();
|
IMGUI_API ImGuiWindow* GetTopMostAndVisiblePopupModal();
|
||||||
|
Loading…
Reference in New Issue
Block a user