mirror of
				https://github.com/ocornut/imgui.git
				synced 2025-11-04 01:34:32 +00:00 
			
		
		
		
	Overlap: Internals: add NextItemData.ItemFlags to facilitate implementation of SetNextItemAllowOverlap() + potentially remove extra_flags from ItemAdd(). (#6512, #3909)
This commit is contained in:
		@@ -9438,7 +9438,7 @@ bool ImGui::ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb_arg, ImGu
 | 
			
		||||
    g.LastItemData.ID = id;
 | 
			
		||||
    g.LastItemData.Rect = bb;
 | 
			
		||||
    g.LastItemData.NavRect = nav_bb_arg ? *nav_bb_arg : bb;
 | 
			
		||||
    g.LastItemData.InFlags = g.CurrentItemFlags | extra_flags;
 | 
			
		||||
    g.LastItemData.InFlags = g.CurrentItemFlags | g.NextItemData.ItemFlags | extra_flags;
 | 
			
		||||
    g.LastItemData.StatusFlags = ImGuiItemStatusFlags_None;
 | 
			
		||||
 | 
			
		||||
    // Directional navigation processing
 | 
			
		||||
@@ -9470,6 +9470,7 @@ bool ImGui::ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb_arg, ImGu
 | 
			
		||||
        IM_ASSERT(id != window->ID && "Cannot have an empty ID at the root of a window. If you need an empty label, use ## and read the FAQ about how the ID Stack works!");
 | 
			
		||||
    }
 | 
			
		||||
    g.NextItemData.Flags = ImGuiNextItemDataFlags_None;
 | 
			
		||||
    g.NextItemData.ItemFlags = ImGuiItemFlags_None;
 | 
			
		||||
 | 
			
		||||
#ifdef IMGUI_ENABLE_TEST_ENGINE
 | 
			
		||||
    if (id != 0)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								imgui.h
									
									
									
									
									
								
							@@ -1294,7 +1294,7 @@ enum ImGuiHoveredFlags_
 | 
			
		||||
    ImGuiHoveredFlags_AllowWhenBlockedByPopup       = 1 << 5,   // Return true even if a popup window is normally blocking access to this item/window
 | 
			
		||||
    //ImGuiHoveredFlags_AllowWhenBlockedByModal     = 1 << 6,   // Return true even if a modal popup window is normally blocking access to this item/window. FIXME-TODO: Unavailable yet.
 | 
			
		||||
    ImGuiHoveredFlags_AllowWhenBlockedByActiveItem  = 1 << 7,   // Return true even if an active item is blocking access to this item/window. Useful for Drag and Drop patterns.
 | 
			
		||||
    ImGuiHoveredFlags_AllowWhenOverlapped           = 1 << 8,   // IsItemHovered() only: Return true even if the position is obstructed or overlapped by another window
 | 
			
		||||
    ImGuiHoveredFlags_AllowWhenOverlapped           = 1 << 8,   // IsItemHovered() only: Return true even if the position is obstructed or overlapped by another WINDOW.
 | 
			
		||||
    ImGuiHoveredFlags_AllowWhenDisabled             = 1 << 9,   // IsItemHovered() only: Return true even if the item is disabled
 | 
			
		||||
    ImGuiHoveredFlags_NoNavOverride                 = 1 << 10,  // IsItemHovered() only: Disable using gamepad/keyboard navigation state when active, always query mouse
 | 
			
		||||
    ImGuiHoveredFlags_RectOnly                      = ImGuiHoveredFlags_AllowWhenBlockedByPopup | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem | ImGuiHoveredFlags_AllowWhenOverlapped,
 | 
			
		||||
 
 | 
			
		||||
@@ -1179,13 +1179,14 @@ enum ImGuiNextItemDataFlags_
 | 
			
		||||
struct ImGuiNextItemData
 | 
			
		||||
{
 | 
			
		||||
    ImGuiNextItemDataFlags      Flags;
 | 
			
		||||
    ImGuiItemFlags              ItemFlags;
 | 
			
		||||
    float                       Width;          // Set by SetNextItemWidth()
 | 
			
		||||
    ImGuiID                     FocusScopeId;   // Set by SetNextItemMultiSelectData() (!= 0 signify value has been set, so it's an alternate version of HasSelectionData, we don't use Flags for this because they are cleared too early. This is mostly used for debugging)
 | 
			
		||||
    ImGuiCond                   OpenCond;
 | 
			
		||||
    bool                        OpenVal;        // Set by SetNextItemOpen()
 | 
			
		||||
 | 
			
		||||
    ImGuiNextItemData()         { memset(this, 0, sizeof(*this)); }
 | 
			
		||||
    inline void ClearFlags()    { Flags = ImGuiNextItemDataFlags_None; } // Also cleared manually by ItemAdd()!
 | 
			
		||||
    inline void ClearFlags()    { Flags = ImGuiNextItemDataFlags_None; ItemFlags = ImGuiItemFlags_None; } // Also cleared manually by ItemAdd()!
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Status storage for the last submitted item
 | 
			
		||||
 
 | 
			
		||||
@@ -1163,10 +1163,8 @@ bool ImGui::CheckboxFlagsT(const char* label, T* flags, T flags_value)
 | 
			
		||||
    if (!all_on && any_on)
 | 
			
		||||
    {
 | 
			
		||||
        ImGuiContext& g = *GImGui;
 | 
			
		||||
        ImGuiItemFlags backup_item_flags = g.CurrentItemFlags;
 | 
			
		||||
        g.CurrentItemFlags |= ImGuiItemFlags_MixedValue;
 | 
			
		||||
        g.NextItemData.ItemFlags |= ImGuiItemFlags_MixedValue;
 | 
			
		||||
        pressed = Checkbox(label, &all_on);
 | 
			
		||||
        g.CurrentItemFlags = backup_item_flags;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
@@ -4959,11 +4957,9 @@ bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_
 | 
			
		||||
    {
 | 
			
		||||
        // For focus requests to work on our multiline we need to ensure our child ItemAdd() call specifies the ImGuiItemFlags_Inputable (ref issue #4761)...
 | 
			
		||||
        Dummy(ImVec2(text_size.x, text_size.y + style.FramePadding.y));
 | 
			
		||||
        ImGuiItemFlags backup_item_flags = g.CurrentItemFlags;
 | 
			
		||||
        g.CurrentItemFlags |= ImGuiItemFlags_Inputable | ImGuiItemFlags_NoTabStop;
 | 
			
		||||
        g.NextItemData.ItemFlags |= ImGuiItemFlags_Inputable | ImGuiItemFlags_NoTabStop;
 | 
			
		||||
        EndChild();
 | 
			
		||||
        item_data_backup.StatusFlags |= (g.LastItemData.StatusFlags & ImGuiItemStatusFlags_HoveredWindow);
 | 
			
		||||
        g.CurrentItemFlags = backup_item_flags;
 | 
			
		||||
 | 
			
		||||
        // ...and then we need to undo the group overriding last item data, which gets a bit messy as EndGroup() tries to forward scrollbar being active...
 | 
			
		||||
        // FIXME: This quite messy/tricky, should attempt to get rid of the child window.
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user