UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SCarouselNavigationButton.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
4#include "CoreMinimal.h"
5#include "Layout/Visibility.h"
8#include "Layout/Margin.h"
11#include "Styling/CoreStyle.h"
13#include "Widgets/SBoxPanel.h"
14#include "Widgets/Layout/SBox.h"
17#include "WidgetCarouselStyle.h"
18#include "HAL/PlatformProcess.h"
21
22#define LOCTEXT_NAMESPACE "WidgetCarousel"
23
28 : public SCompoundWidget
29{
32
33public:
34
36 : public SBorder
37 {
38 public:
39
48 SLATE_EVENT(FOnBeginPeek, OnBeginPeek)
49 SLATE_EVENT(FOnEndPeek, OnEndPeek)
50
54
55 SLATE_DEFAULT_SLOT(FArguments, Content)
56
58
59 void Construct(const FArguments& InArgs)
60 {
61 OnBeginPeek = InArgs._OnBeginPeek;
62 OnEndPeek = InArgs._OnEndPeek;
63
64 SBorder::Construct(SBorder::FArguments()
65 .HAlign(InArgs._HAlign)
66 .VAlign(InArgs._VAlign)
67 .Padding(InArgs._Padding)
68 .BorderImage(FStyleDefaults::GetNoBrush())
69 [
70 InArgs._Content.Widget
71 ]);
72 }
73
75 {
77 {
78 if (OnBeginPeek.IsBound() == true)
79 {
80 OnBeginPeek.Execute();
81 }
82 }
84 }
85
87 {
89 {
90 if (OnEndPeek.IsBound() == true)
91 {
92 OnEndPeek.Execute();
93 }
94 }
96 }
97
98 private:
99
100 FOnBeginPeek OnBeginPeek;
101 FOnEndPeek OnEndPeek;
102 };
103
104public:
105
107 {
108 Left,
109 Right
110 };
111
115
117
118
119 SLATE_EVENT(FOnClicked, OnClicked)
120
121
123
124
125 SLATE_EVENT(FOnBeginPeek, OnBeginPeek)
126 SLATE_EVENT(FOnEndPeek, OnEndPeek)
127
129
130 void Construct(const FArguments& InArgs)
131 {
132 ImageTransparency = 0.f;
133 Style = InArgs._Style;
134
136 [
137 SNew(SBox)
138 .WidthOverride(150.0f)
139 [
141 .OnBeginPeek(InArgs._OnBeginPeek)
142 .OnEndPeek(InArgs._OnEndPeek)
143 [
146 [
149 ]
151 .HAlign(InArgs._Direction == ENavigationButtonDirection::Left ? HAlign_Left : HAlign_Right)
152 .AutoWidth()
153 [
154 SAssignNew(HiddenButton, SButton)
155 .HAlign(HAlign_Center)
156 .VAlign(VAlign_Center)
157 .ToolTipText(InArgs._ToolTipText)
158 .OnClicked(InArgs._OnClicked)
159 .ButtonStyle(FCoreStyle::Get(), "NoBorder")
160 .Cursor(EMouseCursor::Hand)
161 [
162 SAssignNew(VisibleButton, SButton)
163 .HAlign(HAlign_Center)
164 .VAlign(VAlign_Center)
165 .ToolTipText(InArgs._ToolTipText)
166 .OnClicked(InArgs._OnClicked)
167 .ButtonStyle(&Style->InnerButtonStyle)
168 .ContentPadding(FMargin(15, 30))
169 .ButtonColorAndOpacity(this, &SCarouselNavigationButton::GetButtonColor)
170 .Cursor(EMouseCursor::Hand)
171 [
172 SNew(SBox)
173 .HeightOverride(42.0f)
174 .WidthOverride(25.0f)
175 [
176 SNew(SImage)
177 .Image(InArgs._Direction == ENavigationButtonDirection::Left ?
179 .ColorAndOpacity(this, &SCarouselNavigationButton::GetButtonImageColor)
180 ]
181 ]
182 ]
183 ]
185 [
188 ]
189 ]
190 ]
191 ];
192 }
193
194private:
195
196 FSlateColor GetButtonColor() const
197 {
198 if (HiddenButton->IsHovered())
199 {
200 if (!VisibleButton->IsHovered())
201 {
203 Color.A = ImageTransparency;
204 return Color;
205 }
206 else
207 {
208 return FLinearColor::White;
209 }
210 }
211
212 return FLinearColor(0.0f, 0.0f, 0.0f, ImageTransparency * 0.5f);
213 }
214
215 FSlateColor GetButtonImageColor() const
216 {
217 if (HiddenButton->IsHovered() || VisibleButton->IsHovered())
218 {
219 if (!VisibleButton->IsHovered())
220 {
221 return FLinearColor(0.0f, 0.0f, 0.0f, 1.0f);
222 }
223
224 return FLinearColor(0.0f, 0.0f, 0.0f, ImageTransparency);
225 }
226
227 return FLinearColor(1.0f, 1.0f, 1.0f, ImageTransparency);
228 }
229
230 virtual void Tick(const FGeometry& AllottedGeometry, const double InCurrentTime, const float InDeltaTime) override
231 {
232 //SButton::Tick(AllottedGeometry, InCurrentTime, InDeltaTime);
233
234 static const float BlendSpeed = 2.0f;
235
237
238 if (IsHovered())
239 {
240 if (ImageTransparency != 1.f && FPlatformApplicationMisc::IsThisApplicationForeground())
241 {
242 ImageTransparency = FMath::Min<float>(ImageTransparency + DesiredBlendSpeed, 1.f);
243 }
244 else
245 {
246 ImageTransparency = 1.f;
247 }
248 }
249 else
250 {
251 if (ImageTransparency != 0.f && FPlatformApplicationMisc::IsThisApplicationForeground())
252 {
253 ImageTransparency = FMath::Max<float>(ImageTransparency - DesiredBlendSpeed, 0.f);
254 }
255 else
256 {
257 ImageTransparency = 0.f;
258 }
259 }
260 }
261
262private:
264 TSharedPtr<SButton> HiddenButton;
265 TSharedPtr<SButton> VisibleButton;
266
267 float ImageTransparency;
269};
270
271#undef LOCTEXT_NAMESPACE
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
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 SAssignNew(ExposeAs, WidgetType,...)
Definition DeclarativeSyntaxSupport.h:41
#define SNew(WidgetType,...)
Definition DeclarativeSyntaxSupport.h:37
#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
#define DECLARE_DELEGATE(DelegateName)
Definition DelegateCombinations.h:20
EHorizontalAlignment
Definition SlateEnums.h:174
EVerticalAlignment
Definition SlateEnums.h:194
static const ISlateStyle & Get()
Definition CoreStyle.h:33
static SLATECORE_API const FSlateBrush * GetNoBrush()
Definition StyleDefaults.cpp:6
Definition SBorder.h:31
SLATE_API void Construct(const FArguments &InArgs)
Definition SBorder.cpp:28
Definition SBox.h:29
Definition SButton.h:33
Definition SCarouselNavigationButton.h:37
SLATE_BEGIN_ARGS(SPeekBorder)
Definition SCarouselNavigationButton.h:40
void OnMouseEnter(const FGeometry &MyGeometry, const FPointerEvent &MouseEvent)
Definition SCarouselNavigationButton.h:74
void OnMouseLeave(const FPointerEvent &MouseEvent)
Definition SCarouselNavigationButton.h:86
void Construct(const FArguments &InArgs)
Definition SCarouselNavigationButton.h:59
Definition SCarouselNavigationButton.h:29
void Construct(const FArguments &InArgs)
Definition SCarouselNavigationButton.h:130
ENavigationButtonDirection
Definition SCarouselNavigationButton.h:107
SLATE_BEGIN_ARGS(SCarouselNavigationButton)
Definition SCarouselNavigationButton.h:112
Definition SCompoundWidget.h:22
FCompoundWidgetOneChildSlot ChildSlot
Definition SCompoundWidget.h:113
Definition SBoxPanel.h:171
static FSlot::FSlotArguments Slot()
Definition SBoxPanel.h:272
Definition SImage.h:29
Definition SSpacer.h:21
bool IsHovered() const
Definition SWidget.h:983
virtual SLATECORE_API void OnMouseLeave(const FPointerEvent &MouseEvent)
Definition SWidget.cpp:516
virtual SLATECORE_API void OnMouseEnter(const FGeometry &MyGeometry, const FPointerEvent &MouseEvent)
Definition SWidget.cpp:499
Definition SharedPointer.h:692
@ Hand
Definition ICursor.h:47
static SLATECORE_API const EVisibility Visible
Definition Visibility.h:14
static SLATECORE_API const EVisibility Collapsed
Definition Visibility.h:17
static APPLICATIONCORE_API bool IsThisApplicationForeground()
Definition GenericPlatformApplicationMisc.cpp:92
Definition Geometry.h:40
Definition Color.h:48
float A
Definition Color.h:56
static CORE_API const FLinearColor White
Definition Color.h:456
Definition Margin.h:17
Definition Events.h:695
Definition SlateColor.h:42
Definition WidgetCarouselStyle.h:15
FSlateBrush NavigationButtonLeftImage
Definition WidgetCarouselStyle.h:34
FSlateBrush NavigationButtonRightImage
Definition WidgetCarouselStyle.h:38
FButtonStyle InnerButtonStyle
Definition WidgetCarouselStyle.h:30