slot 0.0.1
A real time UI render framework
载入中...
搜索中...
未找到
ImmediateUI.h
浏览该文件的文档.
1#pragma once
2
3#include <optional>
4#include <string>
5#include <vector>
6
8#include <DirectXMath.h>
9
10namespace z8::ui {
11class BaseNode;
12class ButtonNode;
13class Layout;
14class MenuItemNode;
15class MenuNode;
16class SliderNode;
17class TextInputNode;
18class ToggleNode;
19class ToolBarNode;
20
22struct UIStyle {
23 std::optional<float> Width;
24 std::optional<float> Height;
25 std::optional<float> MinWidth;
26 std::optional<float> MinHeight;
27 std::optional<float> FlexGrow;
28 std::optional<float> FlexShrink;
29 std::optional<float> Margin;
30 std::optional<float> Padding;
31 std::optional<DirectX::XMFLOAT4> Color;
32 std::optional<DirectX::XMFLOAT4> BorderColor;
33 std::optional<float> BorderWidth;
34 std::optional<float> CornerRadius;
35 std::optional<FlexDirection> Direction;
36};
37
43public:
44 explicit ImmediateUI(Layout &layout);
45
46 void BeginFrame();
48 bool BeginMenu(const std::string &key, const std::string &text,
49 const UIStyle &style = {});
51 bool Button(const std::string &key, const std::string &text,
52 const UIStyle &style = {});
53 bool BeginPanel(const std::string &key, const std::string &title,
54 const UIStyle &style = {});
56 bool BeginToolBar(const std::string &key, const UIStyle &style = {});
58 BaseNode *Terminal(const std::string &key,
59 const std::string &title = "Output Log",
60 const UIStyle &style = {});
61 void EndMenu();
62 void EndPanel();
63 void EndToolBar();
65 BaseNode *Image(const std::string &key, const std::string &source,
66 const UIStyle &style = {});
68 bool MenuItem(const std::string &key, const std::string &text,
69 const UIStyle &style = {});
70 BaseNode *Rect(const std::string &key, const UIStyle &style = {});
72 bool Slider(const std::string &key, float &value, float minimum = 0.0f,
73 float maximum = 1.0f, const UIStyle &style = {});
75 BaseNode *Scene(const std::string &key, const UIStyle &style = {});
77 bool TextInput(const std::string &key, std::string &value,
78 const std::string &placeholder = "",
79 const UIStyle &style = {});
81 bool Toggle(const std::string &key, const std::string &text, bool &value,
82 const UIStyle &style = {});
83 bool EndFrame();
84
85 const std::string &LastError() const { return Error; }
86
87private:
88 struct Scope {
90 size_t NextChild;
91 };
93 std::vector<Scope> ScopeStack;
94 bool Changed = false;
95 std::string Error;
96
97 BaseNode *Acquire(const std::string &type, const std::string &key);
100 static void ApplyStyle(BaseNode &node, const UIStyle &style);
101 void CloseScope();
102};
103} // namespace z8::ui
资源的强类型引用,同时覆盖持久化 ID 与运行时索引两种边界。
Definition ResourceRef.h:36
Definition BaseNode.h:25
Definition ImmediateUI.h:42
void EndToolBar()
Definition ImmediateUI.cpp:331
bool Changed
Definition ImmediateUI.h:94
bool MenuItem(const std::string &key, const std::string &text, const UIStyle &style={})
Definition ImmediateUI.cpp:351
bool BeginToolBar(const std::string &key, const UIStyle &style={})
Definition ImmediateUI.cpp:276
BaseNode * Rect(const std::string &key, const UIStyle &style={})
Definition ImmediateUI.cpp:361
BaseNode * Acquire(const std::string &type, const std::string &key)
Definition ImmediateUI.cpp:53
bool Toggle(const std::string &key, const std::string &text, bool &value, const UIStyle &style={})
Definition ImmediateUI.cpp:405
bool BeginMenu(const std::string &key, const std::string &text, const UIStyle &style={})
Definition ImmediateUI.cpp:32
ImmediateUI(Layout &layout)
Definition ImmediateUI.cpp:23
void EndPanel()
Definition ImmediateUI.cpp:315
bool BeginPanel(const std::string &key, const std::string &title, const UIStyle &style={})
Definition ImmediateUI.cpp:259
void BeginFrame()
Definition ImmediateUI.cpp:25
bool EndFrame()
Definition ImmediateUI.cpp:420
static void ResetStyle(BaseNode &node, bool keepsInteractiveGeometry)
Definition ImmediateUI.cpp:89
Layout * TargetLayout
Definition ImmediateUI.h:92
BaseNode * Scene(const std::string &key, const UIStyle &style={})
Definition ImmediateUI.cpp:368
const std::string & LastError() const
Definition ImmediateUI.h:85
std::vector< Scope > ScopeStack
Definition ImmediateUI.h:93
void EndMenu()
Definition ImmediateUI.cpp:323
BaseNode * Image(const std::string &key, const std::string &source, const UIStyle &style={})
Definition ImmediateUI.cpp:339
bool Slider(const std::string &key, float &value, float minimum=0.0f, float maximum=1.0f, const UIStyle &style={})
Definition ImmediateUI.cpp:375
std::string Error
Definition ImmediateUI.h:95
void CloseScope()
Definition ImmediateUI.cpp:304
bool TextInput(const std::string &key, std::string &value, const std::string &placeholder="", const UIStyle &style={})
Definition ImmediateUI.cpp:389
static void ApplyStyle(BaseNode &node, const UIStyle &style)
Definition ImmediateUI.cpp:202
bool Button(const std::string &key, const std::string &text, const UIStyle &style={})
Definition ImmediateUI.cpp:43
Definition Layout.h:31
Definition Application.h:18
Definition ImmediateUI.h:88
size_t NextChild
Definition ImmediateUI.h:90
BaseNode * Host
Definition ImmediateUI.h:89
Definition ImmediateUI.h:22
std::optional< float > Padding
Definition ImmediateUI.h:30
std::optional< float > MinHeight
Definition ImmediateUI.h:26
std::optional< float > CornerRadius
Definition ImmediateUI.h:34
std::optional< float > FlexGrow
Definition ImmediateUI.h:27
std::optional< float > FlexShrink
Definition ImmediateUI.h:28
std::optional< float > MinWidth
Definition ImmediateUI.h:25
std::optional< float > Height
Definition ImmediateUI.h:24
std::optional< float > Width
Definition ImmediateUI.h:23
std::optional< float > Margin
Definition ImmediateUI.h:29
std::optional< DirectX::XMFLOAT4 > Color
Definition ImmediateUI.h:31
std::optional< DirectX::XMFLOAT4 > BorderColor
Definition ImmediateUI.h:32
std::optional< FlexDirection > Direction
Definition ImmediateUI.h:35
std::optional< float > BorderWidth
Definition ImmediateUI.h:33