mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-03 22:51:06 +01:00 
			
		
		
		
	Drag and Drop: Fixed submitting a tooltip from drop target location. Added demo.
Amend7bbf8f2,92b7d6b.
This commit is contained in:
		@@ -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();
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user