Integrate XCUI shell state and runtime frame seams

This commit is contained in:
2026-04-05 12:50:55 +08:00
parent ec97445071
commit e5e9f348a3
29 changed files with 3183 additions and 102 deletions

View File

@@ -29,6 +29,10 @@ const UISystemFrameResult& UISceneRuntimeContext::GetLastFrame() const {
return m_system.GetLastFrame();
}
UISystemFrameResult UISceneRuntimeContext::ConsumeLastFrame() {
return m_system.ConsumeLastFrame();
}
void UISceneRuntimeContext::Reset() {
m_stackController.Clear();
m_system.DestroyAllPlayers();

View File

@@ -75,6 +75,12 @@ const UIScreenFrameResult& UIScreenPlayer::GetLastFrame() const {
return m_lastFrame;
}
UIScreenFrameResult UIScreenPlayer::ConsumeLastFrame() {
UIScreenFrameResult frame = std::move(m_lastFrame);
m_lastFrame = {};
return frame;
}
const std::string& UIScreenPlayer::GetLastError() const {
return m_lastError;
}

View File

@@ -1,5 +1,7 @@
#include <XCEngine/UI/Runtime/UISystem.h>
#include <utility>
namespace XCEngine {
namespace UI {
namespace Runtime {
@@ -122,6 +124,10 @@ std::size_t UISystem::GetLayerCount() const {
const UISystemFrameResult& UISystem::Update(const UIScreenFrameInput& input) {
m_lastFrame = {};
m_lastFrame.frameIndex = input.frameIndex;
m_lastFrame.viewportRect = input.viewportRect;
m_lastFrame.submittedInputEventCount = input.events.size();
m_lastFrame.deltaTimeSeconds = input.deltaTimeSeconds;
m_lastFrame.focused = input.focused;
if (m_players.empty()) {
return m_lastFrame;
@@ -177,6 +183,12 @@ const UISystemFrameResult& UISystem::GetLastFrame() const {
return m_lastFrame;
}
UISystemFrameResult UISystem::ConsumeLastFrame() {
UISystemFrameResult frame = std::move(m_lastFrame);
m_lastFrame = {};
return frame;
}
const std::vector<std::unique_ptr<UIScreenPlayer>>& UISystem::GetPlayers() const {
return m_players;
}