UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SlateAttributeBase.inl
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include <type_traits>
6
9{
18 template<typename ContainerType, typename InObjectType, typename InInvalidationReasonPredicate, typename InComparePredicateType, ESlateAttributeType InAttributeType>
20 {
21 public:
22 template<typename AttributeMemberType>
24
29
31 static constexpr bool HasDefinedInvalidationReason = !std::is_same<InInvalidationReasonPredicate, FSlateAttributeNoInvalidationReason>::value;
32
33 static_assert(std::is_same<ContainerType, SWidget>::value || std::is_same<ContainerType, ISlateAttributeContainer>::value, "The SlateAttribute container is not supported.");
34
35 static EInvalidateWidgetReason GetInvalidationReason(const SWidget& Widget) { return FInvalidationReasonPredicate::GetInvalidationReason(Widget); }
36 static EInvalidateWidgetReason GetInvalidationReason(const ISlateAttributeContainer& Container) { return FInvalidationReasonPredicate::GetInvalidationReason(Container.GetContainerWidget()); }
37 static bool IdenticalTo(const SWidget& Widget, const ObjectType& Lhs, const ObjectType& Rhs) { return FComparePredicate::IdenticalTo(Widget, Lhs, Rhs); }
38 static bool IdenticalTo(const ISlateAttributeContainer& Container, const ObjectType& Lhs, const ObjectType& Rhs) { return FComparePredicate::IdenticalTo(Container.GetContainerWidget(), Lhs, Rhs); }
39
40 private:
41 void VerifyOwningWidget(const SWidget& Widget) const
42 {
43#if UE_SLATE_WITH_MEMBER_ATTRIBUTE_DEBUGGING
45 TEXT("The Owning Widget is not the same as used at construction. This will cause bad memory access."));
46#endif
47 }
48
49 void VerifyOwningWidget(const ISlateAttributeContainer& Widget) const
50 {
51 }
52
53 void VerifyNan() const
54 {
55#if UE_SLATE_WITH_ATTRIBUTE_NAN_DIAGNOSTIC
56 if constexpr (std::is_same<float, InObjectType>::value)
57 {
58 ensureMsgf(FMath::IsFinite(Value), TEXT("Value contains a NaN. Initialize your float properly"));
59 }
60 else if constexpr (std::is_same<double, InObjectType>::value)
61 {
62 ensureMsgf(FMath::IsFinite(Value), TEXT("Value contains a NaN. Initialize your double properly"));
63 }
64 else if constexpr (std::is_same<FVector2f, InObjectType>::value)
65 {
66 ensureMsgf(!Value.ContainsNaN(), TEXT("Value contains a NaN. Initialize your FVector2f properly (see FVector2f::EForceInit)"));
67 }
68 else if constexpr (std::is_same<FVector2d, InObjectType>::value)
69 {
70 ensureMsgf(!Value.ContainsNaN(), TEXT("Value contains a NaN. Initialize your FVector2d properly (see FVector2d::EForceInit)"));
71 }
72 else if constexpr (std::is_same<FVector3f, InObjectType>::value)
73 {
74 ensureMsgf(!Value.ContainsNaN(), TEXT("Value contains a NaN. Initialize your FVector3f properly (see FVector3f::EForceInit)"));
75 }
76 else if constexpr (std::is_same<FVector3d, InObjectType>::value)
77 {
78 ensureMsgf(!Value.ContainsNaN(), TEXT("Value contains a NaN. Initialize your FVector3d properly (see FVector3d::EForceInit)"));
79 }
80 else if constexpr (std::is_same<FVector4f, InObjectType>::value)
81 {
82 ensureMsgf(!Value.ContainsNaN(), TEXT("Value contains a NaN. Initialize your FVector4f properly"));
83 }
84 else if constexpr (std::is_same<FVector4d, InObjectType>::value)
85 {
86 ensureMsgf(!Value.ContainsNaN(), TEXT("Value contains a NaN. Initialize your FVector4d properly"));
87 }
88 else if constexpr (std::is_same<FLinearColor, InObjectType>::value)
89 {
90 ensureMsgf(!FVector4(Value).ContainsNaN(), TEXT("Value contains a NaN. Initialize your FLinearColor properly (see FLinearColor::EForceInit)"));
91 }
92 else if constexpr (std::is_same<FRotator, InObjectType>::value)
93 {
94 ensureMsgf(!Value.ContainsNaN(), TEXT("Value contains a NaN. Initialize your FRotator properly (see FRotator::EForceInit)"));
95 }
96#endif
97 }
98
99 public:
100#if UE_SLATE_WITH_MEMBER_ATTRIBUTE_DEBUGGING
102 : Value()
103 , Debug_OwningWidget(nullptr)
104 {
105 VerifyNan();
106 }
107#else
109 : Value()
110 {
111 VerifyNan();
112 }
113#endif
114
123
132
141
150
159
160 TSlateAttributeBase(SWidget& Widget, const FGetter& Getter, const ObjectType& InitialValue)
161 : Value(InitialValue)
164#endif
165 {
166 VerifyNan();
167 if (Getter.IsBound())
168 {
169 ConstructWrapper(Widget, Getter);
170 }
171 }
172
173 TSlateAttributeBase(SWidget& Widget, const FGetter& Getter, ObjectType&& InitialValue)
174 : Value(MoveTemp(InitialValue))
177#endif
178 {
179 VerifyNan();
180 if (Getter.IsBound())
181 {
182 ConstructWrapper(Widget, Getter);
183 }
184 }
185
186 TSlateAttributeBase(SWidget& Widget, FGetter&& Getter, const ObjectType& InitialValue)
187 : Value(InitialValue)
190#endif
191 {
192 VerifyNan();
193 if (Getter.IsBound())
194 {
195 ConstructWrapper(Widget, MoveTemp(Getter));
196 }
197 }
198
200 : Value(MoveTemp(InitialValue))
203#endif
204 {
205 VerifyNan();
206 if (Getter.IsBound())
207 {
208 ConstructWrapper(Widget, MoveTemp(Getter));
209 }
210 }
211
213 : Value((Attribute.IsSet() && !Attribute.IsBound()) ? Attribute.Get() : InitialValue)
216#endif
217 {
218 VerifyNan();
219 if (Attribute.IsBound())
220 {
221 ConstructWrapper(Widget, Attribute.GetBinding());
222 }
223 }
224
226 : Value((Attribute.IsSet() && !Attribute.IsBound()) ? MoveTemp(Attribute.Steal().template Get<ObjectType>()) : MoveTemp(InitialValue))
229#endif
230 {
231 VerifyNan();
232 if (Attribute.IsBound())
233 {
234 ConstructWrapper(Widget, MoveTemp(Attribute.Steal().template Get<FGetter>()));
235 }
236 }
237
238 public:
240 [[nodiscard]] const ObjectType& Get() const
241 {
242 return Value;
243 }
244
246 void UpdateNow(ContainerType& Widget)
247 {
248 VerifyOwningWidget(Widget);
250 }
251
252 public:
257 bool Set(ContainerType& Widget, const ObjectType& NewValue)
258 {
259 VerifyOwningWidget(Widget);
261
262 const bool bIsIdentical = IdenticalTo(Widget, Value, NewValue);
263 if (!bIsIdentical)
264 {
265 Value = NewValue;
267 }
268 return !bIsIdentical;
269 }
270
275 bool Set(ContainerType& Widget, ObjectType&& NewValue)
276 {
277 VerifyOwningWidget(Widget);
279
280 const bool bIsIdentical = IdenticalTo(Widget, Value, NewValue);
281 if (!bIsIdentical)
282 {
283 Value = MoveTemp(NewValue);
285 }
286 return !bIsIdentical;
287 }
288
289 public:
295 void Bind(ContainerType& Widget, const FGetter& Getter)
296 {
297 VerifyOwningWidget(Widget);
298 if (Getter.IsBound())
299 {
300 AssignBinding(Widget, Getter);
301 }
302 else
303 {
305 }
306 }
307
313 void Bind(ContainerType& Widget, FGetter&& Getter)
314 {
315 VerifyOwningWidget(Widget);
316 if (Getter.IsBound())
317 {
318 AssignBinding(Widget, MoveTemp(Getter));
319 }
320 else
321 {
323 }
324 }
325
332 void Bind(WidgetType& Widget, typename FGetter::template TConstMethodPtr<WidgetType> MethodPtr)
333 {
334 Bind(Widget, FGetter::CreateSP(&Widget, MethodPtr));
335 }
336
351 {
352 VerifyOwningWidget(Widget);
353 if (OtherAttribute.IsBound())
354 {
355 return AssignBinding(Widget, OtherAttribute.GetBinding(), Actions);
356 }
357 else if (OtherAttribute.IsSet())
358 {
359 return Set(Widget, OtherAttribute.Get());
360 }
361 else
362 {
364 return false;
365 }
366 }
367
369 {
370 VerifyOwningWidget(Widget);
371 if (OtherAttribute.IsBound())
372 {
373 return AssignBinding(Widget, MoveTemp(OtherAttribute.Steal().template Get<FGetter>()), Actions);
374 }
375 else if (OtherAttribute.IsSet())
376 {
377 return Set(Widget, MoveTemp(OtherAttribute.Steal().template Get<ObjectType>()));
378 }
379 else
380 {
382 return false;
383 }
384 }
385
387 {
388 VerifyOwningWidget(Widget);
389 if (OtherAttribute.IsBound())
390 {
391 return AssignBinding(Widget, OtherAttribute.GetBinding(), Actions);
392 }
393 else if (OtherAttribute.IsSet())
394 {
395 return Set(Widget, OtherAttribute.Get());
396 }
397 else
398 {
399 return Set(Widget, DefaultValue);
400 }
401 }
402
404 {
405 VerifyOwningWidget(Widget);
406 if (OtherAttribute.IsBound())
407 {
408 return AssignBinding(Widget, MoveTemp(OtherAttribute.Steal().template Get<FGetter>()), Actions);
409 }
410 else if (OtherAttribute.IsSet())
411 {
412 return Set(Widget, MoveTemp(OtherAttribute.Steal().template Get<ObjectType>()));
413 }
414 else
415 {
416 return Set(Widget, DefaultValue);
417 }
418 }
419
421 {
422 VerifyOwningWidget(Widget);
423 if (OtherAttribute.IsBound())
424 {
425 return AssignBinding(Widget, OtherAttribute.GetBinding(), Actions);
426 }
427 else if (OtherAttribute.IsSet())
428 {
429 return Set(Widget, OtherAttribute.Get());
430 }
431 else
432 {
433 return Set(Widget, MoveTemp(DefaultValue));
434 }
435 }
436
438 {
439 VerifyOwningWidget(Widget);
440 if (OtherAttribute.IsBound())
441 {
442 return AssignBinding(Widget, MoveTemp(OtherAttribute.Steal().template Get<FGetter>()), Actions);
443 }
444 else if (OtherAttribute.IsSet())
445 {
446 return Set(Widget, MoveTemp(OtherAttribute.Steal().template Get<ObjectType>()));
447 }
448 else
449 {
450 return Set(Widget, MoveTemp(DefaultValue));
451 }
452 }
453
458 void Unbind(ContainerType& Widget)
459 {
460 VerifyOwningWidget(Widget);
462 }
463
464 public:
466 [[nodiscard]] TAttribute<ObjectType> ToAttribute(const ContainerType& Widget) const
467 {
469 {
470 return TAttribute<ObjectType>::Create(static_cast<FSlateAttributeGetterWrapper<TSlateAttributeBase>*>(Delegate)->GetDelegate());
471 }
472 return TAttribute<ObjectType>(Get());
473 }
474
476 [[nodiscard]] bool IsBound(const ContainerType& Widget) const
477 {
478 VerifyOwningWidget(Widget);
480 }
481
483 [[nodiscard]] bool IdenticalTo(const ContainerType& Widget, const TSlateAttributeBase& Other) const
484 {
485 VerifyOwningWidget(Widget);
489 {
490 if (ThisDelegateHandle.IsValid())
491 {
492 return true;
493 }
494 return IdenticalTo(Widget, Get(), Other.Get());
495 }
496 return false;
497 }
498
500 [[nodiscard]] bool IdenticalTo(const ContainerType& Widget, const TAttribute<ObjectType>& Other) const
501 {
502 VerifyOwningWidget(Widget);
504 if (Other.IsBound())
505 {
506 return Other.GetBinding().GetHandle() == ThisDelegateHandle;
507 }
508 return !ThisDelegateHandle.IsValid() && Other.IsSet() && IdenticalTo(Widget, Get(), Other.Get());
509 }
510
511 private:
512 void ConstructWrapper(ContainerType& Widget, const FGetter& Getter, ESlateAttributeBindAction Actions = UE_SLATE_WITH_ATTRIBUTE_DEFAULT_INITIALIZATION_ACTION)
513 {
514 TUniquePtr<ISlateAttributeGetter> Wrapper = MakeUniqueGetter(*this, Getter);
517 {
519 }
520 }
521
522 void ConstructWrapper(ContainerType& Widget, FGetter&& Getter, ESlateAttributeBindAction Actions = UE_SLATE_WITH_ATTRIBUTE_DEFAULT_INITIALIZATION_ACTION)
523 {
524 TUniquePtr<ISlateAttributeGetter> Wrapper = MakeUniqueGetter(*this, MoveTemp(Getter));
527 {
529 }
530 }
531
532 bool AssignBinding(ContainerType& Widget, const FGetter& Getter, ESlateAttributeBindAction Actions = UE_SLATE_WITH_ATTRIBUTE_DEFAULT_INITIALIZATION_ACTION)
533 {
535 if (PreviousGetterHandle != Getter.GetHandle())
536 {
537 ConstructWrapper(Widget, Getter, Actions);
538 return true;
539 }
540 return false;
541 }
542
543 bool AssignBinding(ContainerType& Widget, FGetter&& Getter, ESlateAttributeBindAction Actions = UE_SLATE_WITH_ATTRIBUTE_DEFAULT_INITIALIZATION_ACTION)
544 {
546 if (PreviousGetterHandle != Getter.GetHandle())
547 {
548 ConstructWrapper(Widget, MoveTemp(Getter), Actions);
549 return true;
550 }
551 return false;
552 }
553
554 private:
555 template<typename SlateAttributeType>
556 class FSlateAttributeGetterWrapper final : public ISlateAttributeGetter
557 {
558 public:
559 using ObjectType = typename SlateAttributeType::ObjectType;
560 using FGetter = typename TAttribute<ObjectType>::FGetter;
561 using FComparePredicate = typename SlateAttributeType::FComparePredicate;
562
563 FSlateAttributeGetterWrapper() = delete;
564 FSlateAttributeGetterWrapper(const FSlateAttributeGetterWrapper&) = delete;
565 FSlateAttributeGetterWrapper& operator= (const FSlateAttributeGetterWrapper&) = delete;
566 virtual ~FSlateAttributeGetterWrapper() = default;
567
568 public:
569 FSlateAttributeGetterWrapper(SlateAttributeType& InOwningAttribute, const FGetter& InGetterDelegate)
570 : Getter(InGetterDelegate)
572 {
573 }
574 FSlateAttributeGetterWrapper(SlateAttributeType& InOwningAttribute, FGetter&& InGetterDelegate)
575 : Getter(MoveTemp(InGetterDelegate))
577 {
578 }
579
580 virtual FUpdateAttributeResult UpdateAttribute(const SWidget& Widget) override
581 {
582 if (Getter.IsBound())
583 {
584 ObjectType NewValue = Getter.Execute();
585
586 const bool bIsIdentical = Attribute->IdenticalTo(Widget, Attribute->Value, NewValue);
587 if (!bIsIdentical)
588 {
589 // Set the value on the widget
590 Attribute->Value = MoveTemp(NewValue);
591 return Attribute->GetInvalidationReason(Widget);
592 }
593 }
594 return FUpdateAttributeResult();
595 }
596
597 virtual const FSlateAttributeBase& GetAttribute() const override
598 {
599 return *Attribute;
600 }
601
602 virtual void SetAttribute(FSlateAttributeBase& InBase) override
603 {
604 Attribute = &static_cast<SlateAttributeType&>(InBase);
605 }
606
607 virtual FDelegateHandle GetDelegateHandle() const override
608 {
609 return Getter.GetHandle();
610 }
611
612 const FGetter& GetDelegate() const
613 {
614 return Getter;
615 }
616
617 private:
619 FGetter Getter;
621 SlateAttributeType* Attribute;
622 };
623
624 private:
625 static TUniquePtr<ISlateAttributeGetter> MakeUniqueGetter(TSlateAttributeBase& Attribute, const FGetter& Getter)
626 {
628 }
629
631 {
633 }
634
635 private:
636 ObjectType Value;
637
638 protected:
639#if UE_SLATE_WITH_MEMBER_ATTRIBUTE_DEBUGGING
641 {
643 }
644
646#endif
647 };
648
649
650} // SlateAttributePrivate
bool ContainsNaN(const TArray< FBoneTransform > &BoneTransforms)
Definition AnimNode_SkeletalControlBase.cpp:119
#define ensureMsgf( InExpression, InFormat,...)
Definition AssertionMacros.h:465
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
#define TEXT(x)
Definition Platform.h:1272
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
EInvalidateWidgetReason
Definition InvalidateWidgetReason.h:14
UE::Math::TVector4< double > FVector4
Definition MathFwd.h:49
ESlateAttributeBindAction
Definition SlateAttribute.h:168
#define UE_SLATE_WITH_MEMBER_ATTRIBUTE_DEBUGGING
Definition SlateAttribute.h:14
#define UE_SLATE_WITH_ATTRIBUTE_DEFAULT_INITIALIZATION_ACTION
Definition SlateAttribute.h:176
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
if(Failed) console_printf("Failed.\n")
Definition IDelegateInstance.h:14
Definition SWidget.h:165
Definition SlateAttributeDefinition.inl:43
Definition SlateAttributeDefinition.inl:57
Definition Attribute.h:17
static TAttribute Create(const FGetter &InGetter)
Definition Attribute.h:101
Definition UniquePtr.h:107
Definition SlateAttribute.cpp:11
ESlateAttributeType
Definition SlateAttributeDefinition.inl:27
Definition SlateAttribute.h:181
Definition SlateAttributeDefinition.inl:84
SLATECORE_API FDelegateHandle ProtectedFindGetterHandle(const SWidget &Widget, ESlateAttributeType AttributeType) const
Definition SlateAttribute.cpp:134
SLATECORE_API void ProtectedRegisterAttribute(SWidget &Widget, ESlateAttributeType AttributeType, TUniquePtr< ISlateAttributeGetter > &&Wrapper)
Definition SlateAttribute.cpp:84
SLATECORE_API void ProtectedUpdateNow(SWidget &Widget, ESlateAttributeType AttributeType)
Definition SlateAttribute.cpp:148
SLATECORE_API ISlateAttributeGetter * ProtectedFindGetter(const SWidget &Widget, ESlateAttributeType AttributeType) const
Definition SlateAttribute.cpp:120
SLATECORE_API bool ProtectedIsBound(const SWidget &Widget, ESlateAttributeType AttributeType) const
Definition SlateAttribute.cpp:106
SLATECORE_API void ProtectedUnregisterAttribute(SWidget &Widget, ESlateAttributeType AttributeType) const
Definition SlateAttribute.cpp:76
SLATECORE_API void ProtectedInvalidateWidget(SWidget &Widget, ESlateAttributeType AttributeType, EInvalidateWidgetReason InvalidationReason) const
Definition SlateAttribute.cpp:92
Definition SlateAttributeBase.inl:20
static bool IdenticalTo(const ISlateAttributeContainer &Container, const ObjectType &Lhs, const ObjectType &Rhs)
Definition SlateAttributeBase.inl:38
const ObjectType & Get() const
Definition SlateAttributeBase.inl:240
bool Assign(ContainerType &Widget, TAttribute< ObjectType > &&OtherAttribute, ObjectType &&DefaultValue, ESlateAttributeBindAction Actions=UE_SLATE_WITH_ATTRIBUTE_DEFAULT_INITIALIZATION_ACTION)
Definition SlateAttributeBase.inl:437
TSlateAttributeBase(ObjectType &&InValue)
Definition SlateAttributeBase.inl:124
TAttribute< ObjectType > ToAttribute(const ContainerType &Widget) const
Definition SlateAttributeBase.inl:466
TSlateAttributeBase(SWidget &Widget, const FGetter &Getter, const ObjectType &InitialValue)
Definition SlateAttributeBase.inl:160
TSlateAttributeBase(SWidget &Widget, const TAttribute< ObjectType > &Attribute, const ObjectType &InitialValue)
Definition SlateAttributeBase.inl:212
TSlateAttributeBase(const ObjectType &InValue)
Definition SlateAttributeBase.inl:115
static EInvalidateWidgetReason GetInvalidationReason(const ISlateAttributeContainer &Container)
Definition SlateAttributeBase.inl:36
TSlateAttributeBase(SWidget &Widget, ObjectType &&InValue)
Definition SlateAttributeBase.inl:151
TSlateAttributeBase()
Definition SlateAttributeBase.inl:108
TSlateAttributeBase(SWidget &Widget)
Definition SlateAttributeBase.inl:133
bool Set(ContainerType &Widget, ObjectType &&NewValue)
Definition SlateAttributeBase.inl:275
bool Set(ContainerType &Widget, const ObjectType &NewValue)
Definition SlateAttributeBase.inl:257
bool Assign(ContainerType &Widget, TAttribute< ObjectType > &&OtherAttribute, ESlateAttributeBindAction Actions=UE_SLATE_WITH_ATTRIBUTE_DEFAULT_INITIALIZATION_ACTION)
Definition SlateAttributeBase.inl:368
TSlateAttributeBase(SWidget &Widget, FGetter &&Getter, const ObjectType &InitialValue)
Definition SlateAttributeBase.inl:186
static bool IdenticalTo(const SWidget &Widget, const ObjectType &Lhs, const ObjectType &Rhs)
Definition SlateAttributeBase.inl:37
static constexpr bool HasDefinedInvalidationReason
Definition SlateAttributeBase.inl:31
void Unbind(ContainerType &Widget)
Definition SlateAttributeBase.inl:458
bool Assign(ContainerType &Widget, const TAttribute< ObjectType > &OtherAttribute, ESlateAttributeBindAction Actions=UE_SLATE_WITH_ATTRIBUTE_DEFAULT_INITIALIZATION_ACTION)
Definition SlateAttributeBase.inl:350
InObjectType ObjectType
Definition SlateAttributeBase.inl:25
bool IdenticalTo(const ContainerType &Widget, const TAttribute< ObjectType > &Other) const
Definition SlateAttributeBase.inl:500
InInvalidationReasonPredicate FInvalidationReasonPredicate
Definition SlateAttributeBase.inl:26
void Bind(ContainerType &Widget, FGetter &&Getter)
Definition SlateAttributeBase.inl:313
TSlateAttributeBase(SWidget &Widget, TAttribute< ObjectType > &&Attribute, ObjectType &&InitialValue)
Definition SlateAttributeBase.inl:225
void Bind(WidgetType &Widget, typename FGetter::template TConstMethodPtr< WidgetType > MethodPtr)
Definition SlateAttributeBase.inl:332
TSlateAttributeBase(SWidget &Widget, FGetter &&Getter, ObjectType &&InitialValue)
Definition SlateAttributeBase.inl:199
bool Assign(ContainerType &Widget, const TAttribute< ObjectType > &OtherAttribute, const ObjectType &DefaultValue, ESlateAttributeBindAction Actions=UE_SLATE_WITH_ATTRIBUTE_DEFAULT_INITIALIZATION_ACTION)
Definition SlateAttributeBase.inl:386
TSlateAttributeBase(SWidget &Widget, const ObjectType &InValue)
Definition SlateAttributeBase.inl:142
void Bind(ContainerType &Widget, const FGetter &Getter)
Definition SlateAttributeBase.inl:295
bool IsBound(const ContainerType &Widget) const
Definition SlateAttributeBase.inl:476
bool Assign(ContainerType &Widget, TAttribute< ObjectType > &&OtherAttribute, const ObjectType &DefaultValue, ESlateAttributeBindAction Actions=UE_SLATE_WITH_ATTRIBUTE_DEFAULT_INITIALIZATION_ACTION)
Definition SlateAttributeBase.inl:403
static const ESlateAttributeType AttributeType
Definition SlateAttributeBase.inl:30
void UpdateNow(ContainerType &Widget)
Definition SlateAttributeBase.inl:246
bool IdenticalTo(const ContainerType &Widget, const TSlateAttributeBase &Other) const
Definition SlateAttributeBase.inl:483
bool Assign(ContainerType &Widget, const TAttribute< ObjectType > &OtherAttribute, ObjectType &&DefaultValue, ESlateAttributeBindAction Actions=UE_SLATE_WITH_ATTRIBUTE_DEFAULT_INITIALIZATION_ACTION)
Definition SlateAttributeBase.inl:420
typename TAttribute< ObjectType >::FGetter FGetter
Definition SlateAttributeBase.inl:27
InComparePredicateType FComparePredicate
Definition SlateAttributeBase.inl:28
TSlateAttributeBase(SWidget &Widget, const FGetter &Getter, ObjectType &&InitialValue)
Definition SlateAttributeBase.inl:173
static EInvalidateWidgetReason GetInvalidationReason(const SWidget &Widget)
Definition SlateAttributeBase.inl:35
Definition SlateAttributeMember.inl:88