#pragma once #include "Panel.h" #include "XCUIBackend/XCUIHostedPreviewPresenter.h" #include "XCUIBackend/XCUIInputBridge.h" #include "XCUIBackend/XCUIPanelCanvasHost.h" #include "XCUIBackend/XCUILayoutLabRuntime.h" #include #include namespace XCEngine { namespace NewEditor { class XCUILayoutLabPanel : public Panel { public: explicit XCUILayoutLabPanel( ::XCEngine::Editor::XCUIBackend::XCUIWin32InputSource* inputSource = nullptr); XCUILayoutLabPanel( ::XCEngine::Editor::XCUIBackend::XCUIWin32InputSource* inputSource, std::unique_ptr<::XCEngine::Editor::XCUIBackend::IXCUIHostedPreviewPresenter> previewPresenter); ~XCUILayoutLabPanel() override = default; void Render() override; void SetHostedPreviewEnabled(bool enabled); void SetHostedPreviewPresenter( std::unique_ptr<::XCEngine::Editor::XCUIBackend::IXCUIHostedPreviewPresenter> previewPresenter); void SetCanvasHost( std::unique_ptr<::XCEngine::Editor::XCUIBackend::IXCUIPanelCanvasHost> canvasHost); bool IsHostedPreviewEnabled() const { return m_hostedPreviewEnabled; } bool IsUsingNativeHostedPreview() const; const ::XCEngine::Editor::XCUIBackend::XCUILayoutLabFrameResult& GetFrameResult() const; const ::XCEngine::Editor::XCUIBackend::XCUIHostedPreviewStats& GetLastPreviewStats() const; bool TryGetElementRect(const std::string& elementId, ::XCEngine::UI::UIRect& outRect) const; private: bool m_lastReloadSucceeded = false; bool m_hostedPreviewEnabled = true; ::XCEngine::Editor::XCUIBackend::XCUIWin32InputSource* m_inputSource = nullptr; ::XCEngine::Editor::XCUIBackend::XCUILayoutLabRuntime m_runtime; std::unique_ptr<::XCEngine::Editor::XCUIBackend::IXCUIHostedPreviewPresenter> m_previewPresenter; std::unique_ptr<::XCEngine::Editor::XCUIBackend::IXCUIPanelCanvasHost> m_canvasHost; ::XCEngine::Editor::XCUIBackend::XCUIHostedPreviewStats m_lastPreviewStats = {}; }; } // namespace NewEditor } // namespace XCEngine