UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
WidgetProxy.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "Types/PaintArgs.h"
8#include "Misc/MemStack.h"
13#include "Layout/Clipping.h"
16#include <type_traits>
17
18class SWidget;
19class FPaintArgs;
25
27
28#define UE_SLATE_WITH_WIDGETPROXY_WEAKPTR 0
29#define UE_SLATE_VERIFY_WIDGETPROXY_WEAKPTR_STALE 0
30#define UE_SLATE_WITH_WIDGETPROXY_WIDGETTYPE 0
31#define UE_SLATE_WITH_INVALIDATIONWIDGETLIST_DEBUGGING !(UE_BUILD_SHIPPING || UE_BUILD_TEST) && WITH_SLATE_DEBUGGING
32
33
35{
36public:
56
58 bool IsVisible() const { return bAncestorsVisible && bVisible; }
60 bool AreAncestorsVisible() const { return bAncestorsVisible; }
62 bool IsVisibleDirectly() const { return bVisible; }
64 bool IsCollapsed() const { return bAncestorCollapse || bCollapse; }
66 bool IsCollapseIndirectly() const { return bAncestorCollapse; }
68 bool IsCollapseDirectly() const { return bCollapse; }
69
74
80
83 {
85 Result.bAncestorsVisible = bAncestorsVisible;
86 Result.bVisible = bAncestorsVisible;
87 Result.bCollapse = bAncestorCollapse;
88 Result.bAncestorCollapse = bAncestorCollapse;
89 return Result;
90 }
91
94
95private:
96 union
97 {
98 struct
99 {
100 uint8 bAncestorsVisible : 1; // all ancestors are visible
102 uint8 bAncestorCollapse : 1; // at least one ancestor is collapse
105 };
107 };
108};
109static_assert(sizeof(FSlateInvalidationWidgetVisibility) == sizeof(uint8), "FSlateInvalidationWidgetVisibility should be size of uint8");
110
111
113{
114public:
116
130
135 FUpdateResult Update(const FPaintArgs& PaintArgs, FSlateWindowElementList& OutDrawElements);
136
139
141
142#if UE_SLATE_WITH_WIDGETPROXY_WEAKPTR
143 SWidget* GetWidget() const
144 {
145#if UE_SLATE_VERIFY_WIDGETPROXY_WEAKPTR_STALE
146 ensureAlways(!Widget.IsStale()); // Widget.Object != nullptr && !Widget.WeakRerenceCount.IsValid()
147#endif
148 return Widget.Pin().Get();
149 }
151 void ResetWidget() { Widget.Reset(); }
152 bool IsSameWidget(const SWidget* InWidget) const
153 {
154#if UE_SLATE_VERIFY_WIDGETPROXY_WEAKPTR_STALE
155 return (InWidget == Widget.Pin().Get()) || (Widget.IsStale() && GetTypeHash(Widget) == GetTypeHash(InWidget));
156#else
157 return InWidget == Widget.Pin().Get();
158#endif
159 }
160#else
161 SWidget* GetWidget() const { return Widget; }
162 // ForceNoInline to workaround PGO FastGen issue
164 void ResetWidget() { Widget = nullptr; }
165 bool IsSameWidget(const SWidget* InWidget) const { return InWidget == Widget; }
166#endif
167
168private:
169 FUpdateResult Repaint(const FPaintArgs& PaintArgs, FSlateWindowElementList& OutDrawElements) const;
170
171private:
172#if UE_SLATE_WITH_WIDGETPROXY_WEAKPTR
173 TWeakPtr<SWidget> Widget;
174#else
176#endif
177
178#if UE_SLATE_WITH_WIDGETPROXY_WIDGETTYPE
179 FName WidgetType;
180#endif
181
182public:
188
189 union
190 {
191 struct
192 {
193 public:
204 };
206 };
207
208#if UE_SLATE_WITH_INVALIDATIONWIDGETLIST_DEBUGGING
209 union
210 {
211 struct
212 {
213 public:
221 };
223 };
224#endif
225};
226
227#if !UE_SLATE_WITH_WIDGETPROXY_WIDGETTYPE
228static_assert(sizeof(FWidgetProxy) <= 32, "FWidgetProxy should be 32 bytes");
229#endif
230
231#if !UE_SLATE_WITH_WIDGETPROXY_WEAKPTR
232static_assert(std::is_trivially_destructible_v<FWidgetProxy>, "FWidgetProxy must be trivially destructible");
233template <> struct TIsPODType<FWidgetProxy> { enum { Value = true }; };
234#endif
235
275
277{
278 friend class SWidget;
281
282public:
286
288 SLATECORE_API bool IsValid(const SWidget& Widget) const;
289 SLATECORE_API bool IsValid(const SWidget* Widget) const;
290
291 FSlateInvalidationRootHandle GetInvalidationRootHandle() const { return InvalidationRootHandle; }
292
293 FSlateInvalidationWidgetIndex GetWidgetIndex() const { return WidgetIndex; }
294 FSlateInvalidationWidgetSortOrder GetWidgetSortOrder() const { return WidgetSortOrder; }
295
299
301 const FWidgetProxy& GetProxy() const;
302
303private:
304 FSlateInvalidationRoot* GetInvalidationRoot_NoCheck() const { return InvalidationRootHandle.Advanced_GetInvalidationRootNoCheck(); }
305
306 void MarkWidgetDirty_NoCheck(FWidgetProxy& Proxy);
307 void MarkWidgetDirty_NoCheck(EInvalidateWidgetReason InvalidateReason);
309
310private:
313
314private:
316 FSlateInvalidationRootHandle InvalidationRootHandle;
320 FSlateInvalidationWidgetSortOrder WidgetSortOrder;
321};
#define FORCENOINLINE
Definition AndroidPlatform.h:142
#define ensureAlways( InExpression)
Definition AssertionMacros.h:466
@ INDEX_NONE
Definition CoreMiscDefines.h:150
FPlatformTypes::int8 int8
An 8-bit signed integer.
Definition Platform.h:1121
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
return true
Definition ExternalRpcRegistry.cpp:601
EFlowDirection
Definition FlowDirection.h:17
EInvalidateWidgetReason
Definition InvalidateWidgetReason.h:14
EWidgetPixelSnapping
Definition WidgetPixelSnapping.h:15
EWidgetUpdateFlags
Definition WidgetUpdateFlags.h:9
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition NameTypes.h:617
Definition PaintArgs.h:23
Definition SlateInvalidationRoot.h:77
Definition SlateInvalidationWidgetList.h:20
Definition SlateInvalidationWidgetHeap.h:179
Definition SlateRect.h:26
Definition DrawElements.h:220
Definition WidgetProxy.h:277
SLATECORE_API FSlateInvalidationWidgetVisibility GetWidgetVisibility(const SWidget *Widget) const
Definition WidgetProxy.cpp:332
SLATECORE_API bool HasAnyInvalidationReason(const SWidget *Widget, EInvalidateWidgetReason Reason) const
Definition WidgetProxy.cpp:350
SLATECORE_API bool HasAllInvalidationReason(const SWidget *Widget, EInvalidateWidgetReason Reason) const
Definition WidgetProxy.cpp:341
FSlateInvalidationRootHandle GetInvalidationRootHandle() const
Definition WidgetProxy.h:291
FSlateInvalidationWidgetIndex GetWidgetIndex() const
Definition WidgetProxy.h:293
FWidgetProxyHandle()
Definition WidgetProxy.h:283
FWidgetProxy & GetProxy()
Definition WidgetProxy.cpp:359
FSlateInvalidationWidgetSortOrder GetWidgetSortOrder() const
Definition WidgetProxy.h:294
Definition WidgetProxy.h:113
FSlateInvalidationWidgetIndex LeafMostChildIndex
Definition WidgetProxy.h:185
EInvalidateWidgetReason CurrentInvalidateReason
Definition WidgetProxy.h:186
uint8 PrivateFlags
Definition WidgetProxy.h:205
FSlateInvalidationWidgetVisibility Visibility
Definition WidgetProxy.h:187
uint8 bContainedByWidgetPostHeap
Definition WidgetProxy.h:197
void ResetWidget()
Definition WidgetProxy.h:164
void MarkProxyUpdatedThisFrame(FSlateInvalidationWidgetPostHeap &UpdateList)
Definition WidgetProxy.cpp:229
uint8 bIsInvalidationRoot
Definition WidgetProxy.h:201
uint8 bContainedByWidgetPrepassList
Definition WidgetProxy.h:199
FORCENOINLINE TSharedPtr< SWidget > GetWidgetAsShared() const
Definition WidgetProxy.cpp:41
bool ProcessPostInvalidation(FSlateInvalidationWidgetPostHeap &UpdateList, FSlateInvalidationWidgetList &FastPathWidgetList, FSlateInvalidationRoot &Root)
Definition WidgetProxy.cpp:189
bool IsSameWidget(const SWidget *InWidget) const
Definition WidgetProxy.h:165
FSlateInvalidationWidgetIndex ParentIndex
Definition WidgetProxy.h:184
uint8 bContainedByWidgetPreHeap
Definition WidgetProxy.h:195
uint8 bIsVolatilePrepass
Definition WidgetProxy.h:203
SWidget * GetWidget() const
Definition WidgetProxy.h:161
void ProcessLayoutInvalidation(FSlateInvalidationWidgetPostHeap &UpdateList, FSlateInvalidationWidgetList &FastPathWidgetList, FSlateInvalidationRoot &Root)
Definition WidgetProxy.cpp:112
FSlateInvalidationWidgetIndex Index
Definition WidgetProxy.h:183
Definition WidgetStyle.h:15
Definition SWidget.h:165
Definition SharedPointer.h:692
Definition SharedPointer.h:1295
uint32 GetTypeHash(const FKey &Key)
Definition BlackboardKey.h:35
@ false
Definition radaudio_common.h:23
Definition Visibility.h:12
Definition Geometry.h:40
Definition DrawElements.h:106
Definition SlateInvalidationRootHandle.h:10
FSlateInvalidationRoot * Advanced_GetInvalidationRootNoCheck() const
Definition SlateInvalidationRootHandle.h:28
Definition SlateInvalidationWidgetIndex.h:13
Definition SlateInvalidationWidgetSortOrder.h:17
Definition WidgetProxy.h:35
uint8 FlagPadding
Definition WidgetProxy.h:104
FSlateInvalidationWidgetVisibility & operator=(const FSlateInvalidationWidgetVisibility &Other)
Definition WidgetProxy.h:55
bool operator!=(FSlateInvalidationWidgetVisibility Other) const
Definition WidgetProxy.h:93
bool IsCollapseDirectly() const
Definition WidgetProxy.h:68
bool IsCollapseIndirectly() const
Definition WidgetProxy.h:66
uint8 bAncestorCollapse
Definition WidgetProxy.h:102
void SetVisibility(FSlateInvalidationWidgetVisibility ParentFlags, EVisibility InVisibility)
Definition WidgetProxy.h:70
bool operator==(FSlateInvalidationWidgetVisibility Other) const
Definition WidgetProxy.h:92
uint8 bCollapse
Definition WidgetProxy.h:103
FSlateInvalidationWidgetVisibility(FSlateInvalidationWidgetVisibility ParentFlags, EVisibility InVisibility)
Definition WidgetProxy.h:47
uint8 bVisible
Definition WidgetProxy.h:101
bool AreAncestorsVisible() const
Definition WidgetProxy.h:60
FSlateInvalidationWidgetVisibility(EVisibility InVisibility)
Definition WidgetProxy.h:40
void SetAncestorsVisibility(FSlateInvalidationWidgetVisibility ParentFlags)
Definition WidgetProxy.h:75
bool IsVisible() const
Definition WidgetProxy.h:58
bool IsVisibleDirectly() const
Definition WidgetProxy.h:62
FSlateInvalidationWidgetVisibility(const FSlateInvalidationWidgetVisibility &Other)
Definition WidgetProxy.h:54
uint8 bAncestorsVisible
Definition WidgetProxy.h:100
FSlateInvalidationWidgetVisibility()
Definition WidgetProxy.h:37
FSlateInvalidationWidgetVisibility MimicAsParent() const
Definition WidgetProxy.h:82
uint8 Flags
Definition WidgetProxy.h:106
bool IsCollapsed() const
Definition WidgetProxy.h:64
Definition WidgetProxy.h:241
uint8 bParentEnabled
Definition WidgetProxy.h:268
FGeometry AllottedGeometry
Definition WidgetProxy.h:257
int32 LayerId
Definition WidgetProxy.h:263
EWidgetPixelSnapping InitialPixelSnappingMethod
Definition WidgetProxy.h:267
uint8 bInheritedHittestability
Definition WidgetProxy.h:269
FSlateRect CullingBounds
Definition WidgetProxy.h:259
FWidgetStyle WidgetStyle
Definition WidgetProxy.h:260
static const FSlateWidgetPersistentState NoState
Definition WidgetProxy.h:273
FGeometry DesktopGeometry
Definition WidgetProxy.h:258
FSlateWidgetPersistentState()
Definition WidgetProxy.h:242
TOptional< FSlateClippingState > InitialClipState
Definition WidgetProxy.h:256
int32 OutgoingLayerId
Definition WidgetProxy.h:264
uint8 bDeferredPainting
Definition WidgetProxy.h:270
FSlateCachedElementsHandle CachedElementHandle
Definition WidgetProxy.h:261
TWeakPtr< SWidget > PaintParent
Definition WidgetProxy.h:255
EFlowDirection IncomingFlowDirection
Definition WidgetProxy.h:266
uint8 bIsInGameLayer
Definition WidgetProxy.h:271
int8 IncomingUserIndex
Definition WidgetProxy.h:265
Definition WidgetProxy.h:118
int32 PreviousOutgoingLayerId
Definition WidgetProxy.h:126
bool bPainted
Definition WidgetProxy.h:128
FUpdateResult(int32 InPreviousOutgoingLayerId, int32 InNewOutgoingLayerId)
Definition WidgetProxy.h:120
int32 NewOutgoingLayerId
Definition WidgetProxy.h:127
Definition IsPODType.h:12
@ Value
Definition IsPODType.h:13
Definition Optional.h:131