mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-04 07:01:04 +01:00 
			
		
		
		
	Tooltip: Testing DragDropWithinSourceOrTarget in BeginTooltipEx() instead of just BeginTooltip() - feel this was an overlook. Added tooltip flags instead of using bool.
This commit is contained in:
		@@ -203,10 +203,12 @@ It's mostly a bunch of personal notes, probably incomplete. Feel free to query i
 | 
				
			|||||||
 - popups: clicking outside (to close popup) and holding shouldn't drag window below.
 | 
					 - popups: clicking outside (to close popup) and holding shouldn't drag window below.
 | 
				
			||||||
 - popups: add variant using global identifier similar to Begin/End (#402)
 | 
					 - popups: add variant using global identifier similar to Begin/End (#402)
 | 
				
			||||||
 - popups: border options. richer api like BeginChild() perhaps? (#197)
 | 
					 - popups: border options. richer api like BeginChild() perhaps? (#197)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 - 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: tooltips with delay timers? or general timer policy? (instantaneous vs timed): IsItemHovered() with timer + implicit aabb-id for items with no ID. (#1485)
 | 
					 - tooltip: tooltips with delay timers? or general timer policy? (instantaneous vs timed): IsItemHovered() with timer + implicit aabb-id for items with no ID. (#1485)
 | 
				
			||||||
 | 
					 - tooltip: drag tooltip hovering over source widget with IsItemHovered/SetTooltip flickers.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 - 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 modal windows are acting weird.
 | 
					 - menus: menu bars inside modal windows are acting weird.
 | 
				
			||||||
@@ -252,7 +254,6 @@ It's mostly a bunch of personal notes, probably incomplete. Feel free to query i
 | 
				
			|||||||
 - filters: handle wild-cards (with implicit leading/trailing *), reg-exprs
 | 
					 - filters: handle wild-cards (with implicit leading/trailing *), reg-exprs
 | 
				
			||||||
 - 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: drag tooltip hovering over source widget with IsItemHovered/SetTooltip flickers.
 | 
					 | 
				
			||||||
 - drag and drop: fix/support/options for overlapping drag sources.
 | 
					 - drag and drop: fix/support/options for overlapping drag sources.
 | 
				
			||||||
 - drag and drop: releasing a drop shows the "..." tooltip for one frame - since e13e598 (#1725)
 | 
					 - drag and drop: releasing a drop shows the "..." tooltip for one frame - since e13e598 (#1725)
 | 
				
			||||||
 - drag and drop: drag source on a group object (would need e.g. an invisible button covering group in EndGroup) https://twitter.com/paniq/status/1121446364909535233
 | 
					 - drag and drop: drag source on a group object (would need e.g. an invisible button covering group in EndGroup) https://twitter.com/paniq/status/1121446364909535233
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										25
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								imgui.cpp
									
									
									
									
									
								
							@@ -7340,8 +7340,14 @@ void ImGui::SetScrollHereY(float center_y_ratio)
 | 
				
			|||||||
//-----------------------------------------------------------------------------
 | 
					//-----------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ImGui::BeginTooltip()
 | 
					void ImGui::BeginTooltip()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    BeginTooltipEx(ImGuiWindowFlags_None, ImGuiTooltipFlags_None);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ImGui::BeginTooltipEx(ImGuiWindowFlags extra_flags, ImGuiTooltipFlags tooltip_flags)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiContext& g = *GImGui;
 | 
					    ImGuiContext& g = *GImGui;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (g.DragDropWithinSourceOrTarget)
 | 
					    if (g.DragDropWithinSourceOrTarget)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        // 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)
 | 
					        // 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)
 | 
				
			||||||
@@ -7352,21 +7358,12 @@ void ImGui::BeginTooltip()
 | 
				
			|||||||
        SetNextWindowPos(tooltip_pos);
 | 
					        SetNextWindowPos(tooltip_pos);
 | 
				
			||||||
        SetNextWindowBgAlpha(g.Style.Colors[ImGuiCol_PopupBg].w * 0.60f);
 | 
					        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 :(
 | 
					        //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);
 | 
					        tooltip_flags |= ImGuiTooltipFlags_OverridePreviousTooltip;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        BeginTooltipEx(0, false);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Not exposed publicly as BeginTooltip() because bool parameters are evil. Let's see if other needs arise first.
 | 
					 | 
				
			||||||
void ImGui::BeginTooltipEx(ImGuiWindowFlags extra_flags, bool override_previous_tooltip)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    ImGuiContext& g = *GImGui;
 | 
					 | 
				
			||||||
    char window_name[16];
 | 
					    char window_name[16];
 | 
				
			||||||
    ImFormatString(window_name, IM_ARRAYSIZE(window_name), "##Tooltip_%02d", g.TooltipOverrideCount);
 | 
					    ImFormatString(window_name, IM_ARRAYSIZE(window_name), "##Tooltip_%02d", g.TooltipOverrideCount);
 | 
				
			||||||
    if (override_previous_tooltip)
 | 
					    if (tooltip_flags & ImGuiTooltipFlags_OverridePreviousTooltip)
 | 
				
			||||||
        if (ImGuiWindow* window = FindWindowByName(window_name))
 | 
					        if (ImGuiWindow* window = FindWindowByName(window_name))
 | 
				
			||||||
            if (window->Active)
 | 
					            if (window->Active)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -7387,11 +7384,7 @@ void ImGui::EndTooltip()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void ImGui::SetTooltipV(const char* fmt, va_list args)
 | 
					void ImGui::SetTooltipV(const char* fmt, va_list args)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiContext& g = *GImGui;
 | 
					    BeginTooltipEx(0, ImGuiTooltipFlags_OverridePreviousTooltip);
 | 
				
			||||||
    if (g.DragDropWithinSourceOrTarget)
 | 
					 | 
				
			||||||
        BeginTooltip();
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
        BeginTooltipEx(0, true);
 | 
					 | 
				
			||||||
    TextV(fmt, args);
 | 
					    TextV(fmt, args);
 | 
				
			||||||
    EndTooltip();
 | 
					    EndTooltip();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -112,6 +112,7 @@ typedef int ImGuiNextWindowDataFlags;   // -> enum ImGuiNextWindowDataFlags_// F
 | 
				
			|||||||
typedef int ImGuiSeparatorFlags;        // -> enum ImGuiSeparatorFlags_     // Flags: for SeparatorEx()
 | 
					typedef int ImGuiSeparatorFlags;        // -> enum ImGuiSeparatorFlags_     // Flags: for SeparatorEx()
 | 
				
			||||||
typedef int ImGuiSliderFlags;           // -> enum ImGuiSliderFlags_        // Flags: for SliderBehavior()
 | 
					typedef int ImGuiSliderFlags;           // -> enum ImGuiSliderFlags_        // Flags: for SliderBehavior()
 | 
				
			||||||
typedef int ImGuiTextFlags;             // -> enum ImGuiTextFlags_          // Flags: for TextEx()
 | 
					typedef int ImGuiTextFlags;             // -> enum ImGuiTextFlags_          // Flags: for TextEx()
 | 
				
			||||||
 | 
					typedef int ImGuiTooltipFlags;          // -> enum ImGuiTooltipFlags_       // Flags: for BeginTooltipEx()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//-------------------------------------------------------------------------
 | 
					//-------------------------------------------------------------------------
 | 
				
			||||||
// STB libraries includes
 | 
					// STB libraries includes
 | 
				
			||||||
@@ -526,6 +527,12 @@ enum ImGuiTextFlags_
 | 
				
			|||||||
    ImGuiTextFlags_NoWidthForLargeClippedText = 1 << 0
 | 
					    ImGuiTextFlags_NoWidthForLargeClippedText = 1 << 0
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum ImGuiTooltipFlags_
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    ImGuiTooltipFlags_None = 0,
 | 
				
			||||||
 | 
					    ImGuiTooltipFlags_OverridePreviousTooltip = 1 << 0      // Override will clear/ignore previously submitted tooltip (defaults to append)
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// FIXME: this is in development, not exposed/functional as a generic feature yet.
 | 
					// FIXME: this is in development, not exposed/functional as a generic feature yet.
 | 
				
			||||||
// Horizontal/Vertical enums are fixed to 0/1 so they may be used to index ImVec2
 | 
					// Horizontal/Vertical enums are fixed to 0/1 so they may be used to index ImVec2
 | 
				
			||||||
enum ImGuiLayoutType_
 | 
					enum ImGuiLayoutType_
 | 
				
			||||||
@@ -1106,19 +1113,19 @@ struct ImGuiContext
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    // Drag and Drop
 | 
					    // Drag and Drop
 | 
				
			||||||
    bool                    DragDropActive;
 | 
					    bool                    DragDropActive;
 | 
				
			||||||
    bool                    DragDropWithinSourceOrTarget;
 | 
					    bool                    DragDropWithinSourceOrTarget;       // Set when within a BeginDragDropXXX/EndDragDropXXX block.
 | 
				
			||||||
    ImGuiDragDropFlags      DragDropSourceFlags;
 | 
					    ImGuiDragDropFlags      DragDropSourceFlags;
 | 
				
			||||||
    int                     DragDropSourceFrameCount;
 | 
					    int                     DragDropSourceFrameCount;
 | 
				
			||||||
    int                     DragDropMouseButton;
 | 
					    int                     DragDropMouseButton;
 | 
				
			||||||
    ImGuiPayload            DragDropPayload;
 | 
					    ImGuiPayload            DragDropPayload;
 | 
				
			||||||
    ImRect                  DragDropTargetRect;
 | 
					    ImRect                  DragDropTargetRect;                 // Store rectangle of current target candidate (we favor small targets when overlapping)
 | 
				
			||||||
    ImGuiID                 DragDropTargetId;
 | 
					    ImGuiID                 DragDropTargetId;
 | 
				
			||||||
    ImGuiDragDropFlags      DragDropAcceptFlags;
 | 
					    ImGuiDragDropFlags      DragDropAcceptFlags;
 | 
				
			||||||
    float                   DragDropAcceptIdCurrRectSurface;    // Target item surface (we resolve overlapping targets by prioritizing the smaller surface)
 | 
					    float                   DragDropAcceptIdCurrRectSurface;    // Target item surface (we resolve overlapping targets by prioritizing the smaller surface)
 | 
				
			||||||
    ImGuiID                 DragDropAcceptIdCurr;               // Target item id (set at the time of accepting the payload)
 | 
					    ImGuiID                 DragDropAcceptIdCurr;               // Target item id (set at the time of accepting the payload)
 | 
				
			||||||
    ImGuiID                 DragDropAcceptIdPrev;               // Target item id from previous frame (we need to store this to allow for overlapping drag and drop targets)
 | 
					    ImGuiID                 DragDropAcceptIdPrev;               // Target item id from previous frame (we need to store this to allow for overlapping drag and drop targets)
 | 
				
			||||||
    int                     DragDropAcceptFrameCount;           // Last time a target expressed a desire to accept the source
 | 
					    int                     DragDropAcceptFrameCount;           // Last time a target expressed a desire to accept the source
 | 
				
			||||||
    ImVector<unsigned char> DragDropPayloadBufHeap;             // We don't expose the ImVector<> directly
 | 
					    ImVector<unsigned char> DragDropPayloadBufHeap;             // We don't expose the ImVector<> directly, ImGuiPayload only holds pointer+size
 | 
				
			||||||
    unsigned char           DragDropPayloadBufLocal[16];        // Local buffer for small payloads
 | 
					    unsigned char           DragDropPayloadBufLocal[16];        // Local buffer for small payloads
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Tab bars
 | 
					    // Tab bars
 | 
				
			||||||
@@ -1694,7 +1701,7 @@ namespace ImGui
 | 
				
			|||||||
    IMGUI_API void          ClosePopupsOverWindow(ImGuiWindow* ref_window, bool restore_focus_to_window_under_popup);
 | 
					    IMGUI_API void          ClosePopupsOverWindow(ImGuiWindow* ref_window, bool restore_focus_to_window_under_popup);
 | 
				
			||||||
    IMGUI_API bool          IsPopupOpen(ImGuiID id); // Test for id within current popup stack level (currently begin-ed into); this doesn't scan the whole popup stack!
 | 
					    IMGUI_API bool          IsPopupOpen(ImGuiID id); // Test for id within current popup stack level (currently begin-ed into); this doesn't scan the whole popup stack!
 | 
				
			||||||
    IMGUI_API bool          BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_flags);
 | 
					    IMGUI_API bool          BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_flags);
 | 
				
			||||||
    IMGUI_API void          BeginTooltipEx(ImGuiWindowFlags extra_flags, bool override_previous_tooltip = true);
 | 
					    IMGUI_API void          BeginTooltipEx(ImGuiWindowFlags extra_flags, ImGuiTooltipFlags tooltip_flags);
 | 
				
			||||||
    IMGUI_API ImGuiWindow*  GetTopMostPopupModal();
 | 
					    IMGUI_API ImGuiWindow*  GetTopMostPopupModal();
 | 
				
			||||||
    IMGUI_API ImVec2        FindBestWindowPosForPopup(ImGuiWindow* window);
 | 
					    IMGUI_API ImVec2        FindBestWindowPosForPopup(ImGuiWindow* window);
 | 
				
			||||||
    IMGUI_API ImVec2        FindBestWindowPosForPopupEx(const ImVec2& ref_pos, const ImVec2& size, ImGuiDir* last_dir, const ImRect& r_outer, const ImRect& r_avoid, ImGuiPopupPositionPolicy policy = ImGuiPopupPositionPolicy_Default);
 | 
					    IMGUI_API ImVec2        FindBestWindowPosForPopupEx(const ImVec2& ref_pos, const ImVec2& size, ImGuiDir* last_dir, const ImRect& r_outer, const ImRect& r_avoid, ImGuiPopupPositionPolicy policy = ImGuiPopupPositionPolicy_Default);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4960,7 +4960,7 @@ void ImGui::ColorTooltip(const char* text, const float* col, ImGuiColorEditFlags
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    ImGuiContext& g = *GImGui;
 | 
					    ImGuiContext& g = *GImGui;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    BeginTooltipEx(0, true);
 | 
					    BeginTooltipEx(0, ImGuiTooltipFlags_OverridePreviousTooltip);
 | 
				
			||||||
    const char* text_end = text ? FindRenderedTextEnd(text, NULL) : text;
 | 
					    const char* text_end = text ? FindRenderedTextEnd(text, NULL) : text;
 | 
				
			||||||
    if (text_end > text)
 | 
					    if (text_end > text)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user