mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-11-04 07:01:04 +01:00 
			
		
		
		
	Merge branch 'master' into docking
# Conflicts: # imgui.cpp # imgui_internal.h # imgui_widgets.cpp
This commit is contained in:
		@@ -624,20 +624,30 @@ struct IMGUI_API ImPool
 | 
			
		||||
    ImVector<T>     Buf;        // Contiguous data
 | 
			
		||||
    ImGuiStorage    Map;        // ID->Index
 | 
			
		||||
    ImPoolIdx       FreeIdx;    // Next free idx to use
 | 
			
		||||
    ImPoolIdx       AliveCount; // Number of active/alive items (for display purpose)
 | 
			
		||||
 | 
			
		||||
    ImPool()    { FreeIdx = 0; }
 | 
			
		||||
    ImPool()    { FreeIdx = AliveCount = 0; }
 | 
			
		||||
    ~ImPool()   { Clear(); }
 | 
			
		||||
    T*          GetByKey(ImGuiID key)               { int idx = Map.GetInt(key, -1); return (idx != -1) ? &Buf[idx] : NULL; }
 | 
			
		||||
    T*          GetByIndex(ImPoolIdx n)             { return &Buf[n]; }
 | 
			
		||||
    ImPoolIdx   GetIndex(const T* p) const          { IM_ASSERT(p >= Buf.Data && p < Buf.Data + Buf.Size); return (ImPoolIdx)(p - Buf.Data); }
 | 
			
		||||
    T*          GetOrAddByKey(ImGuiID key)          { int* p_idx = Map.GetIntRef(key, -1); if (*p_idx != -1) return &Buf[*p_idx]; *p_idx = FreeIdx; return Add(); }
 | 
			
		||||
    bool        Contains(const T* p) const          { return (p >= Buf.Data && p < Buf.Data + Buf.Size); }
 | 
			
		||||
    void        Clear()                             { for (int n = 0; n < Map.Data.Size; n++) { int idx = Map.Data[n].val_i; if (idx != -1) Buf[idx].~T(); } Map.Clear(); Buf.clear(); FreeIdx = 0; }
 | 
			
		||||
    T*          Add()                               { int idx = FreeIdx; if (idx == Buf.Size) { Buf.resize(Buf.Size + 1); FreeIdx++; } else { FreeIdx = *(int*)&Buf[idx]; } IM_PLACEMENT_NEW(&Buf[idx]) T(); return &Buf[idx]; }
 | 
			
		||||
    void        Clear()                             { for (int n = 0; n < Map.Data.Size; n++) { int idx = Map.Data[n].val_i; if (idx != -1) Buf[idx].~T(); } Map.Clear(); Buf.clear(); FreeIdx = AliveCount = 0; }
 | 
			
		||||
    T*          Add()                               { int idx = FreeIdx; if (idx == Buf.Size) { Buf.resize(Buf.Size + 1); FreeIdx++; } else { FreeIdx = *(int*)&Buf[idx]; } IM_PLACEMENT_NEW(&Buf[idx]) T(); AliveCount++; return &Buf[idx]; }
 | 
			
		||||
    void        Remove(ImGuiID key, const T* p)     { Remove(key, GetIndex(p)); }
 | 
			
		||||
    void        Remove(ImGuiID key, ImPoolIdx idx)  { Buf[idx].~T(); *(int*)&Buf[idx] = FreeIdx; FreeIdx = idx; Map.SetInt(key, -1); }
 | 
			
		||||
    void        Remove(ImGuiID key, ImPoolIdx idx)  { Buf[idx].~T(); *(int*)&Buf[idx] = FreeIdx; FreeIdx = idx; Map.SetInt(key, -1); AliveCount--; }
 | 
			
		||||
    void        Reserve(int capacity)               { Buf.reserve(capacity); Map.Data.reserve(capacity); }
 | 
			
		||||
    int         GetSize() const                     { return Buf.Size; }
 | 
			
		||||
 | 
			
		||||
    // To iterate a ImPool: for (int n = 0; n < pool.GetMapSize(); n++) if (T* t = pool.TryGetMapData(n)) { ... }
 | 
			
		||||
    // Can be avoided if you know .Remove() has never been called on the pool, or AliveCount == GetMapSize()
 | 
			
		||||
    int         GetAliveCount() const               { return AliveCount; }      // Number of active/alive items in the pool (for display purpose)
 | 
			
		||||
    int         GetBufSize() const                  { return Buf.Size; }
 | 
			
		||||
    int         GetMapSize() const                  { return Map.Data.Size; }   // It is the map we need iterate to find valid items, since we don't have "alive" storage anywhere
 | 
			
		||||
    T*          TryGetMapData(ImPoolIdx n)          { int idx = Map.Data[n].val_i; if (idx == -1) return NULL; return GetByIndex(idx); }
 | 
			
		||||
#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
 | 
			
		||||
    int         GetSize()                           { return GetMapSize(); } // For ImPlot: should use GetMapSize() from (IMGUI_VERSION_NUM >= 18304)
 | 
			
		||||
#endif
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Helper: ImChunkStream<>
 | 
			
		||||
@@ -2168,7 +2178,7 @@ enum ImGuiTabItemFlagsPrivate_
 | 
			
		||||
    ImGuiTabItemFlags_Preview                   = 1 << 23   // [Docking] Display tab shape for docking preview (height is adjusted slightly to compensate for the yet missing tab bar)
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Storage for one active tab item (sizeof() 32~40 bytes)
 | 
			
		||||
// Storage for one active tab item (sizeof() 48 bytes)
 | 
			
		||||
struct ImGuiTabItem
 | 
			
		||||
{
 | 
			
		||||
    ImGuiID             ID;
 | 
			
		||||
@@ -2179,12 +2189,12 @@ struct ImGuiTabItem
 | 
			
		||||
    float               Offset;                 // Position relative to beginning of tab
 | 
			
		||||
    float               Width;                  // Width currently displayed
 | 
			
		||||
    float               ContentWidth;           // Width of label, stored during BeginTabItem() call
 | 
			
		||||
    ImS16               NameOffset;             // When Window==NULL, offset to name within parent ImGuiTabBar::TabsNames
 | 
			
		||||
    ImS32               NameOffset;             // When Window==NULL, offset to name within parent ImGuiTabBar::TabsNames
 | 
			
		||||
    ImS16               BeginOrder;             // BeginTabItem() order, used to re-order tabs after toggling ImGuiTabBarFlags_Reorderable
 | 
			
		||||
    ImS16               IndexDuringLayout;      // Index only used during TabBarLayout()
 | 
			
		||||
    bool                WantClose;              // Marked as closed by SetTabItemClosed()
 | 
			
		||||
 | 
			
		||||
    ImGuiTabItem()      { memset(this, 0, sizeof(*this)); LastFrameVisible = LastFrameSelected = -1; NameOffset = BeginOrder = IndexDuringLayout = -1; }
 | 
			
		||||
    ImGuiTabItem()      { memset(this, 0, sizeof(*this)); LastFrameVisible = LastFrameSelected = -1; NameOffset = -1; BeginOrder = IndexDuringLayout = -1; }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Storage for a tab bar (sizeof() 152 bytes)
 | 
			
		||||
@@ -2228,7 +2238,7 @@ struct IMGUI_API ImGuiTabBar
 | 
			
		||||
    {
 | 
			
		||||
        if (tab->Window)
 | 
			
		||||
            return tab->Window->Name;
 | 
			
		||||
        IM_ASSERT(tab->NameOffset != -1 && (int)tab->NameOffset < TabsNames.Buf.Size);
 | 
			
		||||
        IM_ASSERT(tab->NameOffset != -1 && tab->NameOffset < TabsNames.Buf.Size);
 | 
			
		||||
        return TabsNames.Buf.Data + tab->NameOffset;
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
@@ -2507,7 +2517,6 @@ namespace ImGui
 | 
			
		||||
    IMGUI_API bool          IsWindowChildOf(ImGuiWindow* window, ImGuiWindow* potential_parent);
 | 
			
		||||
    IMGUI_API bool          IsWindowAbove(ImGuiWindow* potential_above, ImGuiWindow* potential_below);
 | 
			
		||||
    IMGUI_API bool          IsWindowNavFocusable(ImGuiWindow* window);
 | 
			
		||||
    IMGUI_API ImRect        GetWindowAllowedExtentRect(ImGuiWindow* window);
 | 
			
		||||
    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);
 | 
			
		||||
@@ -2621,11 +2630,15 @@ namespace ImGui
 | 
			
		||||
    IMGUI_API bool          IsPopupOpen(ImGuiID id, ImGuiPopupFlags popup_flags);
 | 
			
		||||
    IMGUI_API bool          BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_flags);
 | 
			
		||||
    IMGUI_API void          BeginTooltipEx(ImGuiWindowFlags extra_flags, ImGuiTooltipFlags tooltip_flags);
 | 
			
		||||
    IMGUI_API ImRect        GetPopupAllowedExtentRect(ImGuiWindow* window);
 | 
			
		||||
    IMGUI_API ImGuiWindow*  GetTopMostPopupModal();
 | 
			
		||||
    IMGUI_API ImVec2        FindBestWindowPosForPopup(ImGuiWindow* window);
 | 
			
		||||
    IMGUI_API ImVec2        FindBestWindowPosForPopupEx(const ImVec2& ref_pos, const ImVec2& size, ImGuiDir* last_dir, const ImRect& r_outer, const ImRect& r_avoid, ImGuiPopupPositionPolicy policy);
 | 
			
		||||
    IMGUI_API bool          BeginViewportSideBar(const char* name, ImGuiViewport* viewport, ImGuiDir dir, float size, ImGuiWindowFlags window_flags);
 | 
			
		||||
 | 
			
		||||
    // Combos
 | 
			
		||||
    IMGUI_API bool          BeginComboPopup(ImGuiID popup_id, const ImRect& bb, ImGuiComboFlags flags);
 | 
			
		||||
 | 
			
		||||
    // Gamepad/Keyboard Navigation
 | 
			
		||||
    IMGUI_API void          NavInitWindow(ImGuiWindow* window, bool force_reinit);
 | 
			
		||||
    IMGUI_API bool          NavMoveRequestButNoResultYet();
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user