From f4da98439943b580e66210e8088b056bf5e3cf80 Mon Sep 17 00:00:00 2001 From: Chandler Cox Date: Fri, 3 Feb 2023 13:27:53 -0600 Subject: [PATCH 1/2] Added function to get viewport size of the game window when in editor. This allows for certain functions to behave correctly. --- Source/Editor/Editor.cs | 17 +++++++++++++++++ Source/Editor/Managed/ManagedEditor.cpp | 18 ++++++++++++++++++ Source/Editor/Managed/ManagedEditor.h | 6 ++++++ Source/Engine/Level/Actors/Camera.cpp | 2 +- 4 files changed, 42 insertions(+), 1 deletion(-) diff --git a/Source/Editor/Editor.cs b/Source/Editor/Editor.cs index e5a949f3b..29549977e 100644 --- a/Source/Editor/Editor.cs +++ b/Source/Editor/Editor.cs @@ -1408,6 +1408,23 @@ namespace FlaxEditor } } + internal void Internal_GetGameWindowViewportSize(out Float2 result) + { + result = new Float2(1280, 720); + var gameWin = Windows.GameWin; + if (gameWin?.Root?.RootWindow is WindowRootControl root) + { + // Handle case when Game window is not selected in tab view + var dockedTo = gameWin.ParentDockPanel; + if (dockedTo != null && dockedTo.SelectedTab != gameWin && dockedTo.SelectedTab != null) + result = dockedTo.SelectedTab.Size * root.DpiScale; + else + result = gameWin.Viewport.Size * root.DpiScale; + + result = Float2.Round(result); + } + } + internal bool Internal_OnAppExit() { // In editor play mode (when main window is not closed) just skip engine exit and leave the play mode diff --git a/Source/Editor/Managed/ManagedEditor.cpp b/Source/Editor/Managed/ManagedEditor.cpp index fdabf9056..5b45ea7d6 100644 --- a/Source/Editor/Managed/ManagedEditor.cpp +++ b/Source/Editor/Managed/ManagedEditor.cpp @@ -457,6 +457,24 @@ Float2 ManagedEditor::GetGameWindowSize() return Float2::Zero; } +Float2 ManagedEditor::GetGameWindowViewportSize() +{ + if (HasManagedInstance()) + { + if (Internal_GetGameWindowSize == nullptr) + { + Internal_GetGameWindowSize = GetClass()->GetMethod("Internal_GetGameWindowViewportSize", 1); + ASSERT(Internal_GetGameWindowSize); + } + Float2 size; + void* params[1]; + params[0] = &size; + Internal_GetGameWindowSize->Invoke(GetManagedInstance(), params, nullptr); + return size; + } + return Float2::Zero; +} + bool ManagedEditor::OnAppExit() { if (!HasManagedInstance()) diff --git a/Source/Editor/Managed/ManagedEditor.h b/Source/Editor/Managed/ManagedEditor.h index 36fc0c234..cfacce2da 100644 --- a/Source/Editor/Managed/ManagedEditor.h +++ b/Source/Editor/Managed/ManagedEditor.h @@ -133,6 +133,12 @@ public: /// The size. Float2 GetGameWindowSize(); + /// + /// Gets the size of the game window viewport output. + /// + /// The size. + Float2 GetGameWindowViewportSize(); + /// /// Called when application code calls exit. Editor may end play mode or exit normally. /// diff --git a/Source/Engine/Level/Actors/Camera.cpp b/Source/Engine/Level/Actors/Camera.cpp index ea161c38a..3e19403cd 100644 --- a/Source/Engine/Level/Actors/Camera.cpp +++ b/Source/Engine/Level/Actors/Camera.cpp @@ -189,7 +189,7 @@ Viewport Camera::GetViewport() const #if USE_EDITOR // Editor if (Editor::Managed) - result.Size = Editor::Managed->GetGameWindowSize(); + result.Size = Editor::Managed->GetGameWindowViewportSize(); #else // game auto mainWin = Engine::MainWindow; From 4b9bbfb66306ca5ec674785dc8c64fefc2ea057e Mon Sep 17 00:00:00 2001 From: Chandler Cox Date: Sun, 5 Feb 2023 20:22:54 -0600 Subject: [PATCH 2/2] Change `GetGameWindowSize` to return game viewport size. --- Source/Editor/Editor.cs | 17 ----------------- Source/Editor/Managed/ManagedEditor.cpp | 18 ------------------ Source/Editor/Managed/ManagedEditor.h | 6 ------ Source/Engine/Level/Actors/Camera.cpp | 2 +- 4 files changed, 1 insertion(+), 42 deletions(-) diff --git a/Source/Editor/Editor.cs b/Source/Editor/Editor.cs index 29549977e..b8df413e1 100644 --- a/Source/Editor/Editor.cs +++ b/Source/Editor/Editor.cs @@ -1392,23 +1392,6 @@ namespace FlaxEditor } internal void Internal_GetGameWindowSize(out Float2 result) - { - result = new Float2(1280, 720); - var gameWin = Windows.GameWin; - if (gameWin?.Root?.RootWindow is WindowRootControl root) - { - // Handle case when Game window is not selected in tab view - var dockedTo = gameWin.ParentDockPanel; - if (dockedTo != null && dockedTo.SelectedTab != gameWin && dockedTo.SelectedTab != null) - result = dockedTo.SelectedTab.Size * root.DpiScale; - else - result = gameWin.Size * root.DpiScale; - - result = Float2.Round(result); - } - } - - internal void Internal_GetGameWindowViewportSize(out Float2 result) { result = new Float2(1280, 720); var gameWin = Windows.GameWin; diff --git a/Source/Editor/Managed/ManagedEditor.cpp b/Source/Editor/Managed/ManagedEditor.cpp index 5b45ea7d6..fdabf9056 100644 --- a/Source/Editor/Managed/ManagedEditor.cpp +++ b/Source/Editor/Managed/ManagedEditor.cpp @@ -457,24 +457,6 @@ Float2 ManagedEditor::GetGameWindowSize() return Float2::Zero; } -Float2 ManagedEditor::GetGameWindowViewportSize() -{ - if (HasManagedInstance()) - { - if (Internal_GetGameWindowSize == nullptr) - { - Internal_GetGameWindowSize = GetClass()->GetMethod("Internal_GetGameWindowViewportSize", 1); - ASSERT(Internal_GetGameWindowSize); - } - Float2 size; - void* params[1]; - params[0] = &size; - Internal_GetGameWindowSize->Invoke(GetManagedInstance(), params, nullptr); - return size; - } - return Float2::Zero; -} - bool ManagedEditor::OnAppExit() { if (!HasManagedInstance()) diff --git a/Source/Editor/Managed/ManagedEditor.h b/Source/Editor/Managed/ManagedEditor.h index cfacce2da..36fc0c234 100644 --- a/Source/Editor/Managed/ManagedEditor.h +++ b/Source/Editor/Managed/ManagedEditor.h @@ -133,12 +133,6 @@ public: /// The size. Float2 GetGameWindowSize(); - /// - /// Gets the size of the game window viewport output. - /// - /// The size. - Float2 GetGameWindowViewportSize(); - /// /// Called when application code calls exit. Editor may end play mode or exit normally. /// diff --git a/Source/Engine/Level/Actors/Camera.cpp b/Source/Engine/Level/Actors/Camera.cpp index 3e19403cd..ea161c38a 100644 --- a/Source/Engine/Level/Actors/Camera.cpp +++ b/Source/Engine/Level/Actors/Camera.cpp @@ -189,7 +189,7 @@ Viewport Camera::GetViewport() const #if USE_EDITOR // Editor if (Editor::Managed) - result.Size = Editor::Managed->GetGameWindowViewportSize(); + result.Size = Editor::Managed->GetGameWindowSize(); #else // game auto mainWin = Engine::MainWindow;