UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SGameLayerManager.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 "Layout/Visibility.h"
9#include "Layout/Geometry.h"
10#include "Widgets/SWidget.h"
12#include "Widgets/SCanvas.h"
13#include "Widgets/Layout/SBox.h"
14#include "Styling/SlateTypes.h"
15#include "UObject/ObjectKey.h"
16
17#include "SGameLayerManager.generated.h"
18
19class FPaintArgs;
20class FSceneViewport;
22class SOverlay;
25class ULocalPlayer;
26class SDebugCanvas;
28class SVerticalBox;
29
35class IGameLayer : public TSharedFromThis<IGameLayer>
36{
37public:
40
41public:
42
44 virtual ~IGameLayer() { }
45};
46
47UENUM()
53
58{
59public:
60 virtual void SetSceneViewport(FSceneViewport* SceneViewport) = 0;
61
65
68
71 virtual void ClearWidgetsForPlayer(ULocalPlayer* Player) = 0;
72
73 virtual TSharedPtr<IGameLayer> FindLayerForPlayer(ULocalPlayer* Player, const FName& LayerName) = 0;
74 virtual bool AddLayerForPlayer(ULocalPlayer* Player, const FName& LayerName, TSharedRef<IGameLayer> Layer, int32 ZOrder) = 0;
75
76 virtual void ClearWidgets() = 0;
77
80
81 virtual void SetDefaultWindowTitleBarHeight(float Height) = 0;
82 virtual void SetWindowTitleBarState(const TSharedPtr<SWidget>& TitleBarContent, EWindowTitleBarMode Mode, bool bTitleBarDragEnabled, bool bWindowButtonsVisible, bool bTitleBarVisible) = 0;
84 virtual void SetWindowTitleBarVisibility(bool bIsVisible) = 0;
85};
86
91{
92public:
93
98
100 SLATE_DEFAULT_SLOT(FArguments, Content)
101
102 SLATE_ATTRIBUTE(FSceneViewport*, SceneViewport)
103
105
107 {
108 Player = 100,
109 Viewport = 200,
110 TitleBar = 300,
111 Tooltip = 400,
112 Debug = 500,
113
114 // Add others with an increment of 100 to have enough space for injecting new layers in-between
115 };
116
118
120
126 ENGINE_API void Construct( const FArguments& InArgs );
127
128 // Begin IGameLayerManager
130 ENGINE_API virtual FGeometry GetViewportWidgetHostGeometry() const override;
133
136
139 ENGINE_API virtual void ClearWidgetsForPlayer(ULocalPlayer* Player) override;
140
142 ENGINE_API virtual bool AddLayerForPlayer(ULocalPlayer* Player, const FName& LayerName, TSharedRef<IGameLayer> Layer, int32 ZOrder) override;
143
144 ENGINE_API virtual void ClearWidgets() override;
145
146 ENGINE_API virtual void AddGameLayer(TSharedRef<SWidget> ViewportContent, int32 ZOrder) override;
148
149 ENGINE_API virtual void SetDefaultWindowTitleBarHeight(float Height);
150 ENGINE_API virtual void SetWindowTitleBarState(const TSharedPtr<SWidget>& TitleBarContent, EWindowTitleBarMode Mode, bool bTitleBarDragEnabled, bool bWindowButtonsVisible, bool bTitleBarVisible);
152 ENGINE_API virtual void SetWindowTitleBarVisibility(bool bIsVisible);
153 // End IGameLayerManager
154
155public:
156
157 //~ Begin SWidget overrides
158 ENGINE_API virtual void Tick(const FGeometry& AllottedGeometry, const double InCurrentTime, const float InDeltaTime) override;
159 ENGINE_API virtual int32 OnPaint(const FPaintArgs& Args, const FGeometry& AllottedGeometry, const FSlateRect& MyCullingRect, FSlateWindowElementList& OutDrawElements, int32 LayerId, const FWidgetStyle& InWidgetStyle, bool bParentEnabled) const override;
161 //~ End SWidget overrides
162
169 ENGINE_API bool IsUsingFixedDPIValue() const;
170
171private:
172 float GetGameViewportDPIScale() const;
173 FOptionalSize GetDefaultWindowTitleBarHeight() const;
174
175 //~ Functions for setting the visibility of different canvases containing HUD.
176 void ShowPlayerCanvas(bool bIsVisible);
177 void ShowDebugCanvas(bool bIsVisible);
178 void ShowViewportSlot(bool bIsVisible);
179
180private:
181
182 struct FPlayerLayer : TSharedFromThis<FPlayerLayer>
183 {
185 SCanvas::FSlot* Slot;
186
188
189 FPlayerLayer()
190 : Slot(nullptr)
191 {
192 }
193 };
194
195 void UpdateLayout();
196
197 TSharedPtr<FPlayerLayer> FindOrCreatePlayerLayer(ULocalPlayer* LocalPlayer);
198 void RemoveMissingPlayerLayers(const TArray<ULocalPlayer*>& GamePlayers);
199 void RemovePlayerWidgets(ULocalPlayer* LocalPlayer);
200 void AddOrUpdatePlayerLayers(const FGeometry& AllottedGeometry, UGameViewportClient* ViewportClient, const TArray<ULocalPlayer*>& GamePlayers);
201 bool GetNormalizeRect(ULocalPlayer* LocalPlayer, FVector2D& OutPosition, FVector2D& OutSize) const;
202
203 void UpdateWindowTitleBar();
204 void UpdateWindowTitleBarVisibility();
205 void RequestToggleFullscreen();
206
207private:
208 FGeometry CachedGeometry;
209
211 TArray<TWeakPtr<SWidget>> GameLayers;
212
213 TAttribute<FSceneViewport*> SceneViewport;
214 TSharedPtr<SVerticalBox> WidgetHost;
215 TSharedPtr<SCanvas> PlayerCanvas;
216 TSharedPtr<SDebugCanvas> DebugCanvas;
217 TSharedPtr<SBox> ViewportSlotContainer;
218 TSharedPtr<STooltipPresenter> TooltipPresenter;
219
220 TSharedPtr<SWindowTitleBarArea> TitleBarAreaOverlay;
221 TSharedPtr<SWindowTitleBarArea> TitleBarAreaVerticalBox;
222 TSharedPtr<SBox> WindowTitleBarVerticalBox;
223 TSharedPtr<SBox> WindowTitleBarOverlay;
224 TSharedPtr<SOverlay> WindowOverlay;
225
226 struct FWindowTitleBarState
227 {
228 TSharedPtr<SWidget> ContentWidget;
230 bool bTitleBarDragEnabled;
231 bool bWindowButtonsVisible;
232 bool bTitleBarVisible;
233
234 FWindowTitleBarState() : ContentWidget(), Mode(EWindowTitleBarMode::Overlay), bTitleBarDragEnabled(false), bWindowButtonsVisible(false), bTitleBarVisible(false) {}
235 FWindowTitleBarState(const TSharedPtr<SWidget>& TitleBarContent, EWindowTitleBarMode InMode, bool bInTitleBarDragEnabled, bool bInWindowButtonsVisible, bool bInTitleBarVisible)
236 : ContentWidget(TitleBarContent)
237 , Mode(InMode)
238 , bTitleBarDragEnabled(bInTitleBarDragEnabled)
239 , bWindowButtonsVisible(bInWindowButtonsVisible && (PLATFORM_WINDOWS || PLATFORM_LINUX))
240 , bTitleBarVisible(bInTitleBarVisible && PLATFORM_DESKTOP)
241 {
242 }
243 };
244
245 FWindowTitleBarState WindowTitleBarState;
246 TSharedPtr<SWidget> DefaultTitleBarContentWidget;
247 float DefaultWindowTitleBarHeight;
248 bool bIsGameUsingBorderlessWindow;
249 FIntPoint ScaledDPIViewportReference;
250 bool bUseScaledDPI;
251 float CachedInverseDPIScale;
252};
#define PLATFORM_DESKTOP
Definition AndroidPlatform.h:33
PlayerIndex
Definition AppleControllerInterface.h:24
#define PLATFORM_WINDOWS
Definition Platform.h:12
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
#define PLATFORM_LINUX
Definition Platform.h:52
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define SLATE_ATTRIBUTE(AttrType, AttrName)
Definition DeclarativeSyntaxSupport.h:192
#define SLATE_END_ARGS()
Definition DeclarativeSyntaxSupport.h:116
#define SLATE_DEFAULT_SLOT(DeclarationType, SlotName)
Definition DeclarativeSyntaxSupport.h:444
FInt32Point FIntPoint
Definition MathFwd.h:124
#define UENUM(...)
Definition ObjectMacros.h:749
EWindowTitleBarMode
Definition SGameLayerManager.h:49
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition NameTypes.h:617
Definition PaintArgs.h:23
Definition SceneViewport.h:35
Definition SlateRect.h:26
Definition DrawElements.h:220
Definition WidgetStyle.h:15
Definition SGameLayerManager.h:58
virtual void NotifyPlayerAdded(int32 PlayerIndex, ULocalPlayer *AddedPlayer)=0
virtual FGeometry GetViewportWidgetHostPaintGeometry() const =0
virtual void NotifyPlayerRemoved(int32 PlayerIndex, ULocalPlayer *RemovedPlayer)=0
virtual void SetWindowTitleBarVisibility(bool bIsVisible)=0
virtual void SetSceneViewport(FSceneViewport *SceneViewport)=0
virtual bool AddLayerForPlayer(ULocalPlayer *Player, const FName &LayerName, TSharedRef< IGameLayer > Layer, int32 ZOrder)=0
virtual void SetWindowTitleBarState(const TSharedPtr< SWidget > &TitleBarContent, EWindowTitleBarMode Mode, bool bTitleBarDragEnabled, bool bWindowButtonsVisible, bool bTitleBarVisible)=0
virtual TSharedPtr< IGameLayer > FindLayerForPlayer(ULocalPlayer *Player, const FName &LayerName)=0
virtual void RemoveWidgetForPlayer(ULocalPlayer *Player, TSharedRef< SWidget > ViewportContent)=0
virtual void AddGameLayer(TSharedRef< SWidget > ViewportContent, int32 ZOrder)=0
virtual void ClearWidgetsForPlayer(ULocalPlayer *Player)=0
virtual void RemoveGameLayer(TSharedRef< SWidget > ViewportContent)=0
virtual FGeometry GetPlayerWidgetHostGeometry(ULocalPlayer *Player) const =0
virtual void SetDefaultWindowTitleBarHeight(float Height)=0
virtual void ClearWidgets()=0
virtual void AddWidgetForPlayer(ULocalPlayer *Player, TSharedRef< SWidget > ViewportContent, int32 ZOrder)=0
virtual void RestorePreviousWindowTitleBarState()=0
virtual FGeometry GetViewportWidgetHostGeometry() const =0
Definition SGameLayerManager.h:36
virtual ~IGameLayer()
Definition SGameLayerManager.h:44
virtual TSharedRef< SWidget > AsWidget()=0
Definition SCanvas.h:54
Definition SCompoundWidget.h:22
Definition DebugCanvas.h:21
Definition SGameLayerManager.h:91
virtual ENGINE_API void SetWindowTitleBarState(const TSharedPtr< SWidget > &TitleBarContent, EWindowTitleBarMode Mode, bool bTitleBarDragEnabled, bool bWindowButtonsVisible, bool bTitleBarVisible)
Definition SGameLayerManager.cpp:721
virtual ENGINE_API ~SGameLayerManager()
Definition SGameLayerManager.cpp:806
virtual ENGINE_API void RemoveGameLayer(TSharedRef< SWidget > ViewportContent) override
Definition SGameLayerManager.cpp:407
virtual ENGINE_API void NotifyPlayerAdded(int32 PlayerIndex, ULocalPlayer *AddedPlayer) override
Definition SGameLayerManager.cpp:279
virtual ENGINE_API void SetWindowTitleBarVisibility(bool bIsVisible)
Definition SGameLayerManager.cpp:742
virtual ENGINE_API void ClearWidgetsForPlayer(ULocalPlayer *Player) override
Definition SGameLayerManager.cpp:319
ENGINE_API SGameLayerManager()
Definition SGameLayerManager.cpp:90
virtual ENGINE_API void NotifyPlayerRemoved(int32 PlayerIndex, ULocalPlayer *RemovedPlayer) override
Definition SGameLayerManager.cpp:284
virtual ENGINE_API FGeometry GetPlayerWidgetHostGeometry(ULocalPlayer *Player) const override
Definition SGameLayerManager.cpp:267
ENGINE_API void SetUseFixedDPIValue(const bool bUseFixedDPI, const FIntPoint RefViewportSize=FIntPoint())
Definition SGameLayerManager.cpp:448
SLATE_BEGIN_ARGS(SGameLayerManager)
Definition SGameLayerManager.h:94
virtual ENGINE_API void RemoveWidgetForPlayer(ULocalPlayer *Player, TSharedRef< SWidget > ViewportContent) override
Definition SGameLayerManager.cpp:299
virtual ENGINE_API void SetSceneViewport(FSceneViewport *InSceneViewport) override
Definition SGameLayerManager.cpp:251
virtual ENGINE_API int32 OnPaint(const FPaintArgs &Args, const FGeometry &AllottedGeometry, const FSlateRect &MyCullingRect, FSlateWindowElementList &OutDrawElements, int32 LayerId, const FWidgetStyle &InWidgetStyle, bool bParentEnabled) const override
Definition SGameLayerManager.cpp:421
virtual ENGINE_API void SetDefaultWindowTitleBarHeight(float Height)
Definition SGameLayerManager.cpp:716
virtual ENGINE_API bool AddLayerForPlayer(ULocalPlayer *Player, const FName &LayerName, TSharedRef< IGameLayer > Layer, int32 ZOrder) override
Definition SGameLayerManager.cpp:339
EGameLayerOrder
Definition SGameLayerManager.h:107
virtual ENGINE_API bool OnVisualizeTooltip(const TSharedPtr< SWidget > &TooltipContent) override
Definition SGameLayerManager.cpp:441
ENGINE_API void Construct(const FArguments &InArgs)
Definition SGameLayerManager.cpp:98
virtual ENGINE_API void AddGameLayer(TSharedRef< SWidget > ViewportContent, int32 ZOrder) override
Definition SGameLayerManager.cpp:395
virtual ENGINE_API FGeometry GetViewportWidgetHostGeometry() const override
Definition SGameLayerManager.cpp:257
virtual ENGINE_API FGeometry GetViewportWidgetHostPaintGeometry() const override
Definition SGameLayerManager.cpp:262
virtual ENGINE_API void AddWidgetForPlayer(ULocalPlayer *Player, TSharedRef< SWidget > ViewportContent, int32 ZOrder) override
Definition SGameLayerManager.cpp:289
virtual ENGINE_API void RestorePreviousWindowTitleBarState()
Definition SGameLayerManager.cpp:736
virtual ENGINE_API void ClearWidgets() override
Definition SGameLayerManager.cpp:363
virtual ENGINE_API TSharedPtr< IGameLayer > FindLayerForPlayer(ULocalPlayer *Player, const FName &LayerName) override
Definition SGameLayerManager.cpp:328
ENGINE_API bool IsUsingFixedDPIValue() const
Definition SGameLayerManager.cpp:454
Definition SOverlay.h:44
Definition STooltipPresenter.h:16
Definition SBoxPanel.h:322
Definition SWindowTitleBarArea.h:25
Definition Array.h:670
Definition Attribute.h:17
Definition UnrealString.h.inl:34
Definition SharedPointer.h:1640
Definition SharedPointer.h:692
Definition SharedPointer.h:153
Definition GameViewportClient.h:71
Definition LocalPlayer.h:169
Mode
Definition AnimNode_TransitionPoseEvaluator.h:28
@ false
Definition radaudio_common.h:23
static SLATECORE_API const EVisibility SelfHitTestInvisible
Definition Visibility.h:26
Definition Geometry.h:40
Definition SlateStructs.h:13
Definition IntPoint.h:25