Agrarsense
Public Member Functions | Private Member Functions | Private Attributes | List of all members
FUnrealWindow Class Reference

#include <UnrealWindow.h>

Public Member Functions

 FUnrealWindow (int32 Width, int32 Height, FString WindowName="Camera", bool IsInitiallyMinized=false)
 
 ~FUnrealWindow ()
 
void SetupComponent (UTextureRenderTarget2D *TextureRenderTarget)
 
void ResizeWindow (int32 Width, int32 Height)
 
void DestroyWindow ()
 
void UpdateTexture (FTextureResource *Texture)
 
void DrawManually ()
 
TSharedPtr< FSceneViewport > GetSceneViewport ()
 
TSharedPtr< SWindow > GetSWindow ()
 
void SetAutomaticDraw (bool Draw)
 
bool IsDrawing ()
 
void AddUWidgetToWindow (UWidget *WidgetToAdd)
 
void RemoveUWidgetFromWindow (UWidget *WidgetToRemove)
 
int GetWindowWidth ()
 
int GetWindowHeight ()
 

Private Member Functions

void OnWindowClosed (const TSharedRef< SWindow > &Window)
 

Private Attributes

int32 WindowWidth = 1280
 
int32 WindowHeight = 720
 
int32 AddedWidgetCount = 0
 
bool DrawToScreen = true
 
FOnWindowClosed onWindowClosedDelegate
 
TSharedPtr< FUnrealWindowViewportClientViewportClient
 
TSharedPtr< SUnrealWindowViewportViewport
 
TSharedPtr< FSceneViewport > SceneViewport
 
TSharedPtr< SViewport > sViewport
 
TSharedPtr< SWindow > sWindow
 
TSharedPtr< SOverlay > FullScreenOverlay
 
TArray< FAddedWidgetInfoAddedWidgets
 

Detailed Description

Definition at line 35 of file UnrealWindow.h.

Constructor & Destructor Documentation

◆ FUnrealWindow()

FUnrealWindow::FUnrealWindow ( int32  Width,
int32  Height,
FString  WindowName = "Camera",
bool  IsInitiallyMinized = false 
)

Create new Unreal Window

Parameters
widthwidth of Window
heightheight of Window
windowNameWindow title name

Definition at line 12 of file UnrealWindow.cpp.

13{
14 // Set window width and height
15 WindowWidth = Width;
16 WindowHeight = Height;
17
18 // Do not support Window minimize button,
19 // because this causes Camera sensors to stop rendering when window is minimized.
20 // This is default behavior in Unreal Engine.
21 bool SupportMinimize = false;
22
23#ifdef EngineAllowRenderingMinimized
24 // Unless when we are using AGRARSENSE Unreal Engine fork,
25 // where SWindow has extra boolean which allows rendering when a window is minimized.
26 SupportMinimize = true;
27#endif
28
29 // Create SWindow
30 sWindow = SNew(SWindow)
31 .Title(FText::FromString(WindowName))
32 .ScreenPosition(FVector2D(0, 0))
33 .ClientSize(FVector2D(WindowWidth, WindowHeight))
34 .AutoCenter(EAutoCenter::PreferredWorkArea)
35 .UseOSWindowBorder(true)
36 .SaneWindowPlacement(false)
37 .SizingRule(ESizingRule::UserSized)
38 .SupportsMinimize(SupportMinimize)
39#if PLATFORM_LINUX
40 .FocusWhenFirstShown(IsInitiallyMinized) // only for Linux, on Windows this causes Window to be wrong size for some reason
41#endif
42 .IsInitiallyMinimized(IsInitiallyMinized);
43
44#ifdef EngineAllowRenderingMinimized
45 // Set SWindow AllowRenderingMinimized to true that allows SWindow to be rendered even when minimized.
46 // Defined and implemented in AGRARSENSE Unreal Engine fork
47 sWindow->AllowRenderingMinimized = true;
48#endif
49
50 // Add window to FSlateApplication
51 FSlateApplication::Get().AddWindow(sWindow.ToSharedRef());
52
53 // Assign window events delegates
55 sWindow->SetOnWindowClosed(onWindowClosedDelegate);
56
57 // Create and assign viewport to window
59 sWindow->SetContent(Viewport.ToSharedRef());
60
61 // Set references
62 ViewportClient = Viewport->ViewportClient;
63 SceneViewport = Viewport->SceneViewport;
64 sViewport = Viewport->Viewport;
65
66 // Resize window
68}
TSharedPtr< FUnrealWindowViewportClient > ViewportClient
Definition: UnrealWindow.h:160
FOnWindowClosed onWindowClosedDelegate
Definition: UnrealWindow.h:158
TSharedPtr< SUnrealWindowViewport > Viewport
Definition: UnrealWindow.h:161
void OnWindowClosed(const TSharedRef< SWindow > &Window)
int32 WindowHeight
Definition: UnrealWindow.h:152
void ResizeWindow(int32 Width, int32 Height)
TSharedPtr< SWindow > sWindow
Definition: UnrealWindow.h:165
TSharedPtr< FSceneViewport > SceneViewport
Definition: UnrealWindow.h:163
TSharedPtr< SViewport > sViewport
Definition: UnrealWindow.h:164

References OnWindowClosed(), onWindowClosedDelegate, ResizeWindow(), SceneViewport, sViewport, sWindow, Viewport, ViewportClient, WindowHeight, and WindowWidth.

◆ ~FUnrealWindow()

FUnrealWindow::~FUnrealWindow ( )

Definition at line 70 of file UnrealWindow.cpp.

71{
73
74 FullScreenOverlay.Reset();
75 ViewportClient.Reset();
76 SceneViewport.Reset();
77 sViewport.Reset();
78 Viewport.Reset();
79 sWindow.Reset();
80
81 AddedWidgets.Empty();
82}
TArray< FAddedWidgetInfo > AddedWidgets
Definition: UnrealWindow.h:170
TSharedPtr< SOverlay > FullScreenOverlay
Definition: UnrealWindow.h:167

References AddedWidgets, FullScreenOverlay, onWindowClosedDelegate, SceneViewport, sViewport, sWindow, Viewport, and ViewportClient.

Member Function Documentation

◆ AddUWidgetToWindow()

void FUnrealWindow::AddUWidgetToWindow ( UWidget *  WidgetToAdd)

Add a UWidget to this window.

Parameters
WidgetToAdd- The UWidget to add to this window.

Definition at line 149 of file UnrealWindow.cpp.

150{
151 if (!WidgetToAdd || !sWindow.IsValid())
152 {
153 return;
154 }
155
156 if (!FullScreenOverlay.IsValid())
157 {
158 // Create a full-screen SOverlay to contain the camera image and custom widget
159 FullScreenOverlay = SNew(SOverlay);
160
161 // Create a slot for current viewport widget
162 FullScreenOverlay->AddSlot(0)
163 .HAlign(HAlign_Fill)
164 .VAlign(VAlign_Fill)
165 [
166 Viewport.ToSharedRef()
167 ];
168 }
169
171
172 // Create a slot for the new widget
174 .HAlign(HAlign_Fill)
175 .VAlign(VAlign_Fill)
176 [
177 WidgetToAdd->TakeWidget()
178 ];
179
180 // Store information about the added widget
181 FAddedWidgetInfo WidgetInfo;
182 WidgetInfo.Widget = WidgetToAdd;
183 WidgetInfo.Index = AddedWidgetCount;
184 AddedWidgets.Add(WidgetInfo);
185
186 // Set the updated overlay as the window content
187 sWindow->SetContent(FullScreenOverlay.ToSharedRef());
188}
int32 AddedWidgetCount
Definition: UnrealWindow.h:154
UWidget * Widget
Definition: UnrealWindow.h:22

References AddedWidgetCount, AddedWidgets, FullScreenOverlay, FAddedWidgetInfo::Index, sWindow, Viewport, and FAddedWidgetInfo::Widget.

◆ DestroyWindow()

void FUnrealWindow::DestroyWindow ( )

Destroy this Window

Definition at line 126 of file UnrealWindow.cpp.

127{
128 if (sWindow.IsValid())
129 {
130 sWindow->RequestDestroyWindow();
131 }
132}

References sWindow.

Referenced by OnWindowClosed().

◆ DrawManually()

void FUnrealWindow::DrawManually ( )

Definition at line 105 of file UnrealWindow.cpp.

106{
107 if (DrawToScreen)
108 {
109#if WITH_EDITOR
110 UE_LOG(LogTemp, Warning, TEXT("UnrealWindow.cpp: We are already drawing automatically, we should not draw manually!"));
111#endif
112 return;
113 }
114
115 if (SceneViewport.IsValid())
116 {
117 SceneViewport->Draw();
118 }
119}

References DrawToScreen, and SceneViewport.

◆ GetSceneViewport()

TSharedPtr< FSceneViewport > FUnrealWindow::GetSceneViewport ( )
inline

Get FSceneViewport TSharedPtr

Returns
TSharedPtr<FSceneViewport>

Definition at line 83 of file UnrealWindow.h.

84 {
85 return SceneViewport;
86 }

References SceneViewport.

◆ GetSWindow()

TSharedPtr< SWindow > FUnrealWindow::GetSWindow ( )
inline

Get SWindow TSharedPtr

Returns
TSharedPtr<SWindow>

Definition at line 92 of file UnrealWindow.h.

93 {
94 return sWindow;
95 }

References sWindow.

◆ GetWindowHeight()

int FUnrealWindow::GetWindowHeight ( )
inline

Definition at line 138 of file UnrealWindow.h.

139 {
140 return WindowHeight;
141 }

References WindowHeight.

◆ GetWindowWidth()

int FUnrealWindow::GetWindowWidth ( )
inline

Definition at line 133 of file UnrealWindow.h.

134 {
135 return WindowWidth;
136 }

References WindowWidth.

◆ IsDrawing()

bool FUnrealWindow::IsDrawing ( )
inline

Check if this window is currently in the process of drawing to the screen.

Returns
True if drawing to the screen is enabled, false otherwise.

Definition at line 115 of file UnrealWindow.h.

116 {
117 return DrawToScreen;
118 }

References DrawToScreen.

◆ OnWindowClosed()

void FUnrealWindow::OnWindowClosed ( const TSharedRef< SWindow > &  Window)
private

On Window closed event from SWindow

Parameters
WindowWindow reference

Definition at line 121 of file UnrealWindow.cpp.

122{
124}
void DestroyWindow()

References DestroyWindow().

Referenced by FUnrealWindow().

◆ RemoveUWidgetFromWindow()

void FUnrealWindow::RemoveUWidgetFromWindow ( UWidget *  WidgetToRemove)

Remove a UWidget from this window.

Parameters
WidgetToRemove- The UWidget to remove from this window.

Definition at line 190 of file UnrealWindow.cpp.

191{
192 if (!WidgetToRemove || !sWindow.IsValid() || !FullScreenOverlay.IsValid())
193 {
194 return;
195 }
196
197 // Not the prettiest but works for this use case.
198 int32 WidgetIndexToRemove = -1;
199 for (int32 Index = 0; Index < AddedWidgets.Num(); ++Index)
200 {
201 if (AddedWidgets[Index].Widget == WidgetToRemove)
202 {
203 WidgetIndexToRemove = Index;
204 break;
205 }
206 }
207
208 if (WidgetIndexToRemove != -1)
209 {
210 // Remove Widget from slot (arrays start at 0 but slot 0 is the camera view)
211 FullScreenOverlay->RemoveSlot(WidgetIndexToRemove + 1);
212
213 // Set the updated overlay as the window content
214 sWindow->SetContent(FullScreenOverlay.ToSharedRef());
215
216 // Remove the widget info from the array
217 AddedWidgets.RemoveAt(WidgetIndexToRemove);
218 }
219}

References AddedWidgets, FullScreenOverlay, and sWindow.

◆ ResizeWindow()

void FUnrealWindow::ResizeWindow ( int32  Width,
int32  Height 
)

Resize Window into given size.

Parameters
widthwidth of Window
heightheight of Window

Definition at line 134 of file UnrealWindow.cpp.

135{
136 if (ViewportClient.IsValid() && SceneViewport.IsValid() && sWindow.IsValid())
137 {
138 WindowWidth = width;
139 WindowHeight = height;
140
143
144 SceneViewport->SetViewportSize(WindowWidth, WindowHeight);
145 sWindow->Resize(FVector2D(WindowWidth, WindowHeight));
146 }
147}

References SceneViewport, sWindow, ViewportClient, WindowHeight, and WindowWidth.

Referenced by FUnrealWindow().

◆ SetAutomaticDraw()

void FUnrealWindow::SetAutomaticDraw ( bool  Draw)
inline

Set whether automatic drawing to the screen is enabled. If set to false, you must call DrawManually() whenever you want to draw anything to the window.

Parameters
draw- If true, automatic drawing is enabled; if false, manual drawing is required.

Definition at line 102 of file UnrealWindow.h.

103 {
104 DrawToScreen = Draw;
105 if (Viewport.IsValid())
106 {
107 Viewport->DrawToScreen = DrawToScreen;
108 }
109 }

References DrawToScreen, and Viewport.

◆ SetupComponent()

void FUnrealWindow::SetupComponent ( UTextureRenderTarget2D *  TextureRenderTarget)

Setup UTextureRenderTarget2D in order to render to this Window

Parameters
textureRenderTargetUTextureRenderTarget2D for rendering into Window

Definition at line 84 of file UnrealWindow.cpp.

85{
86 if (ViewportClient.IsValid() && TextureRenderTarget)
87 {
88 ViewportClient->TextRenderTarget2D = TextureRenderTarget;
89 ViewportClient->texture = TextureRenderTarget->GetResource();
92 }
93}

References ViewportClient, WindowHeight, and WindowWidth.

◆ UpdateTexture()

void FUnrealWindow::UpdateTexture ( FTextureResource *  Texture)

Definition at line 95 of file UnrealWindow.cpp.

96{
97 if (ViewportClient.IsValid() && Texture)
98 {
99 ViewportClient->texture = Texture;
102 }
103}

References ViewportClient, WindowHeight, and WindowWidth.

Member Data Documentation

◆ AddedWidgetCount

int32 FUnrealWindow::AddedWidgetCount = 0
private

Definition at line 154 of file UnrealWindow.h.

Referenced by AddUWidgetToWindow().

◆ AddedWidgets

TArray<FAddedWidgetInfo> FUnrealWindow::AddedWidgets
private

Definition at line 170 of file UnrealWindow.h.

Referenced by AddUWidgetToWindow(), RemoveUWidgetFromWindow(), and ~FUnrealWindow().

◆ DrawToScreen

bool FUnrealWindow::DrawToScreen = true
private

Definition at line 156 of file UnrealWindow.h.

Referenced by DrawManually(), IsDrawing(), and SetAutomaticDraw().

◆ FullScreenOverlay

TSharedPtr<SOverlay> FUnrealWindow::FullScreenOverlay
private

Definition at line 167 of file UnrealWindow.h.

Referenced by AddUWidgetToWindow(), RemoveUWidgetFromWindow(), and ~FUnrealWindow().

◆ onWindowClosedDelegate

FOnWindowClosed FUnrealWindow::onWindowClosedDelegate
private

Definition at line 158 of file UnrealWindow.h.

Referenced by FUnrealWindow(), and ~FUnrealWindow().

◆ SceneViewport

TSharedPtr<FSceneViewport> FUnrealWindow::SceneViewport
private

◆ sViewport

TSharedPtr<SViewport> FUnrealWindow::sViewport
private

Definition at line 164 of file UnrealWindow.h.

Referenced by FUnrealWindow(), and ~FUnrealWindow().

◆ sWindow

TSharedPtr<SWindow> FUnrealWindow::sWindow
private

◆ Viewport

TSharedPtr<SUnrealWindowViewport> FUnrealWindow::Viewport
private

◆ ViewportClient

TSharedPtr<FUnrealWindowViewportClient> FUnrealWindow::ViewportClient
private

◆ WindowHeight

int32 FUnrealWindow::WindowHeight = 720
private

◆ WindowWidth

int32 FUnrealWindow::WindowWidth = 1280
private

The documentation for this class was generated from the following files: