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;