diff --git a/Plugins/Cog/Source/CogImgui/Private/CogImguiModule.cpp b/Plugins/Cog/Source/CogImgui/Private/CogImguiModule.cpp index 11efe59..f2069df 100644 --- a/Plugins/Cog/Source/CogImgui/Private/CogImguiModule.cpp +++ b/Plugins/Cog/Source/CogImgui/Private/CogImguiModule.cpp @@ -37,7 +37,7 @@ void FCogImguiModule::Initialize() } //-------------------------------------------------------------------------------------------------------------------------- -TSharedPtr FCogImguiModule::CreateImGuiViewport(UGameViewportClient* GameViewport, FCogImguiRenderFunction Render, ImFontAtlas* FontAtlas /*= nullptr*/) +TSharedPtr FCogImguiModule::CreateImGuiWidget(UGameViewportClient* GameViewport, FCogImguiRenderFunction Render, ImFontAtlas* FontAtlas /*= nullptr*/) { if (bIsInitialized == false) { @@ -72,6 +72,24 @@ TSharedPtr FCogImguiModule::CreateImGuiViewport(UGameViewportCl return ImguiWidget; } +//-------------------------------------------------------------------------------------------------------------------------- +void FCogImguiModule::DestroyImGuiWidget(TSharedPtr ImGuiWidget) +{ + UGameViewportClient* Viewport = ImGuiWidget->GetGameViewport().Get(); + if (Viewport == nullptr) + { + return; + } + + TSharedPtr ParentWidget = ImGuiWidget->GetParentWidget(); + if (ParentWidget.IsValid() == false) + { + return; + } + + Viewport->RemoveViewportWidgetContent(ParentWidget.ToSharedRef()); +} + //-------------------------------------------------------------------------------------------------------------------------- #undef LOCTEXT_NAMESPACE diff --git a/Plugins/Cog/Source/CogImgui/Public/CogImguiModule.h b/Plugins/Cog/Source/CogImgui/Public/CogImguiModule.h index 7151032..32bcdd8 100644 --- a/Plugins/Cog/Source/CogImgui/Public/CogImguiModule.h +++ b/Plugins/Cog/Source/CogImgui/Public/CogImguiModule.h @@ -23,7 +23,9 @@ public: virtual void ShutdownModule() override; //---------------------------------------------------------------------------------------------------------------------- - TSharedPtr CreateImGuiViewport(UGameViewportClient* GameViewport, FCogImguiRenderFunction Render, ImFontAtlas* FontAtlas = nullptr); + TSharedPtr CreateImGuiWidget(UGameViewportClient* GameViewport, FCogImguiRenderFunction Render, ImFontAtlas* FontAtlas = nullptr); + + void DestroyImGuiWidget(TSharedPtr ImGuiWidget); FCogImguiTextureManager& GetTextureManager() { return TextureManager; } diff --git a/Plugins/Cog/Source/CogImgui/Public/CogImguiWidget.h b/Plugins/Cog/Source/CogImgui/Public/CogImguiWidget.h index 0425b8e..371e098 100644 --- a/Plugins/Cog/Source/CogImgui/Public/CogImguiWidget.h +++ b/Plugins/Cog/Source/CogImgui/Public/CogImguiWidget.h @@ -65,6 +65,8 @@ public: void SetAsCurrentContext(); + TWeakObjectPtr GetGameViewport() const { return GameViewport; } + protected: FVector2D TransformScreenPointToImGui(const FGeometry& MyGeometry, const FVector2D& Point) const; diff --git a/Plugins/Cog/Source/CogWindow/Private/CogWindowManager.cpp b/Plugins/Cog/Source/CogWindow/Private/CogWindowManager.cpp index 034b86e..86a8f2e 100644 --- a/Plugins/Cog/Source/CogWindow/Private/CogWindowManager.cpp +++ b/Plugins/Cog/Source/CogWindow/Private/CogWindowManager.cpp @@ -38,7 +38,7 @@ void UCogWindowManager::PostInitProperties() //-------------------------------------------------------------------------------------------------------------------------- void UCogWindowManager::InitializeInternal() { - ImGuiWidget = FCogImguiModule::Get().CreateImGuiViewport(GEngine->GameViewport, [this](float DeltaTime) { Render(DeltaTime); }); + ImGuiWidget = FCogImguiModule::Get().CreateImGuiWidget(GEngine->GameViewport, [this](float DeltaTime) { Render(DeltaTime); }); ImGuiSettingsHandler IniHandler; IniHandler.TypeName = "Cog"; @@ -98,6 +98,8 @@ void UCogWindowManager::Shutdown() IConsoleManager::Get().UnregisterConsoleObject(ConsoleCommand); } + FCogImguiModule::Get().DestroyImGuiWidget(ImGuiWidget); + SaveConfig(); }