mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-03 22:51:06 +01:00 
			
		
		
		
	Added a mechanism to compact/free the larger allocations of unused windows (buffers are compacted when a window is unused for 60 seconds, as per io.ConfigWindowsMemoryCompactTimer = 60.0f). Note that memory usage has never been reported as a problem, so this is merely a touch of overzealous luxury. (#2636)
This commit is contained in:
		@@ -1321,8 +1321,8 @@ struct IMGUI_API ImGuiWindow
 | 
			
		||||
    ImVec2                  SetWindowPosVal;                    // store window position when using a non-zero Pivot (position set needs to be processed when we know the window size)
 | 
			
		||||
    ImVec2                  SetWindowPosPivot;                  // store window pivot for positioning. ImVec2(0,0) when positioning from top-left corner; ImVec2(0.5f,0.5f) for centering; ImVec2(1,1) for bottom right.
 | 
			
		||||
 | 
			
		||||
    ImVector<ImGuiID>       IDStack;                            // ID stack. ID are hashes seeded with the value at the top of the stack. (In theory this should be in the TempData structure)
 | 
			
		||||
    ImGuiWindowTempData     DC;                                 // Temporary per-window data, reset at the beginning of the frame. This used to be called ImGuiDrawContext, hence the "DC" variable name.
 | 
			
		||||
    ImVector<ImGuiID>       IDStack;                            // ID stack. ID are hashes seeded with the value at the top of the stack
 | 
			
		||||
 | 
			
		||||
    // The best way to understand what those rectangles are is to use the 'Metrics -> Tools -> Show windows rectangles' viewer.
 | 
			
		||||
    // The main 'OuterRect', omitted as a field, is window->Rect().
 | 
			
		||||
@@ -1334,6 +1334,7 @@ struct IMGUI_API ImGuiWindow
 | 
			
		||||
    ImRect                  ContentsRegionRect;                 // FIXME: This is currently confusing/misleading. It is essentially WorkRect but not handling of scrolling. We currently rely on it as right/bottom aligned sizing operation need some size to rely on.
 | 
			
		||||
 | 
			
		||||
    int                     LastFrameActive;                    // Last frame number the window was Active.
 | 
			
		||||
    float                   LastTimeActive;
 | 
			
		||||
    float                   ItemWidthDefault;
 | 
			
		||||
    ImGuiMenuColumns        MenuColumns;                        // Simplified columns storage for menu items
 | 
			
		||||
    ImGuiStorage            StateStorage;
 | 
			
		||||
@@ -1352,6 +1353,10 @@ struct IMGUI_API ImGuiWindow
 | 
			
		||||
    ImGuiID                 NavLastIds[ImGuiNavLayer_COUNT];    // Last known NavId for this window, per layer (0/1)
 | 
			
		||||
    ImRect                  NavRectRel[ImGuiNavLayer_COUNT];    // Reference rectangle, in window relative space
 | 
			
		||||
 | 
			
		||||
    bool                    MemoryCompacted;
 | 
			
		||||
    int                     MemoryDrawListIdxCapacity;
 | 
			
		||||
    int                     MemoryDrawListVtxCapacity;
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
    ImGuiWindow(ImGuiContext* context, const char* name);
 | 
			
		||||
    ~ImGuiWindow();
 | 
			
		||||
@@ -1483,6 +1488,8 @@ namespace ImGui
 | 
			
		||||
    IMGUI_API void          SetWindowPos(ImGuiWindow* window, const ImVec2& pos, ImGuiCond cond = 0);
 | 
			
		||||
    IMGUI_API void          SetWindowSize(ImGuiWindow* window, const ImVec2& size, ImGuiCond cond = 0);
 | 
			
		||||
    IMGUI_API void          SetWindowCollapsed(ImGuiWindow* window, bool collapsed, ImGuiCond cond = 0);
 | 
			
		||||
    IMGUI_API void          GcCompactTransientWindowBuffers(ImGuiWindow* window);
 | 
			
		||||
    IMGUI_API void          GcAwakeTransientWindowBuffers(ImGuiWindow* window);
 | 
			
		||||
 | 
			
		||||
    IMGUI_API void          SetCurrentFont(ImFont* font);
 | 
			
		||||
    inline ImFont*          GetDefaultFont() { ImGuiContext& g = *GImGui; return g.IO.FontDefault ? g.IO.FontDefault : g.IO.Fonts->Fonts[0]; }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user