UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SSplitter.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"
9#include "Input/CursorReply.h"
10#include "Input/Reply.h"
12#include "Widgets/SWidget.h"
13#include "SlotBase.h"
14#include "Layout/Children.h"
15#include "Styling/CoreStyle.h"
17#include "Widgets/SPanel.h"
18#include "Styling/SlateTypes.h"
19
20#define UE_API SLATE_API
21
23class FPaintArgs;
25
38
39class FLayoutGeometry;
44class SSplitter : public SPanel
45{
46
47public:
56
60 float );
61
63
64public:
65 class FSlot : public TSlotBase<FSlot>
66 {
67 public:
69 : TSlotBase<FSlot>()
70 , SizingRule( FractionOfParent )
71 , SizeValue( 1 )
72 , MinSizeValue( 0 )
73 {
74 }
75
78 SLATE_ATTRIBUTE(ESizeRule, SizeRule)
88
89 UE_API void Construct(const FChildren& SlotOwner, FSlotArguments&& InArgs);
90
93 {
94 SizeValue = MoveTemp(InValue);
95 }
96 float GetSizeValue() const
97 {
98 return SizeValue.Get();
99 }
100
106 {
107 bIsResizable = bInIsResizable;
108 }
109 bool IsResizable() const
110 {
111 return bIsResizable.Get(false);
112 }
113
116 {
117 MinSizeValue = InMinSize;
118 }
119 float GetMinSize() const
120 {
121 return MinSizeValue.Get(0.f);
122 }
123
129 {
130 return OnSlotResized_Handler;
131 }
133 {
134 return OnSlotResized_Handler;
135 }
136
139 {
140 SizingRule = MoveTemp(InSizeRule);
141 }
143 {
144 return SizingRule.Get();
145 }
146
147 public:
149 UE_API bool CanBeResized() const;
150
151 private:
152 TAttribute<ESizeRule> SizingRule;
153 TAttribute<float> SizeValue;
154 TAttribute<float> MinSizeValue;
155 FOnSlotResized OnSlotResized_Handler;
156 TOptional<bool> bIsResizable;
157 };
158
160 SLATE_API static FSlot::FSlotArguments Slot();
161
174
176
178 : _Style( &FCoreStyle::Get().GetWidgetStyle<FSplitterStyle>("Splitter") )
180 , _ResizeMode( ESplitterResizeMode::FixedPosition )
183 , _MinimumSlotHeight( 20.0f )
185 {
186 }
187
188 SLATE_SLOT_ARGUMENT(FSlot, Slots)
189
190
192
194
196
198
200
202
204
206
208
210
212
214
220 SLATE_API void Construct( const FArguments& InArgs );
221
222public:
223
231 SLATE_API SSplitter::FSlot& SlotAt( int32 SlotIndex );
232
239
246
249
251 SLATE_API int32 NumSlots() const;
252
255
256public:
257
259
260
261 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;
262
263
269
278
288
298
300
302
304
311
318
323
324private:
325 SLATE_API TArray<FLayoutGeometry> ArrangeChildrenForLayout( const FGeometry& AllottedGeometry ) const;
326
328
335
342
344
356
362 SLATE_API float ClampChild(const FSlot& ChildSlot, float ProposedSize) const;
363
375
377
383
387
390
394
396};
397
399{
400 None = 0x00,
401 LeftRightMask = 0x01,
402 UpDownMask = 0x10,
404};
406
413class SSplitter2x2 : public SPanel
414{
415private:
416 class FSlot : public TSlotBase<FSlot>
417 {
418 public:
422
423
428 void SetPercentage( const FVector2D& Value )
429 {
430 PercentageAttribute.Set( Value );
431 }
432
433 FVector2D GetPercentage() const
434 {
435 return PercentageAttribute.Get();
436 }
437
439
440 SLATE_API void Construct(const FChildren& SlotOwner, FSlotArguments&& InArg);
441
442 private:
444 TAttribute<FVector2D> PercentageAttribute;
445 };
446
449 {
450 }
453 SLATE_NAMED_SLOT( FArguments, TopLeft )
454 SLATE_NAMED_SLOT( FArguments, BottomLeft )
455 SLATE_NAMED_SLOT( FArguments, TopRight )
456 SLATE_NAMED_SLOT( FArguments, BottomRight )
458
460
461 SLATE_API void Construct( const FArguments& InArgs );
462
468 SLATE_API TSharedRef< SWidget > GetTopLeftContent();
469
475 SLATE_API TSharedRef< SWidget > GetBottomLeftContent();
476
482 SLATE_API TSharedRef< SWidget > GetTopRightContent();
483
489 SLATE_API TSharedRef< SWidget > GetBottomRightContent();
490
496 SLATE_API void SetTopLeftContent( TSharedRef< SWidget > TopLeftContent );
497
503 SLATE_API void SetBottomLeftContent( TSharedRef< SWidget > BottomLeftContent );
504
510 SLATE_API void SetTopRightContent( TSharedRef< SWidget > TopRightContent );
511
517 SLATE_API void SetBottomRightContent( TSharedRef< SWidget > BottomRightContent );
518
520 SLATE_API void GetSplitterPercentages( TArray< FVector2D >& OutPercentages ) const;
521
523 SLATE_API void SetSplitterPercentages( TArrayView< FVector2D > InPercentages );
524
525
526private:
527
528 TArray<FLayoutGeometry> ArrangeChildrenForLayout( const FGeometry& AllottedGeometry ) const;
529
530 SLATE_API virtual void OnArrangeChildren( const FGeometry& AllottedGeometry, FArrangedChildren& ArrangedChildren ) const override;
531
532 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;
533
538 SLATE_API virtual FVector2D ComputeDesiredSize(float) const override;
539
547 SLATE_API virtual FChildren* GetChildren() override;
548
558
567 SLATE_API virtual FReply OnMouseButtonUp( const FGeometry& MyGeometry, const FPointerEvent& MouseEvent ) override;
568
577 SLATE_API virtual FReply OnMouseMove( const FGeometry& MyGeometry, const FPointerEvent& MouseEvent ) override;
578
582 SLATE_API virtual FCursorReply OnCursorQuery( const FGeometry& MyGeometry, const FPointerEvent& CursorEvent ) const override;
583
590 EResizingAxis CalculateResizingAxis( const FGeometry& MyGeometry, const FVector2D& LocalMousePos ) const;
591
598 void ResizeChildren( const FGeometry& MyGeometry, const TArray<FLayoutGeometry>& ArrangedChildren, const FVector2D& LocalMousePos );
599
600
601private:
602
604 TPanelChildren<FSlot> Children;
605
606 const FSplitterStyle* Style = nullptr;
607
609 EResizingAxis ResizingAxisMask;
610
612 bool bIsResizing;
613
614 float SplitterHandleSize;
615
616 float MinSplitterChildLength;
617};
618
619#undef UE_API
@ INDEX_NONE
Definition CoreMiscDefines.h:150
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_NAMED_SLOT(DeclarationType, SlotName)
Definition DeclarativeSyntaxSupport.h:437
#define SLATE_STYLE_ARGUMENT(ArgType, ArgName)
Definition DeclarativeSyntaxSupport.h:280
#define SLATE_SLOT_ARGUMENT(SlotType, SlotName)
Definition DeclarativeSyntaxSupport.h:348
#define SLATE_ATTRIBUTE(AttrType, AttrName)
Definition DeclarativeSyntaxSupport.h:192
#define SLATE_BEGIN_ARGS(InWidgetType)
Definition DeclarativeSyntaxSupport.h:63
#define SLATE_SLOT_BEGIN_ARGS(SlotType, SlotParentType)
Definition DeclarativeSyntaxSupport.h:361
#define SLATE_EVENT(DelegateName, EventName)
Definition DeclarativeSyntaxSupport.h:458
#define SLATE_END_ARGS()
Definition DeclarativeSyntaxSupport.h:116
#define SLATE_SLOT_END_ARGS()
Definition DeclarativeSyntaxSupport.h:386
#define SLATE_ARGUMENT(ArgType, ArgName)
Definition DeclarativeSyntaxSupport.h:208
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
EInvalidateWidgetReason
Definition InvalidateWidgetReason.h:14
void Construct(const FArguments &InArgs)
virtual FReply OnMouseButtonDown(const FGeometry &MyGeometry, const FPointerEvent &MouseEvent)
#define UE_API
Definition SSplitter.h:20
EResizingAxis
Definition SSplitter.h:399
EOrientation
Definition SlateEnums.h:261
@ Percentage
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 ArrangedChildren.h:15
Definition ChildrenBase.h:27
Definition CoreStyle.h:15
static const ISlateStyle & Get()
Definition CoreStyle.h:33
Definition CursorReply.h:16
Definition LayoutGeometry.h:11
Definition PaintArgs.h:23
Definition Reply.h:24
Definition SlateRect.h:26
Definition DrawElements.h:220
Definition WidgetStyle.h:15
Definition SPanel.h:30
void Construct()
Definition SPanel.h:65
Definition SSplitter.h:414
Definition SSplitter.h:66
void SetSizingRule(TAttribute< ESizeRule > InSizeRule)
Definition SSplitter.h:138
void SetMinSize(float InMinSize)
Definition SSplitter.h:115
void SetSizeValue(TAttribute< float > InValue)
Definition SSplitter.h:92
float GetSizeValue() const
Definition SSplitter.h:96
float GetMinSize() const
Definition SSplitter.h:119
ESizeRule GetSizingRule() const
Definition SSplitter.h:142
FSlot()
Definition SSplitter.h:68
void SetResizable(bool bInIsResizable)
Definition SSplitter.h:105
UE_API bool CanBeResized() const
Definition SSplitter.cpp:32
bool IsResizable() const
Definition SSplitter.h:109
FOnSlotResized & OnSlotResized()
Definition SSplitter.h:128
const FOnSlotResized & OnSlotResized() const
Definition SSplitter.h:132
Definition SSplitter.h:45
float PhysicalSplitterHandleSize
Definition SSplitter.h:392
float HitDetectionSplitterHandleSize
Definition SSplitter.h:393
static SLATE_API FSlot::FSlotArguments Slot()
Definition SSplitter.cpp:45
SLATE_API void HandleResizingByMousePosition(EOrientation Orientation, const float PhysicalSplitterHandleSize, const ESplitterResizeMode::Type ResizeMode, int32 DraggedHandle, const FVector2D &LocalMousePos, TPanelChildren< FSlot > &Children, const TArray< FLayoutGeometry > &ChildGeometries)
Definition SSplitter.cpp:804
FOnGetMaxSlotSize OnGetMaxSlotSize
Definition SSplitter.h:385
SLATE_API int32 RemoveSlot(const TSharedRef< SWidget > &SlotWidget)
Definition SSplitter.cpp:60
virtual SLATE_API FReply OnMouseButtonUp(const FGeometry &MyGeometry, const FPointerEvent &MouseEvent) override
Definition SSplitter.cpp:438
SLATE_API void RemoveAt(int32 IndexToRemove)
Definition SSplitter.cpp:65
SLATE_API bool IsValidSlotIndex(int32 Index) const
Definition SSplitter.cpp:80
SLATE_API SSplitter::FSlot & SlotAt(int32 SlotIndex)
Definition SSplitter.cpp:55
SLATE_API void ClearChildren()
Definition SSplitter.cpp:70
FSimpleDelegate OnSplitterFinishedResizing
Definition SSplitter.h:384
const FSplitterStyle * Style
Definition SSplitter.h:395
DECLARE_DELEGATE_OneParam(FOnSlotResized, float)
float MinSplitterChildLength
Definition SSplitter.h:389
virtual SLATE_API FVector2D ComputeDesiredSize(float) const override
Definition SSplitter.cpp:388
DECLARE_DELEGATE_RetVal_OneParam(FVector2D, FOnGetMaxSlotSize, int32)
FOnHandleHovered OnHandleHovered
Definition SSplitter.h:386
DECLARE_DELEGATE_OneParam(FOnHandleHovered, int32)
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 SSplitter.cpp:265
static SLATE_API int32 FindResizeableSlotBeforeHandle(int32 DraggedHandle, const TPanelChildren< FSlot > &Children)
Definition SSplitter.cpp:600
virtual SLATE_API FReply OnMouseButtonDown(const FGeometry &MyGeometry, const FPointerEvent &MouseEvent) override
Definition SSplitter.cpp:417
SLATE_API int32 NumSlots() const
Definition SSplitter.cpp:75
ESplitterResizeMode::Type ResizeMode
Definition SSplitter.h:382
virtual SLATE_API FChildren * GetChildren() override
Definition SSplitter.cpp:404
static SLATE_API void FindAllResizeableSlotsAfterHandle(int32 DraggedHandle, const TPanelChildren< FSlot > &Children, TArray< int32, FConcurrentLinearArrayAllocator > &OutSlotIndicies)
Definition SSplitter.cpp:632
SLATE_API FScopedWidgetSlotArguments AddSlot(int32 AtIndex=INDEX_NONE)
Definition SSplitter.cpp:50
virtual SLATE_API void OnMouseLeave(const FPointerEvent &MouseEvent) override
Definition SSplitter.cpp:519
SLATE_API void SetOrientation(EOrientation NewOrientation)
Definition SSplitter.cpp:575
EOrientation Orientation
Definition SSplitter.h:381
TPanelChildren< FSlot > Children
Definition SSplitter.h:376
SLATE_BEGIN_ARGS(SSplitter)
Definition SSplitter.h:177
ESizeRule
Definition SSplitter.h:50
@ FractionOfParent
Definition SSplitter.h:54
@ SizeToContent
Definition SSplitter.h:52
virtual SLATE_API void OnArrangeChildren(const FGeometry &AllottedGeometry, FArrangedChildren &ArrangedChildren) const override
Definition SSplitter.cpp:253
bool bIsResizing
Definition SSplitter.h:380
int32 HoveredHandleIndex
Definition SSplitter.h:378
SLATE_API EOrientation GetOrientation() const
Definition SSplitter.cpp:583
SLATE_API void HandleResizingDelta(EOrientation Orientation, const float PhysicalSplitterHandleSize, const ESplitterResizeMode::Type ResizeMode, int32 DraggedHandle, float Delta, TPanelChildren< FSlot > &Children, const TArray< FLayoutGeometry > &ChildGeometries)
Definition SSplitter.cpp:647
virtual SLATE_API FReply OnMouseButtonDoubleClick(const FGeometry &InMyGeometry, const FPointerEvent &InMouseEvent) override
Definition SSplitter.cpp:500
virtual SLATE_API FCursorReply OnCursorQuery(const FGeometry &MyGeometry, const FPointerEvent &CursorEvent) const override
Definition SSplitter.cpp:539
virtual SLATE_API FReply OnMouseMove(const FGeometry &MyGeometry, const FPointerEvent &MouseEvent) override
Definition SSplitter.cpp:458
SLATE_API float ClampChild(const FSlot &ChildSlot, float ProposedSize) const
Definition SSplitter.cpp:819
TSlateAttribute< int32, EInvalidateWidgetReason::Paint > HighlightedHandleIndex
Definition SSplitter.h:379
static int32 GetHandleBeingResizedFromMousePosition(float PhysicalSplitterHandleSize, float HitDetectionSplitterHandleSize, FVector2D LocalMousePos, const TArray< FLayoutGeometry > &ChildGeometries)
Definition SSplitter.cpp:828
static SLATE_API int32 FindResizeableSlotAfterHandle(int32 DraggedHandle, const TPanelChildren< FSlot > &Children)
Definition SSplitter.cpp:615
SLATE_API void HandleResizingBySize(EOrientation Orientation, const float PhysicalSplitterHandleSize, const ESplitterResizeMode::Type ResizeMode, int32 DraggedHandle, const FVector2D &DesiredSize, TPanelChildren< FSlot > &Children, const TArray< FLayoutGeometry > &ChildGeometries)
Definition SSplitter.cpp:794
Definition SWidget.h:165
Definition ArrayView.h:139
Definition Array.h:670
Definition Attribute.h:17
const ObjectType & Get() const
Definition Attribute.h:241
Definition ConcurrentLinearAllocator.h:624
Definition Children.h:461
Definition SharedPointer.h:153
Definition SlotBase.h:122
Definition SSplitter.h:27
Type
Definition SSplitter.h:29
@ Fill
Definition SSplitter.h:35
@ FixedSize
Definition SSplitter.h:33
@ FixedPosition
Definition SSplitter.h:31
U16 Index
Definition radfft.cpp:71
Definition Geometry.h:40
Definition Events.h:695
Definition SlateTypes.h:1575
Definition SWidget.h:189
Definition Optional.h:131
constexpr const OptionalType & Get(const OptionalType &DefaultValue UE_LIFETIMEBOUND) const UE_LIFETIMEBOUND
Definition Optional.h:472