2
0
Эх сурвалжийг харах

Demo: example tree used by Property Editor & Selection demos properly freed on app closure. (#8158)

ocornut 8 сар өмнө
parent
commit
eb0ad66d88

+ 2 - 0
docs/CHANGELOG.txt

@@ -53,6 +53,8 @@ Other changes:
 
 
 - Error Handling: fixed cases where recoverable error handling would crash when 
 - Error Handling: fixed cases where recoverable error handling would crash when 
   processing errors outside of the NewFrame()..EndFrame() scope. (#1651)
   processing errors outside of the NewFrame()..EndFrame() scope. (#1651)
+- Demo: example tree used by Property Editor & Selection demos properly freed
+  on application closure. (#8158) [@Legulysse]
 - Examples: Win32+DX12: Using a basic free-list allocator to manage multiple
 - Examples: Win32+DX12: Using a basic free-list allocator to manage multiple
   SRV descriptors.
   SRV descriptors.
 
 

+ 10 - 1
imgui_demo.cpp

@@ -308,6 +308,13 @@ static ExampleTreeNode* ExampleTree_CreateNode(const char* name, int uid, Exampl
     return node;
     return node;
 }
 }
 
 
+static void ExampleTree_DestroyNode(ExampleTreeNode* node)
+{
+    for (ExampleTreeNode* child_node : node->Childs)
+        ExampleTree_DestroyNode(child_node);
+    IM_DELETE(node);
+}
+
 // Create example tree data
 // Create example tree data
 // (this allocates _many_ more times than most other code in either Dear ImGui or others demo)
 // (this allocates _many_ more times than most other code in either Dear ImGui or others demo)
 static ExampleTreeNode* ExampleTree_CreateDemoTree()
 static ExampleTreeNode* ExampleTree_CreateDemoTree()
@@ -343,7 +350,7 @@ static ExampleTreeNode* ExampleTree_CreateDemoTree()
 // [SECTION] Demo Window / ShowDemoWindow()
 // [SECTION] Demo Window / ShowDemoWindow()
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 
 
-// Data to be shared accross different functions of the demo.
+// Data to be shared across different functions of the demo.
 struct ImGuiDemoWindowData
 struct ImGuiDemoWindowData
 {
 {
     // Examples Apps (accessible from the "Examples" menu)
     // Examples Apps (accessible from the "Examples" menu)
@@ -371,6 +378,8 @@ struct ImGuiDemoWindowData
 
 
     // Other data
     // Other data
     ExampleTreeNode* DemoTree = NULL;
     ExampleTreeNode* DemoTree = NULL;
+
+    ~ImGuiDemoWindowData() { if (DemoTree) ExampleTree_DestroyNode(DemoTree); }
 };
 };
 
 
 // Demonstrate most Dear ImGui features (this is big function!)
 // Demonstrate most Dear ImGui features (this is big function!)