Add XCUI runtime screen stack helper

This commit is contained in:
2026-04-05 06:05:54 +08:00
parent f185663259
commit 0c24c7c611
5 changed files with 273 additions and 1 deletions

View File

@@ -0,0 +1,54 @@
#pragma once
#include <XCEngine/UI/Runtime/UISystem.h>
#include <cstddef>
#include <string>
#include <vector>
namespace XCEngine {
namespace UI {
namespace Runtime {
struct UIScreenStackEntry {
UIScreenLayerId layerId = 0;
UIScreenAsset asset = {};
UIScreenLayerOptions options = {};
};
class UIScreenStackController {
public:
explicit UIScreenStackController(UISystem& system);
UIScreenLayerId PushScreen(
const UIScreenAsset& asset,
const UIScreenLayerOptions& options = UIScreenLayerOptions());
UIScreenLayerId PushMenu(
const UIScreenAsset& asset,
const std::string& debugName = {});
UIScreenLayerId PushModal(
const UIScreenAsset& asset,
const std::string& debugName = {});
UIScreenLayerId PushHud(
const UIScreenAsset& asset,
const std::string& debugName = {});
bool ReplaceTop(
const UIScreenAsset& asset,
const UIScreenLayerOptions& options = UIScreenLayerOptions());
bool Pop();
bool Remove(UIScreenLayerId layerId);
void Clear();
std::size_t GetEntryCount() const;
const UIScreenStackEntry* GetTop() const;
const std::vector<UIScreenStackEntry>& GetEntries() const;
private:
UISystem* m_system = nullptr;
std::vector<UIScreenStackEntry> m_entries = {};
};
} // namespace Runtime
} // namespace UI
} // namespace XCEngine