mirror of
				https://github.com/ocornut/imgui.git
				synced 2025-11-04 01:34:32 +00:00 
			
		
		
		
	Internals: rename ImGuiTreeNodeStackData::InFlags and ImGuiNavItemData::InFlags to ItemFlags too.
This commit is contained in:
		
							
								
								
									
										16
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								imgui.cpp
									
									
									
									
									
								
							@@ -4530,7 +4530,7 @@ bool ImGui::IsItemHovered(ImGuiHoveredFlags flags)
 | 
			
		||||
// (this does not rely on LastItemData it can be called from a ButtonBehavior() call not following an ItemAdd() call)
 | 
			
		||||
// FIXME-LEGACY: the 'ImGuiItemFlags item_flags' parameter was added on 2023-06-28.
 | 
			
		||||
// If you used this in your legacy/custom widgets code:
 | 
			
		||||
// - Commonly: if your ItemHoverable() call comes after an ItemAdd() call: pass 'item_flags = g.LastItemData.InFlags'.
 | 
			
		||||
// - Commonly: if your ItemHoverable() call comes after an ItemAdd() call: pass 'item_flags = g.LastItemData.ItemFlags'.
 | 
			
		||||
// - Rare: otherwise you may pass 'item_flags = 0' (ImGuiItemFlags_None) unless you want to benefit from special behavior handled by ItemHoverable.
 | 
			
		||||
bool ImGui::ItemHoverable(const ImRect& bb, ImGuiID id, ImGuiItemFlags item_flags)
 | 
			
		||||
{
 | 
			
		||||
@@ -10847,7 +10847,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!");
 | 
			
		||||
    }
 | 
			
		||||
    //if (g.IO.KeyAlt) window->DrawList->AddRect(bb.Min, bb.Max, IM_COL32(255,255,0,120)); // [DEBUG]
 | 
			
		||||
    //if ((g.LastItemData.InFlags & ImGuiItemFlags_NoNav) == 0)
 | 
			
		||||
    //if ((g.LastItemData.ItemFlags & ImGuiItemFlags_NoNav) == 0)
 | 
			
		||||
    //    window->DrawList->AddRect(g.LastItemData.NavRect.Min, g.LastItemData.NavRect.Max, IM_COL32(255,255,0,255)); // [DEBUG]
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
@@ -12444,9 +12444,9 @@ static void ImGui::NavApplyItemToResult(ImGuiNavItemData* result)
 | 
			
		||||
    result->Window = window;
 | 
			
		||||
    result->ID = g.LastItemData.ID;
 | 
			
		||||
    result->FocusScopeId = g.CurrentFocusScopeId;
 | 
			
		||||
    result->InFlags = g.LastItemData.ItemFlags;
 | 
			
		||||
    result->ItemFlags = g.LastItemData.ItemFlags;
 | 
			
		||||
    result->RectRel = WindowRectAbsToRel(window, g.LastItemData.NavRect);
 | 
			
		||||
    if (result->InFlags & ImGuiItemFlags_HasSelectionUserData)
 | 
			
		||||
    if (result->ItemFlags & ImGuiItemFlags_HasSelectionUserData)
 | 
			
		||||
    {
 | 
			
		||||
        IM_ASSERT(g.NextItemData.SelectionUserData != ImGuiSelectionUserData_Invalid);
 | 
			
		||||
        result->SelectionUserData = g.NextItemData.SelectionUserData; // INTENTIONAL: At this point this field is not cleared in NextItemData. Avoid unnecessary copy to LastItemData.
 | 
			
		||||
@@ -12652,7 +12652,7 @@ void ImGui::NavMoveRequestResolveWithPastTreeNode(ImGuiNavItemData* result, ImGu
 | 
			
		||||
    ImGuiContext& g = *GImGui;
 | 
			
		||||
    g.NavMoveScoringItems = false;
 | 
			
		||||
    g.LastItemData.ID = tree_node_data->ID;
 | 
			
		||||
    g.LastItemData.ItemFlags = tree_node_data->InFlags & ~ImGuiItemFlags_HasSelectionUserData; // Losing SelectionUserData, recovered next-frame (cheaper).
 | 
			
		||||
    g.LastItemData.ItemFlags = tree_node_data->ItemFlags & ~ImGuiItemFlags_HasSelectionUserData; // Losing SelectionUserData, recovered next-frame (cheaper).
 | 
			
		||||
    g.LastItemData.NavRect = tree_node_data->NavRect;
 | 
			
		||||
    NavApplyItemToResult(result); // Result this instead of implementing a NavApplyPastTreeNodeToResult()
 | 
			
		||||
    NavClearPreferredPosForAxis(ImGuiAxis_Y);
 | 
			
		||||
@@ -13039,7 +13039,7 @@ void ImGui::NavInitRequestApplyResult()
 | 
			
		||||
        g.NavJustMovedToFocusScopeId = result->FocusScopeId;
 | 
			
		||||
        g.NavJustMovedToKeyMods = 0;
 | 
			
		||||
        g.NavJustMovedToIsTabbing = false;
 | 
			
		||||
        g.NavJustMovedToHasSelectionData = (result->InFlags & ImGuiItemFlags_HasSelectionUserData) != 0;
 | 
			
		||||
        g.NavJustMovedToHasSelectionData = (result->ItemFlags & ImGuiItemFlags_HasSelectionUserData) != 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Apply result from previous navigation init request (will typically select the first item, unless SetItemDefaultFocus() has been called)
 | 
			
		||||
@@ -13298,7 +13298,7 @@ void ImGui::NavMoveRequestApplyResult()
 | 
			
		||||
        g.NavJustMovedToFocusScopeId = result->FocusScopeId;
 | 
			
		||||
        g.NavJustMovedToKeyMods = g.NavMoveKeyMods;
 | 
			
		||||
        g.NavJustMovedToIsTabbing = (g.NavMoveFlags & ImGuiNavMoveFlags_IsTabbing) != 0;
 | 
			
		||||
        g.NavJustMovedToHasSelectionData = (result->InFlags & ImGuiItemFlags_HasSelectionUserData) != 0;
 | 
			
		||||
        g.NavJustMovedToHasSelectionData = (result->ItemFlags & ImGuiItemFlags_HasSelectionUserData) != 0;
 | 
			
		||||
        //IMGUI_DEBUG_LOG_NAV("[nav] NavJustMovedFromFocusScopeId = 0x%08X, NavJustMovedToFocusScopeId = 0x%08X\n", g.NavJustMovedFromFocusScopeId, g.NavJustMovedToFocusScopeId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -13318,7 +13318,7 @@ void ImGui::NavMoveRequestApplyResult()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Tabbing: Activates Inputable, otherwise only Focus
 | 
			
		||||
    if ((g.NavMoveFlags & ImGuiNavMoveFlags_IsTabbing) && (result->InFlags & ImGuiItemFlags_Inputable) == 0)
 | 
			
		||||
    if ((g.NavMoveFlags & ImGuiNavMoveFlags_IsTabbing) && (result->ItemFlags & ImGuiItemFlags_Inputable) == 0)
 | 
			
		||||
        g.NavMoveFlags &= ~ImGuiNavMoveFlags_Activate;
 | 
			
		||||
 | 
			
		||||
    // Activate
 | 
			
		||||
 
 | 
			
		||||
@@ -823,8 +823,8 @@ enum ImGuiDataTypePrivate_
 | 
			
		||||
//-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
// Extend ImGuiItemFlags
 | 
			
		||||
// - input: PushItemFlag() manipulates g.CurrentItemFlags, ItemAdd() calls may add extra flags.
 | 
			
		||||
// - output: stored in g.LastItemData.InFlags
 | 
			
		||||
// - input: PushItemFlag() manipulates g.CurrentItemFlags, g.NextItemData.ItemFlags, ItemAdd() calls may add extra flags too.
 | 
			
		||||
// - output: stored in g.LastItemData.ItemFlags
 | 
			
		||||
enum ImGuiItemFlagsPrivate_
 | 
			
		||||
{
 | 
			
		||||
    // Controlled by user
 | 
			
		||||
@@ -908,7 +908,7 @@ enum ImGuiButtonFlagsPrivate_
 | 
			
		||||
    ImGuiButtonFlags_AlignTextBaseLine      = 1 << 15,  // vertically align button to match text baseline - ButtonEx() only // FIXME: Should be removed and handled by SmallButton(), not possible currently because of DC.CursorPosPrevLine
 | 
			
		||||
    ImGuiButtonFlags_NoKeyModsAllowed       = 1 << 16,  // disable mouse interaction if a key modifier is held
 | 
			
		||||
    ImGuiButtonFlags_NoHoldingActiveId      = 1 << 17,  // don't set ActiveId while holding the mouse (ImGuiButtonFlags_PressedOnClick only)
 | 
			
		||||
    ImGuiButtonFlags_NoNavFocus             = 1 << 18,  // don't override navigation focus when activated (FIXME: this is essentially used every time an item uses ImGuiItemFlags_NoNav, but because legacy specs don't requires LastItemData to be set ButtonBehavior(), we can't poll g.LastItemData.InFlags)
 | 
			
		||||
    ImGuiButtonFlags_NoNavFocus             = 1 << 18,  // don't override navigation focus when activated (FIXME: this is essentially used every time an item uses ImGuiItemFlags_NoNav, but because legacy specs don't requires LastItemData to be set ButtonBehavior(), we can't poll g.LastItemData.ItemFlags)
 | 
			
		||||
    ImGuiButtonFlags_NoHoveredOnFocus       = 1 << 19,  // don't report as hovered when nav focus is on this item
 | 
			
		||||
    ImGuiButtonFlags_NoSetKeyOwner          = 1 << 20,  // don't set key/input owner on the initial click (note: mouse buttons are keys! often, the key in question will be ImGuiKey_MouseLeft!)
 | 
			
		||||
    ImGuiButtonFlags_NoTestKeyOwner         = 1 << 21,  // don't test key/input owner when polling the key (note: mouse buttons are keys! often, the key in question will be ImGuiKey_MouseLeft!)
 | 
			
		||||
@@ -1250,7 +1250,7 @@ struct ImGuiTreeNodeStackData
 | 
			
		||||
{
 | 
			
		||||
    ImGuiID                 ID;
 | 
			
		||||
    ImGuiTreeNodeFlags      TreeFlags;
 | 
			
		||||
    ImGuiItemFlags          InFlags;    // Used for nav landing
 | 
			
		||||
    ImGuiItemFlags          ItemFlags;  // Used for nav landing
 | 
			
		||||
    ImRect                  NavRect;    // Used for nav landing
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
@@ -1590,14 +1590,14 @@ struct ImGuiNavItemData
 | 
			
		||||
    ImGuiID             ID;             // Init,Move    // Best candidate item ID
 | 
			
		||||
    ImGuiID             FocusScopeId;   // Init,Move    // Best candidate focus scope ID
 | 
			
		||||
    ImRect              RectRel;        // Init,Move    // Best candidate bounding box in window relative space
 | 
			
		||||
    ImGuiItemFlags      InFlags;        // ????,Move    // Best candidate item flags
 | 
			
		||||
    ImGuiItemFlags      ItemFlags;      // ????,Move    // Best candidate item flags
 | 
			
		||||
    float               DistBox;        //      Move    // Best candidate box distance to current NavId
 | 
			
		||||
    float               DistCenter;     //      Move    // Best candidate center distance to current NavId
 | 
			
		||||
    float               DistAxial;      //      Move    // Best candidate axial distance to current NavId
 | 
			
		||||
    ImGuiSelectionUserData SelectionUserData;//I+Mov    // Best candidate SetNextItemSelectionUserData() value. Valid if (InFlags & ImGuiItemFlags_HasSelectionUserData)
 | 
			
		||||
    ImGuiSelectionUserData SelectionUserData;//I+Mov    // Best candidate SetNextItemSelectionUserData() value. Valid if (ItemFlags & ImGuiItemFlags_HasSelectionUserData)
 | 
			
		||||
 | 
			
		||||
    ImGuiNavItemData()  { Clear(); }
 | 
			
		||||
    void Clear()        { Window = NULL; ID = FocusScopeId = 0; InFlags = 0; SelectionUserData = -1; DistBox = DistCenter = DistAxial = FLT_MAX; }
 | 
			
		||||
    void Clear()        { Window = NULL; ID = FocusScopeId = 0; ItemFlags = 0; SelectionUserData = -1; DistBox = DistCenter = DistAxial = FLT_MAX; }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Storage for PushFocusScope()
 | 
			
		||||
@@ -2177,7 +2177,7 @@ struct ImGuiContext
 | 
			
		||||
    ImGuiID                 NavJustMovedToFocusScopeId;         // Just navigated to this focus scope id (result of a successfully MoveRequest).
 | 
			
		||||
    ImGuiKeyChord           NavJustMovedToKeyMods;
 | 
			
		||||
    bool                    NavJustMovedToIsTabbing;            // Copy of ImGuiNavMoveFlags_IsTabbing. Maybe we should store whole flags.
 | 
			
		||||
    bool                    NavJustMovedToHasSelectionData;     // Copy of move result's InFlags & ImGuiItemFlags_HasSelectionUserData). Maybe we should just store ImGuiNavItemData.
 | 
			
		||||
    bool                    NavJustMovedToHasSelectionData;     // Copy of move result's ItemFlags & ImGuiItemFlags_HasSelectionUserData). Maybe we should just store ImGuiNavItemData.
 | 
			
		||||
 | 
			
		||||
    // Navigation: Windowing (CTRL+TAB for list, or Menu button + keys or directional pads to move/resize)
 | 
			
		||||
    ImGuiKeyChord           ConfigNavWindowingKeyNext;          // = ImGuiMod_Ctrl | ImGuiKey_Tab (or ImGuiMod_Super | ImGuiKey_Tab on OS X). For reconfiguration (see #4828)
 | 
			
		||||
 
 | 
			
		||||
@@ -6457,7 +6457,7 @@ static void TreeNodeStoreStackData(ImGuiTreeNodeFlags flags)
 | 
			
		||||
    ImGuiTreeNodeStackData* tree_node_data = &g.TreeNodeStack.back();
 | 
			
		||||
    tree_node_data->ID = g.LastItemData.ID;
 | 
			
		||||
    tree_node_data->TreeFlags = flags;
 | 
			
		||||
    tree_node_data->InFlags = g.LastItemData.ItemFlags;
 | 
			
		||||
    tree_node_data->ItemFlags = g.LastItemData.ItemFlags;
 | 
			
		||||
    tree_node_data->NavRect = g.LastItemData.NavRect;
 | 
			
		||||
    window->DC.TreeHasStackDataDepthMask |= (1 << window->DC.TreeDepth);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user