UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
Clipping.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"
7#include "Layout/SlateRect.h"
9#include "Clipping.generated.h"
10
18UENUM(BlueprintType)
20{
24 Inherit,
35 ClipToBoundsWithoutIntersecting UMETA(DisplayName = "Clip To Bounds - Without Intersecting (Advanced)"),
42 ClipToBoundsAlways UMETA(DisplayName = "Clip To Bounds - Always (Advanced)"),
53 OnDemand UMETA(DisplayName = "On Demand (Advanced)")
54};
55
56
61{
62public:
63
68
71 SLATECORE_API explicit FSlateClippingZone(const FGeometry& BoundingGeometry);
75
77 inline bool GetShouldIntersectParent() const
78 {
79 return bIntersect;
80 }
81
83 inline void SetShouldIntersectParent(bool bValue)
84 {
85 bIntersect = bValue;
86 }
87
89 inline bool GetAlwaysClip() const
90 {
91 return bAlwaysClip;
92 }
93
95 inline void SetAlwaysClip(bool bValue)
96 {
97 bAlwaysClip = bValue;
98 }
99
101 inline bool IsAxisAligned() const
102 {
103 return bIsAxisAligned;
104 }
105
110 inline bool HasZeroArea() const
111 {
112 if (bIsAxisAligned)
113 {
116 }
117
118 return false;
119 }
120
123
129
134
136 {
137 return bIsAxisAligned == Other.bIsAxisAligned &&
138 bIntersect == Other.bIntersect &&
139 bAlwaysClip == Other.bAlwaysClip &&
140 TopLeft == Other.TopLeft &&
141 TopRight == Other.TopRight &&
142 BottomLeft == Other.BottomLeft &&
143 BottomRight == Other.BottomRight;
144 }
145
153
155 {
156 FSlateClippingZone Absolute(TopLeft + WindowOffset, TopRight + WindowOffset, BottomLeft + WindowOffset, BottomRight + WindowOffset);
157 Absolute.bIsAxisAligned = bIsAxisAligned;
158 Absolute.bIntersect = bIntersect;
159 Absolute.bAlwaysClip = bAlwaysClip;
160
161 return Absolute;
162 }
163private:
165
166private:
168 uint8 bIsAxisAligned : 1;
170 uint8 bIntersect : 1;
172 uint8 bAlwaysClip : 1;
173
175 {
176 return Zone.ComputeHash();
177 }
178};
179
180template<> struct TIsPODType<FSlateClippingZone> { enum { Value = true }; };
181
186{
187 Scissor,
188 Stencil
189};
190
195{
196 None = 0,
198 AlwaysClip = 1 << 0
199};
200
202
203
207{
208public:
210
212 SLATECORE_API bool IsPointInside(const UE::Slate::FDeprecateVector2DParameter& Point) const;
213
214#if WITH_SLATE_DEBUGGING
216 inline void SetDebuggingStateIndex(int32 InStateIndex) const
217 {
220 }
221#endif
222
224
225 inline bool GetShouldIntersectParent() const
226 {
227 if (GetClippingMethod() == EClippingMethod::Scissor)
228 {
229 return ScissorRect->GetShouldIntersectParent();
230 }
231 else
232 {
233 for (const FSlateClippingZone& Stencil : StencilQuads)
234 {
235 if (!Stencil.GetShouldIntersectParent())
236 {
237 return false;
238 }
239 }
240 }
241
242 return true;
243 }
244
250 {
251 return ScissorRect.IsSet() ? EClippingMethod::Scissor : EClippingMethod::Stencil;
252 }
253
258 inline bool HasZeroArea() const
259 {
260 if (ScissorRect.IsSet())
261 {
262 return ScissorRect->HasZeroArea();
263 }
264
265 // Assume that stenciled clipping state has some area, don't bother computing it.
266 return false;
267 }
268
270 {
271 return Flags == Other.Flags &&
272 ScissorRect == Other.ScissorRect &&
273 StencilQuads == Other.StencilQuads;
274 }
275
276public:
279
282
283private:
284
287
288#if WITH_SLATE_DEBUGGING
292#endif
293};
294
296{
297public:
299 : CachedClipState(nullptr)
300 , PrecachedClipIndex(INDEX_NONE)
301 {}
302
303 int32 GetPrecachedClipIndex() const { return PrecachedClipIndex; }
304 const FSlateClippingState* GetCachedClipState() const { return CachedClipState; }
305
307 {
308 return CachedClipState == Other.CachedClipState && PrecachedClipIndex == Other.PrecachedClipIndex;
309 }
310
312 {
313 PrecachedClipIndex = InClipIndex;
314 }
315
317 {
318 CachedClipState = CachedState;
319 PrecachedClipIndex = INDEX_NONE;
320 }
321private:
322 const FSlateClippingState* CachedClipState;
323 int32 PrecachedClipIndex;
324
325};
326
327
337
338
343{
344public:
346
351 const TArray<int32>& GetClippingStack() const { return ClippingStack; }
353 SLATECORE_API void PopClip();
355 int32 GetClippingIndexAtStackIndex(int32 StackIndex) const { return ClippingStack.IsValidIndex(StackIndex) ? ClippingStack[StackIndex] : INDEX_NONE; }
356 int32 GetStackDepth() const { return ClippingStack.Num(); }
358
360
361private:
362
363 SLATECORE_API FSlateClippingState CreateClippingState(const FSlateClippingZone& InClipRect) const;
364
365private:
367 TArray< int32 > ClippingStack;
368
370 TArray< FSlateClippingState > ClippingStates;
371};
EClippingMethod
Definition Clipping.h:186
EWidgetClipping
Definition Clipping.h:20
EClippingFlags
Definition Clipping.h:195
uint32 GFrameNumber
Definition CoreGlobals.cpp:425
@ INDEX_NONE
Definition CoreMiscDefines.h:150
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
TSharedRef< InObjectType, InMode > MakeShared(InArgTypes &&... Args)
Definition SharedPointer.h:2009
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
constexpr bool EnumHasAllFlags(Enum Flags, Enum Contains)
Definition EnumClassFlags.h:28
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
#define UENUM(...)
Definition ObjectMacros.h:749
#define Absolute(a)
Definition Predicates.inl:150
ESPMode
Definition SharedPointerFwd.h:12
constexpr uint32 HashCombine(uint32 A, uint32 C)
Definition TypeHash.h:36
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Clipping.h:329
FSlateCachedClipState(const FSlateClippingState &InState)
Definition Clipping.h:331
TSharedRef< FSlateClippingState, ESPMode::ThreadSafe > ClippingState
Definition Clipping.h:335
Definition Clipping.h:343
SLATECORE_API void PopToStackIndex(int32 Index)
Definition Clipping.cpp:362
SLATECORE_API TOptional< FSlateClippingState > GetActiveClippingState() const
Definition Clipping.cpp:328
SLATECORE_API const FSlateClippingState * GetPreviousClippingState(bool bWillIntersectWithParent) const
Definition Clipping.cpp:236
SLATECORE_API int32 PushClip(const FSlateClippingZone &InClippingZone)
Definition Clipping.cpp:305
const TArray< int32 > & GetClippingStack() const
Definition Clipping.h:351
SLATECORE_API const TArray< FSlateClippingState > & GetClippingStates() const
Definition Clipping.cpp:339
int32 GetStackDepth() const
Definition Clipping.h:356
SLATECORE_API void PopClip()
Definition Clipping.cpp:344
SLATECORE_API FSlateClippingManager()
Definition Clipping.cpp:232
SLATECORE_API void ResetClippingState()
Definition Clipping.cpp:356
SLATECORE_API int32 GetClippingIndex() const
Definition Clipping.cpp:323
int32 GetClippingIndexAtStackIndex(int32 StackIndex) const
Definition Clipping.h:355
SLATECORE_API int32 PushClippingState(const FSlateClippingState &InClipState)
Definition Clipping.cpp:310
Definition Clipping.h:207
bool operator==(const FSlateClippingState &Other) const
Definition Clipping.h:269
bool HasZeroArea() const
Definition Clipping.h:258
EClippingMethod GetClippingMethod() const
Definition Clipping.h:249
bool GetShouldIntersectParent() const
Definition Clipping.h:225
bool GetAlwaysClip() const
Definition Clipping.h:223
TArray< FSlateClippingZone > StencilQuads
Definition Clipping.h:278
TOptional< FSlateClippingZone > ScissorRect
Definition Clipping.h:281
Definition Clipping.h:61
FSlateClippingZone ConvertRelativeToAbsolute(const UE::Slate::FDeprecateVector2DParameter &WindowOffset) const
Definition Clipping.h:154
uint32 ComputeHash() const
Definition Clipping.h:146
bool GetAlwaysClip() const
Definition Clipping.h:89
SLATECORE_API FSlateClippingZone Intersect(const FSlateClippingZone &Other) const
Definition Clipping.cpp:126
FVector2f BottomLeft
Definition Clipping.h:66
void SetAlwaysClip(bool bValue)
Definition Clipping.h:95
bool IsAxisAligned() const
Definition Clipping.h:101
SLATECORE_API bool IsPointInside(const UE::Slate::FDeprecateVector2DParameter &Point) const
Definition Clipping.cpp:183
bool operator==(const FSlateClippingZone &Other) const
Definition Clipping.h:135
FSlateClippingZone()
Definition Clipping.h:74
FVector2f BottomRight
Definition Clipping.h:67
void SetShouldIntersectParent(bool bValue)
Definition Clipping.h:83
SLATECORE_API FSlateRect GetBoundingBox() const
Definition Clipping.cpp:147
bool HasZeroArea() const
Definition Clipping.h:110
bool GetShouldIntersectParent() const
Definition Clipping.h:77
friend uint32 GetTypeHash(const FSlateClippingZone &Zone)
Definition Clipping.h:174
FVector2f TopRight
Definition Clipping.h:65
FVector2f TopLeft
Definition Clipping.h:64
Definition SlateRect.h:26
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_NODEBUG UE_FORCEINLINE_HINT bool IsValidIndex(SizeType Index) const
Definition Array.h:1122
Definition SharedPointer.h:153
U16 Index
Definition radfft.cpp:71
Definition Clipping.h:296
bool operator==(const FClipStateHandle &Other) const
Definition Clipping.h:306
const FSlateClippingState * GetCachedClipState() const
Definition Clipping.h:304
FClipStateHandle()
Definition Clipping.h:298
void SetCachedClipState(const FSlateClippingState *CachedState)
Definition Clipping.h:316
void SetPreCachedClipIndex(int32 InClipIndex)
Definition Clipping.h:311
int32 GetPrecachedClipIndex() const
Definition Clipping.h:303
Definition Geometry.h:40
static UE_FORCEINLINE_HINT bool IsNearlyZero(float Value, float ErrorTolerance=UE_SMALL_NUMBER)
Definition UnrealMathUtility.h:407
Definition PaintGeometry.h:24
Definition RenderingCommon.h:379
Definition IsPODType.h:12
@ Value
Definition IsPODType.h:13
Definition Optional.h:131
Definition SlateVector2.h:485