mirror of
https://github.com/Drezil/imgui.git
synced 2024-12-25 00:56:35 +00:00
Internals: Added BeginDragDropTooltip() internal function to convey semantic (drag and drop tooltip doesn't get clipped within display boundaries). Revert part of 3218666fb9
. (#1739, #143).
This commit is contained in:
parent
3218666fb9
commit
d4b151076c
3
TODO.txt
3
TODO.txt
@ -163,7 +163,7 @@ It's mostly a bunch of personal notes, probably incomplete. Feel free to query i
|
|||||||
- tooltip: drag and drop with tooltip near monitor edges lose/changes its last direction instead of locking one. The drag and drop tooltip should always follow without changing direction.
|
- tooltip: drag and drop with tooltip near monitor edges lose/changes its last direction instead of locking one. The drag and drop tooltip should always follow without changing direction.
|
||||||
- tooltip: tooltip that doesn't fit in entire screen seems to lose their "last preferred direction" and may teleport when moving mouse.
|
- tooltip: tooltip that doesn't fit in entire screen seems to lose their "last preferred direction" and may teleport when moving mouse.
|
||||||
- tooltip: allow to set the width of a tooltip to allow TextWrapped() etc. while keeping the height automatic.
|
- tooltip: allow to set the width of a tooltip to allow TextWrapped() etc. while keeping the height automatic.
|
||||||
- tooltip: allow tooltips with timers? or general timer policy? (instantaneous vs timed)
|
- tooltip: tooltips with delay timers? or general timer policy? (instantaneous vs timed) (#1485)
|
||||||
|
|
||||||
- menus: calling BeginMenu() twice with a same name doesn't append as Begin() does for regular windows (#1207)
|
- menus: calling BeginMenu() twice with a same name doesn't append as Begin() does for regular windows (#1207)
|
||||||
- menus: menu bars inside modals windows are acting weird.
|
- menus: menu bars inside modals windows are acting weird.
|
||||||
@ -215,7 +215,6 @@ It's mostly a bunch of personal notes, probably incomplete. Feel free to query i
|
|||||||
- filters: handle wildcards (with implicit leading/trailing *), regexps
|
- filters: handle wildcards (with implicit leading/trailing *), regexps
|
||||||
- filters: fuzzy matches (may use code at blog.forrestthewoods.com/4cffeed33fdb)
|
- filters: fuzzy matches (may use code at blog.forrestthewoods.com/4cffeed33fdb)
|
||||||
|
|
||||||
- drag and drop: allow drag target to alter tooltip.
|
|
||||||
- drag and drop: add demo. (#143, #479)
|
- drag and drop: add demo. (#143, #479)
|
||||||
- drag and drop: have some way to know when a drag begin from BeginDragDropSource() pov
|
- drag and drop: have some way to know when a drag begin from BeginDragDropSource() pov
|
||||||
- drag and drop: allow using with other mouse buttons (where activeid won't be set). (#1637)
|
- drag and drop: allow using with other mouse buttons (where activeid won't be set). (#1637)
|
||||||
|
25
imgui.cpp
25
imgui.cpp
@ -13230,11 +13230,9 @@ bool ImGui::BeginDragDropSource(ImGuiDragDropFlags flags)
|
|||||||
|
|
||||||
if (!(flags & ImGuiDragDropFlags_SourceNoPreviewTooltip))
|
if (!(flags & ImGuiDragDropFlags_SourceNoPreviewTooltip))
|
||||||
{
|
{
|
||||||
SetNextWindowBgAlpha(g.Style.Colors[ImGuiCol_PopupBg].w * 0.60f);
|
|
||||||
BeginTooltipEx(0, true);
|
|
||||||
|
|
||||||
// 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.
|
||||||
|
BeginDragDropTooltip();
|
||||||
if (g.DragDropActive && g.DragDropAcceptIdPrev && (g.DragDropAcceptFlags & ImGuiDragDropFlags_AcceptNoPreviewTooltip))
|
if (g.DragDropActive && g.DragDropAcceptIdPrev && (g.DragDropAcceptFlags & ImGuiDragDropFlags_AcceptNoPreviewTooltip))
|
||||||
{
|
{
|
||||||
ImGuiWindow* tooltip_window = g.CurrentWindow;
|
ImGuiWindow* tooltip_window = g.CurrentWindow;
|
||||||
@ -13257,13 +13255,32 @@ void ImGui::EndDragDropSource()
|
|||||||
IM_ASSERT(g.DragDropActive);
|
IM_ASSERT(g.DragDropActive);
|
||||||
|
|
||||||
if (!(g.DragDropSourceFlags & ImGuiDragDropFlags_SourceNoPreviewTooltip))
|
if (!(g.DragDropSourceFlags & ImGuiDragDropFlags_SourceNoPreviewTooltip))
|
||||||
EndTooltip();
|
EndDragDropTooltip();
|
||||||
|
|
||||||
// Discard the drag if have not called SetDragDropPayload()
|
// Discard the drag if have not called SetDragDropPayload()
|
||||||
if (g.DragDropPayload.DataFrameCount == -1)
|
if (g.DragDropPayload.DataFrameCount == -1)
|
||||||
ClearDragDrop();
|
ClearDragDrop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ImGui::BeginDragDropTooltip()
|
||||||
|
{
|
||||||
|
// The default tooltip position is a little offset to give space to see the context menu (it's also clamped within the current viewport/monitor)
|
||||||
|
// In the context of a dragging tooltip we try to reduce that offset and we enforce following the cursor.
|
||||||
|
// Whatever we do we want to call SetNextWindowPos() to enforce a tooltip position and disable clipping the tooltip without our display area, like regular tooltip do.
|
||||||
|
ImGuiContext& g = *GImGui;
|
||||||
|
//ImVec2 tooltip_pos = g.IO.MousePos - g.ActiveIdClickOffset - g.Style.WindowPadding;
|
||||||
|
ImVec2 tooltip_pos = g.IO.MousePos + ImVec2(16 * g.Style.MouseCursorScale, 8 * g.Style.MouseCursorScale);
|
||||||
|
SetNextWindowPos(tooltip_pos);
|
||||||
|
SetNextWindowBgAlpha(g.Style.Colors[ImGuiCol_PopupBg].w * 0.60f);
|
||||||
|
//PushStyleVar(ImGuiStyleVar_Alpha, g.Style.Alpha * 0.60f); // This would be nice but e.g ColorButton with checkboard has issue with transparent colors :(
|
||||||
|
BeginTooltipEx(0, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ImGui::EndDragDropTooltip()
|
||||||
|
{
|
||||||
|
EndTooltip();
|
||||||
|
}
|
||||||
|
|
||||||
// Use 'cond' to choose to submit payload on drag start or every frame
|
// Use 'cond' to choose to submit payload on drag start or every frame
|
||||||
bool ImGui::SetDragDropPayload(const char* type, const void* data, size_t data_size, ImGuiCond cond)
|
bool ImGui::SetDragDropPayload(const char* type, const void* data, size_t data_size, ImGuiCond cond)
|
||||||
{
|
{
|
||||||
|
@ -1111,6 +1111,8 @@ namespace ImGui
|
|||||||
IMGUI_API bool BeginDragDropTargetCustom(const ImRect& bb, ImGuiID id);
|
IMGUI_API bool BeginDragDropTargetCustom(const ImRect& bb, ImGuiID id);
|
||||||
IMGUI_API void ClearDragDrop();
|
IMGUI_API void ClearDragDrop();
|
||||||
IMGUI_API bool IsDragDropPayloadBeingAccepted();
|
IMGUI_API bool IsDragDropPayloadBeingAccepted();
|
||||||
|
IMGUI_API void BeginDragDropTooltip();
|
||||||
|
IMGUI_API void EndDragDropTooltip();
|
||||||
|
|
||||||
// FIXME-WIP: New Columns API
|
// FIXME-WIP: New Columns API
|
||||||
IMGUI_API void BeginColumns(const char* str_id, int count, ImGuiColumnsFlags flags = 0); // setup number of columns. use an identifier to distinguish multiple column sets. close with EndColumns().
|
IMGUI_API void BeginColumns(const char* str_id, int count, ImGuiColumnsFlags flags = 0); // setup number of columns. use an identifier to distinguish multiple column sets. close with EndColumns().
|
||||||
|
Loading…
Reference in New Issue
Block a user