mirror of
				https://github.com/ocornut/imgui.git
				synced 2025-11-04 01:34:32 +00:00 
			
		
		
		
	TestEngine: Added PushID() hooks.
This commit is contained in:
		
							
								
								
									
										33
									
								
								imgui.cpp
									
									
									
									
									
								
							
							
						
						
									
										33
									
								
								imgui.cpp
									
									
									
									
									
								
							@@ -6597,6 +6597,7 @@ void ImGui::PushFocusScope(ImGuiID id)
 | 
			
		||||
    ImGuiWindow* window = g.CurrentWindow;
 | 
			
		||||
    window->IDStack.push_back(window->DC.NavFocusScopeIdCurrent);
 | 
			
		||||
    window->DC.NavFocusScopeIdCurrent = id;
 | 
			
		||||
    IMGUI_TEST_ENGINE_PUSH_ID(id, ImGuiDataType_ID, NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ImGui::PopFocusScope()
 | 
			
		||||
@@ -6648,33 +6649,47 @@ ImGuiStorage* ImGui::GetStateStorage()
 | 
			
		||||
 | 
			
		||||
void ImGui::PushID(const char* str_id)
 | 
			
		||||
{
 | 
			
		||||
    ImGuiWindow* window = GImGui->CurrentWindow;
 | 
			
		||||
    window->IDStack.push_back(window->GetIDNoKeepAlive(str_id));
 | 
			
		||||
    ImGuiContext& g = *GImGui;
 | 
			
		||||
    ImGuiWindow* window = g.CurrentWindow;
 | 
			
		||||
    ImGuiID id = window->GetIDNoKeepAlive(str_id);
 | 
			
		||||
    window->IDStack.push_back(id);
 | 
			
		||||
    IMGUI_TEST_ENGINE_PUSH_ID(id, ImGuiDataType_String, str_id);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ImGui::PushID(const char* str_id_begin, const char* str_id_end)
 | 
			
		||||
{
 | 
			
		||||
    ImGuiWindow* window = GImGui->CurrentWindow;
 | 
			
		||||
    window->IDStack.push_back(window->GetIDNoKeepAlive(str_id_begin, str_id_end));
 | 
			
		||||
    ImGuiContext& g = *GImGui;
 | 
			
		||||
    ImGuiWindow* window = g.CurrentWindow;
 | 
			
		||||
    ImGuiID id = window->GetIDNoKeepAlive(str_id_begin, str_id_end);
 | 
			
		||||
    window->IDStack.push_back(id);
 | 
			
		||||
    IMGUI_TEST_ENGINE_PUSH_ID2(id, ImGuiDataType_String, str_id_begin, str_id_end);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ImGui::PushID(const void* ptr_id)
 | 
			
		||||
{
 | 
			
		||||
    ImGuiWindow* window = GImGui->CurrentWindow;
 | 
			
		||||
    window->IDStack.push_back(window->GetIDNoKeepAlive(ptr_id));
 | 
			
		||||
    ImGuiContext& g = *GImGui;
 | 
			
		||||
    ImGuiWindow* window = g.CurrentWindow;
 | 
			
		||||
    ImGuiID id = window->GetIDNoKeepAlive(ptr_id);
 | 
			
		||||
    window->IDStack.push_back(id);
 | 
			
		||||
    IMGUI_TEST_ENGINE_PUSH_ID(id, ImGuiDataType_Pointer, ptr_id);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ImGui::PushID(int int_id)
 | 
			
		||||
{
 | 
			
		||||
    ImGuiWindow* window = GImGui->CurrentWindow;
 | 
			
		||||
    window->IDStack.push_back(window->GetIDNoKeepAlive(int_id));
 | 
			
		||||
    ImGuiContext& g = *GImGui;
 | 
			
		||||
    ImGuiWindow* window = g.CurrentWindow;
 | 
			
		||||
    ImGuiID id = window->GetIDNoKeepAlive(int_id);
 | 
			
		||||
    window->IDStack.push_back(id);
 | 
			
		||||
    IMGUI_TEST_ENGINE_PUSH_ID(id, ImGuiDataType_S32, (intptr_t)int_id);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Push a given id value ignoring the ID stack as a seed.
 | 
			
		||||
void ImGui::PushOverrideID(ImGuiID id)
 | 
			
		||||
{
 | 
			
		||||
    ImGuiWindow* window = GImGui->CurrentWindow;
 | 
			
		||||
    ImGuiContext& g = *GImGui;
 | 
			
		||||
    ImGuiWindow* window = g.CurrentWindow;
 | 
			
		||||
    window->IDStack.push_back(id);
 | 
			
		||||
    IMGUI_TEST_ENGINE_PUSH_ID(id, ImGuiDataType_ID, NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ImGui::PopID()
 | 
			
		||||
 
 | 
			
		||||
@@ -723,6 +723,14 @@ struct ImGuiDataTypeInfo
 | 
			
		||||
    const char* ScanFmt;        // Default scanf format for the type
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Extend ImGuiDataType_
 | 
			
		||||
enum ImGuiDataTypePrivate_
 | 
			
		||||
{
 | 
			
		||||
    ImGuiDataType_String = ImGuiDataType_COUNT + 1,
 | 
			
		||||
    ImGuiDataType_Pointer,
 | 
			
		||||
    ImGuiDataType_ID
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Stacked color modifier, backup of modified data so we can restore it
 | 
			
		||||
struct ImGuiColorMod
 | 
			
		||||
{
 | 
			
		||||
@@ -1035,6 +1043,7 @@ struct ImGuiContext
 | 
			
		||||
    bool                    WithinFrameScopeWithImplicitWindow; // Set by NewFrame(), cleared by EndFrame() when the implicit debug window has been pushed
 | 
			
		||||
    bool                    WithinEndChild;                     // Set within EndChild()
 | 
			
		||||
    bool                    TestEngineHookItems;                // Will call test engine hooks ImGuiTestEngineHook_ItemAdd(), ImGuiTestEngineHook_ItemInfo(), ImGuiTestEngineHook_Log()
 | 
			
		||||
    ImGuiID                 TestEngineHookPushId;
 | 
			
		||||
    void*                   TestEngine;                         // Test engine user data
 | 
			
		||||
 | 
			
		||||
    // Windows state
 | 
			
		||||
@@ -1244,6 +1253,7 @@ struct ImGuiContext
 | 
			
		||||
        FrameCountEnded = FrameCountRendered = -1;
 | 
			
		||||
        WithinFrameScope = WithinFrameScopeWithImplicitWindow = WithinEndChild = false;
 | 
			
		||||
        TestEngineHookItems = false;
 | 
			
		||||
        TestEngineHookPushId = 0;
 | 
			
		||||
        TestEngine = NULL;
 | 
			
		||||
 | 
			
		||||
        WindowsActiveCount = 0;
 | 
			
		||||
@@ -1941,14 +1951,20 @@ extern void                 ImGuiTestEngineHook_PreNewFrame(ImGuiContext* ctx);
 | 
			
		||||
extern void                 ImGuiTestEngineHook_PostNewFrame(ImGuiContext* ctx);
 | 
			
		||||
extern void                 ImGuiTestEngineHook_ItemAdd(ImGuiContext* ctx, const ImRect& bb, ImGuiID id);
 | 
			
		||||
extern void                 ImGuiTestEngineHook_ItemInfo(ImGuiContext* ctx, ImGuiID id, const char* label, ImGuiItemStatusFlags flags);
 | 
			
		||||
extern void                 ImGuiTestEngineHook_PushID(ImGuiContext* ctx, ImGuiDataType data_type, ImGuiID id, const void* data_id);
 | 
			
		||||
extern void                 ImGuiTestEngineHook_PushID(ImGuiContext* ctx, ImGuiDataType data_type, ImGuiID id, const void* data_id, const void* data_id_end);
 | 
			
		||||
extern void                 ImGuiTestEngineHook_Log(ImGuiContext* ctx, const char* fmt, ...);
 | 
			
		||||
#define IMGUI_TEST_ENGINE_ITEM_ADD(_BB,_ID)                 if (g.TestEngineHookItems) ImGuiTestEngineHook_ItemAdd(&g, _BB, _ID)               // Register item bounding box
 | 
			
		||||
#define IMGUI_TEST_ENGINE_ITEM_INFO(_ID,_LABEL,_FLAGS)      if (g.TestEngineHookItems) ImGuiTestEngineHook_ItemInfo(&g, _ID, _LABEL, _FLAGS)   // Register item label and status flags (optional)
 | 
			
		||||
#define IMGUI_TEST_ENGINE_LOG(_FMT,...)                     if (g.TestEngineHookItems) ImGuiTestEngineHook_Log(&g, _FMT, __VA_ARGS__)          // Custom log entry from user land into test log
 | 
			
		||||
#define IMGUI_TEST_ENGINE_PUSH_ID(_ID,_TYPE,_DATA)          if (g.TestEngineHookPushId == id) ImGuiTestEngineHook_PushID(&g, _TYPE, _ID, (const void*)(_DATA));
 | 
			
		||||
#define IMGUI_TEST_ENGINE_PUSH_ID2(_ID,_TYPE,_DATA,_DATA2)  if (g.TestEngineHookPushId == id) ImGuiTestEngineHook_PushID(&g, _TYPE, _ID, (const void*)(_DATA), (const void*)(_DATA2));
 | 
			
		||||
#else
 | 
			
		||||
#define IMGUI_TEST_ENGINE_ITEM_ADD(_BB,_ID)                 do { } while (0)
 | 
			
		||||
#define IMGUI_TEST_ENGINE_ITEM_INFO(_ID,_LABEL,_FLAGS)      do { } while (0)
 | 
			
		||||
#define IMGUI_TEST_ENGINE_LOG(_FMT,...)                     do { } while (0)
 | 
			
		||||
#define IMGUI_TEST_ENGINE_PUSH_ID(_ID,_TYPE,_DATA)          do { } while (0)
 | 
			
		||||
#define IMGUI_TEST_ENGINE_PUSH_ID2(_ID,_TYPE,_DATA,_DATA2)  do { } while (0)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(__clang__)
 | 
			
		||||
 
 | 
			
		||||
@@ -5493,10 +5493,12 @@ void ImGui::TreePush(const void* ptr_id)
 | 
			
		||||
 | 
			
		||||
void ImGui::TreePushOverrideID(ImGuiID id)
 | 
			
		||||
{
 | 
			
		||||
    ImGuiWindow* window = GetCurrentWindow();
 | 
			
		||||
    ImGuiContext& g = *GImGui;
 | 
			
		||||
    ImGuiWindow* window = g.CurrentWindow;
 | 
			
		||||
    Indent();
 | 
			
		||||
    window->DC.TreeDepth++;
 | 
			
		||||
    window->IDStack.push_back(id);
 | 
			
		||||
    IMGUI_TEST_ENGINE_PUSH_ID(id, ImGuiDataType_ID, NULL);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ImGui::TreePop()
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user