UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SButton.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 "Misc/Attribute.h"
7#include "Input/Reply.h"
10#include "Layout/Margin.h"
11#include "Sound/SlateSound.h"
12#include "Styling/SlateTypes.h"
13#include "Styling/CoreStyle.h"
17
18class FPaintArgs;
20enum class ETextFlowDirection : uint8;
21enum class ETextShapingMethod : uint8;
22
23template <>
25{
26 static constexpr bool SupportsInvalidation() { return true; }
27};
28
32class SButton : public SBorder
33{
35
36#if WITH_ACCESSIBILITY
37 // Allow the accessible button to "click" this button
38 friend class FSlateAccessibleButton;
39#endif
40public:
41
43 : _Content()
44 , _ButtonStyle( &FCoreStyle::Get().GetWidgetStyle< FButtonStyle >( "Button" ) )
45 , _TextStyle( &FCoreStyle::Get().GetWidgetStyle< FTextBlockStyle >("ButtonText") )
48 , _ContentPadding(FMargin(4.0, 2.0))
49 , _Text()
55 , _ClickMethod( EButtonClickMethod::DownAndUp )
56 , _TouchMethod( EButtonTouchMethod::DownAndUp )
57 , _PressMethod( EButtonPressMethod::DownAndUp )
59 , _ContentScale( FVector2D(1,1) )
61 , _ForegroundColor(FSlateColor::UseStyle())
64 {
65 }
66
68 SLATE_DEFAULT_SLOT( FArguments, Content )
69
70
72
73
75
76
78
79
81
82
83 SLATE_ATTRIBUTE( FMargin, ContentPadding )
84
85
87
88
90
91
93
94
95 SLATE_EVENT( FOnClicked, OnClicked )
96
97
98 SLATE_EVENT( FSimpleDelegate, OnPressed )
99
100
101 SLATE_EVENT( FSimpleDelegate, OnReleased )
102
103 SLATE_EVENT( FSimpleDelegate, OnHovered )
104
105 SLATE_EVENT( FSimpleDelegate, OnUnhovered )
106
107 SLATE_EVENT( FSimpleDelegate, OnReceivedFocus )
108
109 SLATE_EVENT( FSimpleDelegate, OnLostFocus )
110
111 // Drag and Drop
112 SLATE_EVENT(FOnDragDetected, OnSlateButtonDragDetected)
113
114 SLATE_EVENT(FOnDragEnter, OnSlateButtonDragEnter)
115
116 SLATE_EVENT(FOnDragLeave, OnSlateButtonDragLeave)
117
118 SLATE_EVENT(FOnDragOver, OnSlateButtonDragOver)
119
120 SLATE_EVENT(FOnDrop, OnSlateButtonDrop)
121 // End Drag and Drop
122
123
125
126
128
129
131
132 SLATE_ATTRIBUTE( FVector2D, DesiredSizeScale )
133
135
137
138 SLATE_ATTRIBUTE( FSlateColor, ForegroundColor )
139
140
141 SLATE_ARGUMENT( bool, IsFocusable )
142
143
145
146
148
149
151
152
154
155
157
158
160
162
164
167
168public:
171 {
172 return Super::GetForegroundColor();
173 }
174
177
184 bool IsPressed() const
185 {
186 return bIsPressed || AppearPressedAttribute.Get();
187 }
188
194 SLATE_API void Construct( const FArguments& InArgs );
195
198
201
204
207
210
213
216
219
222
224 SLATE_API void SetButtonStyle(const FButtonStyle* ButtonStyle);
225
229
231 SLATE_API void SetAllowDragDrop(bool bAllowDragDrop);
232
233#if !UE_BUILD_SHIPPING
235#endif // !UE_BUILD_SHIPPING
236
237public:
238
239 //~ SWidget overrides
240 SLATE_API virtual int32 OnPaint(const FPaintArgs& Args, const FGeometry& AllottedGeometry, const FSlateRect& MyCullingRect, FSlateWindowElementList& OutDrawElements, int32 LayerId, const FWidgetStyle& InWidgetStyle, bool bParentEnabled) const override;
241 SLATE_API virtual bool SupportsKeyboardFocus() const override;
242 SLATE_API virtual void OnFocusLost( const FFocusEvent& InFocusEvent ) override;
244 SLATE_API virtual FReply OnKeyDown( const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent ) override;
245 SLATE_API virtual FReply OnKeyUp( const FGeometry& MyGeometry, const FKeyEvent& InKeyEvent ) override;
249 SLATE_API virtual FReply OnMouseMove( const FGeometry& MyGeometry, const FPointerEvent& MouseEvent ) override;
250 SLATE_API virtual void OnMouseEnter( const FGeometry& MyGeometry, const FPointerEvent& MouseEvent ) override;
252 SLATE_API virtual void OnDragEnter(FGeometry const& MyGeometry, FDragDropEvent const& DragDropEvent) override;
253 SLATE_API virtual void OnDragLeave(FDragDropEvent const& DragDropEvent) override;
255 SLATE_API virtual FReply OnDrop(const FGeometry& MyGeometry, const FDragDropEvent& DragDropEvent) override;
256 SLATE_API virtual void OnMouseLeave( const FPointerEvent& MouseEvent ) override;
258 SLATE_API virtual bool IsInteractable() const override;
259
260#if WITH_ACCESSIBILITY
262#endif
263protected:
264 SLATE_API virtual FVector2D ComputeDesiredSize(float) const override;
265 //~ SWidget
266
267protected:
269 SLATE_API virtual void Press();
270
272 SLATE_API virtual void Release();
273
276
279
281 SLATE_API bool GetShowDisabledEffect() const;
282
285
288
290 SLATE_API void PlayPressedSound() const;
291
293 SLATE_API void PlayClickedSound() const;
294
296 SLATE_API void PlayHoverSound() const;
297
300 {
301 bIsFocusable = bInIsFocusable;
302 }
303
305
306protected:
309
312
315 {
316 AppearPressedAttribute.Assign(*this, MoveTemp(InValue));
317 }
318
321
322private:
323 SLATE_API void UpdatePressStateChanged();
324
325 SLATE_API void UpdatePadding();
326 SLATE_API void UpdateShowDisabledEffect();
327 SLATE_API void UpdateBorderImage();
328 SLATE_API void UpdateForegroundColor();
329 SLATE_API void UpdateDisabledForegroundColor();
330
331private:
333 FVector2D PressedScreenSpacePosition;
334
336 const FButtonStyle* Style;
338 FOnClicked OnClicked;
339
341 FSimpleDelegate OnPressed;
342
344 FSimpleDelegate OnReleased;
345
347 FSimpleDelegate OnHovered;
348
350 FSimpleDelegate OnUnhovered;
351
353 FSimpleDelegate OnReceivedFocus;
354
356 FSimpleDelegate OnLostFocus;
357
359 FOnDragDetected OnSlateButtonDragDetected;
360
362 FOnDragEnter OnSlateButtonDragEnter;
363
365 FOnDragLeave OnSlateButtonDragLeave;
366
368 FOnDragOver OnSlateButtonDragOver;
369
371 FOnDrop OnSlateButtonDrop;
372
374 FSlateSound HoveredSound;
375
377 FSlateSound PressedSound;
378
380 FSlateSound ClickedSound;
381
384
387
390
392 bool bAllowDragDrop = false;
393
395 uint8 bIsFocusable:1;
396
398 uint8 bIsPressed:1;
399
401 uint8 bIsStyleNormalPaddingOverridden:1;
402
404 uint8 bIsStylePressedPaddingOverridden:1;
405
406private:
408 TSlateAttribute<FSlateColor> BorderForegroundColorAttribute;
410 TSlateAttribute<FMargin> ContentPaddingAttribute;
412 TSlateAttribute<FMargin> NormalPaddingAttribute;
414 TSlateAttribute<FMargin> PressedPaddingAttribute;
416 TSlateAttribute<bool> AppearPressedAttribute;
417};
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
#define SLATE_STYLE_ARGUMENT(ArgType, ArgName)
Definition DeclarativeSyntaxSupport.h:280
#define SLATE_ATTRIBUTE(AttrType, AttrName)
Definition DeclarativeSyntaxSupport.h:192
#define SLATE_EVENT(DelegateName, EventName)
Definition DeclarativeSyntaxSupport.h:458
#define SLATE_END_ARGS()
Definition DeclarativeSyntaxSupport.h:116
#define SLATE_DEFAULT_SLOT(DeclarationType, SlotName)
Definition DeclarativeSyntaxSupport.h:444
#define SLATE_ARGUMENT(ArgType, ArgName)
Definition DeclarativeSyntaxSupport.h:208
return true
Definition ExternalRpcRegistry.cpp:601
ETextShapingMethod
Definition FontCache.h:52
#define SLATE_DECLARE_WIDGET_API(WidgetType, ParentType, ModuleApiDefine)
Definition SlateControlledConstruction.h:22
const FGeometry const FPointerEvent const FDragDropEvent FOnDrop
Definition SlateDelegates.h:44
FOnDragDetected
Definition SlateDelegates.h:24
EHorizontalAlignment
Definition SlateEnums.h:174
EVerticalAlignment
Definition SlateEnums.h:194
ETextFlowDirection
Definition TextLayout.h:81
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition CoreStyle.h:15
Definition DragAndDrop.h:141
Definition PaintArgs.h:23
Definition Reply.h:24
Definition SlateRect.h:26
Definition DrawElements.h:220
Definition Text.h:385
Definition WidgetStyle.h:15
Definition SBorder.h:31
Definition SButton.h:33
SLATE_API void PlayHoverSound() const
Definition SButton.cpp:653
SLATE_API void Construct(const FArguments &InArgs)
Definition SButton.cpp:86
virtual SLATE_API FReply OnFocusReceived(const FGeometry &MyGeometry, const FFocusEvent &InFocusEvent) override
Definition SButton.cpp:285
SLATE_API void SetOnUnhovered(FSimpleDelegate InOnUnhovered)
Definition SButton.cpp:702
virtual SLATE_API FReply OnKeyDown(const FGeometry &MyGeometry, const FKeyEvent &InKeyEvent) override
Definition SButton.cpp:293
SLATE_API void ExecuteHoverStateChanged(bool bPlaySound)
Definition SButton.cpp:717
virtual SLATE_API void OnMouseCaptureLost(const FCaptureLostEvent &CaptureLostEvent) override
Definition SButton.cpp:564
virtual SLATE_API FVector2D ComputeDesiredSize(float) const override
Definition SButton.cpp:658
TSlateAttributeRef< bool > GetAppearPressedAttribute() const
Definition SButton.h:320
SLATE_API bool GetShowDisabledEffect() const
Definition SButton.cpp:208
bool IsPressed() const
Definition SButton.h:184
virtual SLATE_API FReply OnMouseMove(const FGeometry &MyGeometry, const FPointerEvent &MouseEvent) override
Definition SButton.cpp:466
SLATE_API void SetOnHovered(FSimpleDelegate InOnHovered)
Definition SButton.cpp:697
SLATE_API void SetHoveredSound(TOptional< FSlateSound > InHoveredSound)
Definition SButton.cpp:677
virtual SLATE_API FReply OnDragOver(const FGeometry &MyGeometry, const FDragDropEvent &DragDropEvent) override
Definition SButton.cpp:519
void SetIsFocusable(bool bInIsFocusable)
Definition SButton.h:299
virtual SLATE_API FSlateColor GetDisabledForegroundColor() const final
Definition SButton.cpp:792
SLATE_API void SetClickMethod(EButtonClickMethod::Type InClickMethod)
Definition SButton.cpp:765
SLATE_API void SetAllowDragDrop(bool bAllowDragDrop)
Definition SButton.cpp:780
virtual FSlateColor GetForegroundColor() const final
Definition SButton.h:170
virtual SLATE_API void OnMouseEnter(const FGeometry &MyGeometry, const FPointerEvent &MouseEvent) override
Definition SButton.cpp:476
SLATE_API bool IsPreciseTapOrClick(const FPointerEvent &MouseEvent) const
Definition SButton.cpp:638
SLATE_API void SetPressedSound(TOptional< FSlateSound > InPressedSound)
Definition SButton.cpp:682
virtual SLATE_API int32 OnPaint(const FPaintArgs &Args, const FGeometry &AllottedGeometry, const FSlateRect &MyCullingRect, FSlateWindowElementList &OutDrawElements, int32 LayerId, const FWidgetStyle &InWidgetStyle, bool bParentEnabled) const override
Definition SButton.cpp:171
SLATE_API FReply ExecuteOnClick()
Definition SButton.cpp:569
SLATE_API void PlayClickedSound() const
Definition SButton.cpp:648
void SetAppearPressed(TAttribute< bool > InValue)
Definition SButton.h:314
SLATE_API TEnumAsByte< EButtonClickMethod::Type > GetClickMethodFromInputType(const FPointerEvent &MouseEvent) const
Definition SButton.cpp:620
virtual SLATE_API void OnFocusLost(const FFocusEvent &InFocusEvent) override
Definition SButton.cpp:277
SLATE_API void PlayPressedSound() const
Definition SButton.cpp:643
virtual SLATE_API FReply OnDragDetected(const FGeometry &MyGeometry, const FPointerEvent &MouseEvent) override
Definition SButton.cpp:488
SLATE_API void SetPressMethod(EButtonPressMethod::Type InPressMethod)
Definition SButton.cpp:775
virtual SLATE_API FReply OnMouseButtonUp(const FGeometry &MyGeometry, const FPointerEvent &MouseEvent) override
Definition SButton.cpp:403
virtual SLATE_API void Press()
Definition SButton.cpp:587
SLATE_API void SetContentPadding(TAttribute< FMargin > InContentPadding)
Definition SButton.cpp:672
SLATE_API FMargin GetCombinedPadding() const
Definition SButton.cpp:195
virtual SLATE_API bool SupportsKeyboardFocus() const override
Definition SButton.cpp:271
SLATE_API void SetButtonStyle(const FButtonStyle *ButtonStyle)
Definition SButton.cpp:733
SLATE_API void SetClickedSound(TOptional< FSlateSound > InClickedSound)
Definition SButton.cpp:687
TSlateAttributeRef< FSlateColor > GetBorderForegroundColorAttribute() const
Definition SButton.h:308
TSlateAttributeRef< FMargin > GetContentPaddingAttribute() const
Definition SButton.h:311
SLATE_API void SetTouchMethod(EButtonTouchMethod::Type InTouchMethod)
Definition SButton.cpp:770
SLATE_API void SetOnFocusReceived(FSimpleDelegate InOnFocusReceived)
Definition SButton.cpp:707
virtual SLATE_API void OnMouseLeave(const FPointerEvent &MouseEvent) override
Definition SButton.cpp:544
virtual SLATE_API bool IsInteractable() const override
Definition SButton.cpp:615
SLATE_API void SimulateClick()
Definition SButton.cpp:786
virtual SLATE_API FReply OnDrop(const FGeometry &MyGeometry, const FDragDropEvent &DragDropEvent) override
Definition SButton.cpp:531
virtual SLATE_API void OnDragEnter(FGeometry const &MyGeometry, FDragDropEvent const &DragDropEvent) override
Definition SButton.cpp:501
virtual SLATE_API FReply OnKeyUp(const FGeometry &MyGeometry, const FKeyEvent &InKeyEvent) override
Definition SButton.cpp:322
SLATE_BEGIN_ARGS(SButton)
Definition SButton.h:42
virtual SLATE_API void Release()
Definition SButton.cpp:598
virtual SLATE_API FReply OnMouseButtonDown(const FGeometry &MyGeometry, const FPointerEvent &MouseEvent) override
Definition SButton.cpp:351
virtual SLATE_API FReply OnMouseButtonDoubleClick(const FGeometry &InMyGeometry, const FPointerEvent &InMouseEvent) override
Definition SButton.cpp:391
virtual SLATE_API void OnDragLeave(FDragDropEvent const &DragDropEvent) override
Definition SButton.cpp:510
SLATE_API void SetOnClicked(FOnClicked InOnClicked)
Definition SButton.cpp:692
SLATE_API void SetOnFocusLost(FSimpleDelegate InOnFocusLost)
Definition SButton.cpp:712
Definition Attribute.h:17
Definition EnumAsByte.h:22
static UE_FORCEINLINE_HINT TSharedRef< OtherType, Mode > SharedThis(OtherType *ThisPtr)
Definition SharedPointer.h:1780
Definition SharedPointer.h:153
Definition SlateEnums.h:13
Type
Definition SlateEnums.h:18
Definition SlateEnums.h:69
Type
Definition SlateEnums.h:74
Definition SlateEnums.h:47
Type
Definition SlateEnums.h:50
@ false
Definition radaudio_common.h:23
Definition SlateTypes.h:509
Definition Events.h:106
Definition Events.h:51
Definition Geometry.h:40
Definition Events.h:431
Definition Color.h:48
Definition Margin.h:17
Definition Events.h:695
Definition SlateColor.h:42
Definition SlateSound.h:16
Definition SlateTypes.h:326
Definition SWidget.h:255
const ObjectType & Get() const
Definition SlateAttributeBase.inl:240
bool Assign(ContainerType &Widget, const TAttribute< ObjectType > &OtherAttribute, ESlateAttributeBindAction Actions=UE_SLATE_WITH_ATTRIBUTE_DEFAULT_INITIALIZATION_ACTION)
Definition SlateAttributeBase.inl:350
Definition Optional.h:131
static constexpr bool SupportsInvalidation()
Definition SButton.h:26
Definition SWidget.h:69