UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
UserWidgetPool.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "UserWidget.h"
6#include "WidgetTree.h"
8
9#include "UserWidgetPool.generated.h"
10
12
25USTRUCT()
27{
29
30public:
31 FUserWidgetPool() = default;
34
36 UMG_API void SetWorld(UWorld* OwningWorld);
37
43 UMG_API void SetDefaultPlayerController(APlayerController* InDefaultPlayerController);
44
46 UMG_API void RebuildWidgets();
47
50
51 bool IsInitialized() const { return OwningWidget.IsValid() || OwningWorld.IsValid(); }
52 const TArray<UUserWidget*>& GetActiveWidgets() const { return ActiveWidgets; }
53
58 template <typename UserWidgetT = UUserWidget>
60 {
61 // Just make a normal SObjectWidget, same as would happen in TakeWidget
62 return AddActiveWidgetInternal(WidgetClass,
64 {
66 });
67 }
68
70
72 template <typename UserWidgetT = UUserWidget>
74 {
75 return AddActiveWidgetInternal(WidgetClass, ConstructWidgetFunc);
76 }
77
79 UMG_API void Release(UUserWidget* Widget, bool bReleaseSlate = false);
80
83
85 UMG_API void ReleaseAll(bool bReleaseSlate = false);
86
88 UMG_API void ResetPool();
89
91 UMG_API void ReleaseInactiveSlateResources();
92
93 UE_DEPRECATED(4.24, "Use ReleaseAllSlateResources instead.")
94 void ReleaseSlateResources() { ReleaseAllSlateResources(); }
95
97 UMG_API void ReleaseAllSlateResources();
98
99private:
100 template <typename UserWidgetT = UUserWidget>
101 UserWidgetT* AddActiveWidgetInternal(TSubclassOf<UserWidgetT> WidgetClass, WidgetConstructFunc ConstructWidgetFunc)
102 {
103 if (!ensure(IsInitialized()) || !WidgetClass)
104 {
105 return nullptr;
106 }
107
108 UUserWidget* WidgetInstance = nullptr;
109 for (UUserWidget* InactiveWidget : InactiveWidgets)
110 {
111 if (InactiveWidget->GetClass() == WidgetClass)
112 {
114 InactiveWidgets.RemoveSingleSwap(InactiveWidget);
115 break;
116 }
117 }
118
119 UWidget* OwningWidgetPtr = OwningWidget.Get();
120 if (!WidgetInstance)
121 {
122 if (OwningWidgetPtr)
123 {
125 }
126 else if (APlayerController* PlayerControllerPtr = DefaultPlayerController.Get())
127 {
129 }
130 else
131 {
132 WidgetInstance = CreateWidget(OwningWorld.Get(), WidgetClass);
133 }
134 }
135
136 if (WidgetInstance)
137 {
138 ActiveWidgets.Add(WidgetInstance);
139
140 // For pools owned by a widget, we never want to construct Slate widgets before the owning widget itself has built any Slate
141 if (!OwningWidgetPtr || OwningWidgetPtr->GetCachedWidget().IsValid())
142 {
143 TSharedPtr<SWidget>& CachedSlateWidget = CachedSlateByWidgetObject.FindOrAdd(WidgetInstance);
144 if (!CachedSlateWidget.IsValid())
145 {
147 }
148 }
149 }
150
152 }
153
155 TArray<TObjectPtr<UUserWidget>> ActiveWidgets;
156
158 TArray<TObjectPtr<UUserWidget>> InactiveWidgets;
159
160 TWeakObjectPtr<UWidget> OwningWidget;
161 TWeakObjectPtr<UWorld> OwningWorld;
162 TWeakObjectPtr<APlayerController> DefaultPlayerController;
163 TMap<UUserWidget*, TSharedPtr<SWidget>> CachedSlateByWidgetObject;
164};
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define ensure( InExpression)
Definition AssertionMacros.h:464
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define SNew(WidgetType,...)
Definition DeclarativeSyntaxSupport.h:37
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define USTRUCT(...)
Definition ObjectMacros.h:746
WidgetT * CreateWidget(OwnerType OwningObject, TSubclassOf< UUserWidget > UserWidgetClass=WidgetT::StaticClass(), FName WidgetName=NAME_None)
Definition UserWidget.h:1811
static ENGINE_API void AddReferencedObjects(UObject *InThis, FReferenceCollector &Collector)
Definition Actor.cpp:567
Definition PlayerController.h:261
Definition UObjectGlobals.h:2492
Definition SObjectWidget.h:31
Definition Array.h:670
Definition AssetRegistryState.h:50
Definition UnrealString.h.inl:34
Definition SharedPointer.h:692
Definition SharedPointer.h:153
Definition SubclassOf.h:30
Definition UserWidget.h:284
Definition Widget.h:217
Definition World.h:918
Definition UserWidgetPool.h:27
UserWidgetT * GetOrCreateInstance(TSubclassOf< UserWidgetT > WidgetClass)
Definition UserWidgetPool.h:59
FUserWidgetPool()=default
UserWidgetT * GetOrCreateInstance(TSubclassOf< UserWidgetT > WidgetClass, WidgetConstructFunc ConstructWidgetFunc)
Definition UserWidgetPool.h:73
const TArray< UUserWidget * > & GetActiveWidgets() const
Definition UserWidgetPool.h:52
bool IsInitialized() const
Definition UserWidgetPool.h:51
Definition WeakObjectPtrTemplates.h:25