UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
LinuxApplication.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreTypes.h"
6#include "HAL/UnrealMemory.h"
7#include "Containers/Array.h"
9#include "Containers/Map.h"
10#include "Math/Vector2D.h"
12#include "Misc/CoreMisc.h"
18#include "Linux/LinuxWindow.h"
19#include "Linux/LinuxCursor.h"
20
21class IInputDevice;
22class IModularFeature;
23
25{
26public:
38
40
45
46public:
47 virtual ~FLinuxApplication();
48
49 virtual void DestroyApplication() override;
50
51 // FSelfRegisteringExec
52 virtual bool Exec(UWorld* InWorld, const TCHAR* Cmd, FOutputDevice& Ar) override;
53
54public:
56
57 virtual void PollGameDeviceState( const float TimeDelta ) override;
58
59 virtual void PumpMessages( const float TimeDelta ) override;
60
61 virtual void ProcessDeferredEvents( const float TimeDelta ) override;
62
64
66
67 virtual void SetCapture( const TSharedPtr< FGenericWindow >& InWindow ) override;
68
69 virtual void* GetCapture( void ) const override;
70
71 virtual void SetHighPrecisionMouseMode( const bool Enable, const TSharedPtr< FGenericWindow >& InWindow ) override;
72
73 virtual bool IsUsingHighPrecisionMouseMode() const override { return bUsingHighPrecisionMouseInput; }
74
75 virtual bool IsGamepadAttached() const override;
76
77 virtual FModifierKeysState GetModifierKeys() const override;
78
79 virtual FPlatformRect GetWorkArea( const FPlatformRect& CurrentWindow ) const override;
80
85
87
89
91
93
95
97
98 EWindowZone::Type WindowHitTest( const TSharedPtr< FLinuxWindow > &window, int x, int y );
99
101
102 virtual bool IsCursorDirectlyOverSlateWindow() const override;
103
105
107 inline bool IsForeground()
108 {
109 // if there are no windows, consider ourselves foreground so servers and commandlets aren't impacted
110 return (Windows.Num() > 0) ? bActivateApp : true;
111 }
112
122
125
137 void GetWindowPropertiesInEventLoop(SDL_HWindow NativeWindow, FWindowProperties& Properties);
138
139 virtual bool IsMouseAttached() const override;
140
147 {
148 return CurrentlyActiveWindow;
149 }
150
157 {
158 return CurrentFocusWindow;
159 }
160
161private:
162
164
174
175 void UpdateMouseCaptureWindow( SDL_HWindow TargetWindow );
176
177 void ProcessDeferredMessage( SDL_Event Event );
178
186 static bool GeneratesKeyCharMessage(const SDL_KeyboardEvent & KeyDownEvent);
187
189 void ActivateApplication();
190
192 void DeactivateApplication();
193
198 void ActivateWindow(const TSharedPtr< FLinuxWindow >& Window);
199
200 void ActivateRootWindow(const TSharedPtr< FLinuxWindow >& Window);
201
203
205 bool HandleCursorCommand(const TCHAR* Cmd, FOutputDevice& Ar);
206
208 bool HandleWindowCommand(const TCHAR* Cmd, FOutputDevice& Ar);
209
210private:
211
212 void RefreshDisplayCache();
213
215 FVector2D GetTouchEventLocation(SDL_HWindow NativeWindow, SDL_Event TouchEvent);
216
218 int GetFirstFreeTouchId();
219
220public:
222 {
223 return this;
224 }
225 // IInputInterface overrides
226 virtual void SetForceFeedbackChannelValue (int32 ControllerId, FForceFeedbackChannelType ChannelType, float Value) override;
227 virtual void SetForceFeedbackChannelValues(int32 ControllerId, const FForceFeedbackValues &Values) override;
228 virtual void SetHapticFeedbackValues(int32 ControllerId, int32 Hand, const FHapticFeedbackValues& Values) override;
229 virtual void SetLightColor(int32 ControllerId, FColor Color) override { }
230 virtual void ResetLightColor(int32 ControllerId) override { }
231
232private:
233 void AddGameController(SDL_JoystickID Id);
234 void RemoveGameController(SDL_JoystickID Id);
235
236 void OnInputDeviceModuleRegistered(const FName& Type, IModularFeature* ModularFeature);
237
239 struct FTouchContext
240 {
242 int TouchIndex;
243
245 SDL_TouchID DeviceId;
246
248 FVector2D Location;
249 };
250
253
255 TArray<TOptional<uint64>> TouchIds;
256
257 struct SDLControllerState
258 {
261
263 bool AnalogOverThreshold[10];
264
266 FInputDeviceId DeviceId;
267
270
272 SDL_Haptic* Haptic;
274 int EffectId;
276 bool bEffectRunning;
278 FForceFeedbackValues ForceFeedbackValues;
279
280 SDLControllerState()
281 : Controller(nullptr)
282 , DeviceId(INPUTDEVICEID_NONE)
283 , Haptic(nullptr)
284 , EffectId(-1)
285 , bEffectRunning(false)
286 {
287 FMemory::Memzero(AnalogOverThreshold);
288 }
289
290 void UpdateHapticEffect();
291 };
292
293 TArray< SDL_Event > PendingEvents;
294
296
298 TArray< TSharedRef< FLinuxWindow > > NotificationWindows;
299
301 TArray< TSharedRef< FLinuxWindow > > RevertFocusStack;
302
308 TMap<SDL_HWindow, FWindowProperties> SavedWindowPropertiesForEventLoop;
309
310 int32 bAllowedToDeferMessageProcessing;
311
313 bool bUsingHighPrecisionMouseInput;
314
316 bool bIsMouseCursorLocked;
317
319 bool bIsMouseCaptureEnabled;
320
322 bool bFirstFrameOfWindowMove = false;
323
325 TSharedPtr< FLinuxWindow > CurrentlyActiveWindow;
326 TSharedPtr< FLinuxWindow > CurrentFocusWindow;
327 TSharedPtr< FLinuxWindow > CurrentClipWindow;
328 TSharedPtr< FLinuxWindow > CurrentUnderCursorWindow;
329
331 TArray<FString> DragAndDropQueue;
332
334 TArray<FString> DragAndDropTextQueue;
335
337 TSharedPtr< FLinuxWindow > PreviousActiveWindow;
338
339 SDL_HWindow MouseCaptureWindow;
340
342
343 float fMouseWheelScrollAccel;
344
346 TArray< TSharedPtr<class IInputDevice> > ExternalInputDevices;
347
349 bool bHasLoadedInputPlugins;
350
352 bool bInsideOwnWindow;
353
355 bool bIsDragWindowButtonPressed;
356
358 bool bActivateApp;
359
361 double FocusOutDeactivationTime;
362
364 mutable TArray<SDL_Rect> CachedDisplays;
365
367 mutable double LastTimeCachedDisplays;
368};
369
constexpr FInputDeviceId INPUTDEVICEID_NONE
Definition CoreMiscDefines.h:590
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
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
EWindowTransparency
Definition GenericWindowDefinition.h:35
FForceFeedbackChannelType
Definition IInputInterface.h:17
FLinuxApplication * LinuxApplication
Definition LinuxApplication.cpp:63
SDL_Window * SDL_HWindow
Definition LinuxWindow.h:19
Definition LinuxApplication.h:25
virtual void SetMessageHandler(const TSharedRef< class FGenericApplicationMessageHandler > &InMessageHandler) override
Definition LinuxApplication.cpp:188
virtual TSharedPtr< FGenericWindow > GetWindowUnderCursor() override
Definition LinuxApplication.cpp:225
virtual EWindowTransparency GetWindowTransparencySupport() const override
Definition LinuxApplication.h:81
virtual FPlatformRect GetWorkArea(const FPlatformRect &CurrentWindow) const override
Definition LinuxApplication.cpp:1431
virtual void DestroyApplication() override
Definition LinuxApplication.cpp:142
void RemoveNotificationWindow(SDL_HWindow HWnd)
Definition LinuxApplication.cpp:1589
virtual bool IsCursorDirectlyOverSlateWindow() const override
Definition LinuxApplication.cpp:220
virtual bool IsMouseAttached() const override
Definition LinuxApplication.cpp:1869
void GetWindowPropertiesInEventLoop(SDL_HWindow NativeWindow, FWindowProperties &Properties)
Definition LinuxApplication.cpp:1839
virtual void PollGameDeviceState(const float TimeDelta) override
Definition LinuxApplication.cpp:1194
virtual ~FLinuxApplication()
Definition LinuxApplication.cpp:131
void RemoveEventWindow(SDL_HWindow Window)
Definition LinuxApplication.cpp:1309
virtual void SetLightColor(int32 ControllerId, FColor Color) override
Definition LinuxApplication.h:229
void SaveWindowPropertiesForEventLoop(void)
Definition LinuxApplication.cpp:1785
TSharedPtr< FLinuxWindow > GetCurrentActiveWindow()
Definition LinuxApplication.h:146
virtual TSharedRef< FGenericWindow > MakeWindow() override
Definition LinuxApplication.cpp:159
virtual bool IsUsingHighPrecisionMouseMode() const override
Definition LinuxApplication.h:73
bool IsForeground()
Definition LinuxApplication.h:107
virtual void SetForceFeedbackChannelValues(int32 ControllerId, const FForceFeedbackValues &Values) override
Definition LinuxApplication.cpp:1929
void AddPendingEvent(SDL_Event event)
Definition LinuxApplication.cpp:237
virtual void PumpMessages(const float TimeDelta) override
Definition LinuxApplication.cpp:215
void RaiseNotificationWindows(const TSharedPtr< FLinuxWindow > &ParentWindow)
Definition LinuxApplication.cpp:1603
void ClearWindowPropertiesAfterEventLoop(void)
Definition LinuxApplication.cpp:1807
virtual void ResetLightColor(int32 ControllerId) override
Definition LinuxApplication.h:230
virtual void SetHighPrecisionMouseMode(const bool Enable, const TSharedPtr< FGenericWindow > &InWindow) override
Definition LinuxApplication.cpp:1387
virtual void SetHapticFeedbackValues(int32 ControllerId, int32 Hand, const FHapticFeedbackValues &Values) override
Definition LinuxApplication.cpp:1960
void RemoveRevertFocusWindow(SDL_HWindow HWnd)
Definition LinuxApplication.cpp:1617
EWindowZone::Type WindowHitTest(const TSharedPtr< FLinuxWindow > &window, int x, int y)
Definition LinuxApplication.cpp:1174
virtual bool Exec(UWorld *InWorld, const TCHAR *Cmd, FOutputDevice &Ar) override
Definition LinuxApplication.cpp:1729
static FLinuxApplication * CreateLinuxApplication()
Definition LinuxApplication.cpp:65
virtual void InitializeWindow(const TSharedRef< FGenericWindow > &Window, const TSharedRef< FGenericWindowDefinition > &InDefinition, const TSharedPtr< FGenericWindow > &InParent, const bool bShowImmediately) override
Definition LinuxApplication.cpp:164
virtual void SetForceFeedbackChannelValue(int32 ControllerId, FForceFeedbackChannelType ChannelType, float Value) override
Definition LinuxApplication.cpp:1888
virtual void * GetCapture(void) const override
Definition LinuxApplication.cpp:1344
UserDefinedEvents
Definition LinuxApplication.h:42
@ CheckForDeactivation
Definition LinuxApplication.h:43
virtual void ProcessDeferredEvents(const float TimeDelta) override
Definition LinuxApplication.cpp:1179
virtual void SetCapture(const TSharedPtr< FGenericWindow > &InWindow) override
Definition LinuxApplication.cpp:1338
virtual FModifierKeysState GetModifierKeys() const override
Definition LinuxApplication.cpp:1323
TSharedPtr< FLinuxWindow > GetCurrentFocusWindow()
Definition LinuxApplication.h:156
void CheckIfApplicatioNeedsDeactivation()
Definition LinuxApplication.cpp:1126
virtual bool IsGamepadAttached() const override
Definition LinuxApplication.cpp:1349
virtual IInputInterface * GetInputInterface() override
Definition LinuxApplication.h:221
TSharedPtr< FLinuxWindow > FindWindowBySDLWindow(SDL_Window *win)
Definition LinuxApplication.cpp:210
Definition GenericApplication.h:75
Definition NameTypes.h:617
Definition OutputDevice.h:133
Definition CoreMisc.h:28
Definition GenericApplication.h:437
Definition IInputDevice.h:17
Definition IInputInterface.h:309
Definition IModularFeature.h:12
Definition Array.h:670
Definition UnrealString.h.inl:34
Definition World.h:918
Type
Definition GenericApplicationMessageHandler.h:87
Definition MinimalWindowsApi.h:62
@ false
Definition radaudio_common.h:23
Definition Color.h:486
Definition IInputInterface.h:26
Definition IInputInterface.h:70
Definition CoreMiscDefines.h:524
Definition LinuxApplication.h:31
FVector2D Size
Definition LinuxApplication.h:36
FVector2D Location
Definition LinuxApplication.h:33
static UE_FORCEINLINE_HINT void * Memzero(void *Dest, SIZE_T Count)
Definition UnrealMemory.h:131
Definition GenericApplication.h:320