slot 0.0.1
A real time UI render framework
载入中...
搜索中...
未找到
Layout.h
浏览该文件的文档.
1//
2// Created by zhou_zhengming on 2026/7/29.
3//
4
5#pragma once
6#include "Core/Event.h"
8#include <DirectXMath.h>
9
10#include <memory>
11#include <string>
12#include <vector>
13
14namespace z8 {
15class Application;
16class GameObject;
17} // namespace z8
18
19namespace z8::ui {
20class BaseNode;
21class BehaviorNode;
22class DrawNode;
23class TextNode;
24class SceneNode;
25class TerminalNode;
26class RectNode;
27
31class Layout : public EventTarget {
32public:
33 std::unique_ptr<BaseNode> Root;
34 std::vector<BaseNode *> Nodes;
35 std::vector<DrawNode *> Visuals;
36 std::vector<TextNode *> Texts;
37 std::vector<SceneNode *> Scenes;
38 std::vector<TerminalNode *> Terminals;
42 std::unique_ptr<RectNode> DockPreviewVisual;
44 bool DebugPanelBorders = false;
45
46 bool Dirty = true;
54
55 explicit Layout();
56 ~Layout() override;
57
58 void RebuildIndex();
59 BaseNode *Find(const std::string &key) const;
60 void Calculate(float width, float height);
63 void MarkDirty() { Dirty = true; }
64 bool ConsumeDirty();
68 bool ContainsNode(const BaseNode *node) const;
69 void SetRoot(std::unique_ptr<BaseNode> root);
70 std::vector<GameObject *> GetUO() const;
72 std::vector<GameObject *> GetMainUO() const;
74 std::vector<GameObject *> GetSubtreeUO(const BaseNode &root) const;
75 std::vector<TextNode *> GetMainTexts() const;
76 std::vector<TextNode *> GetSubtreeTexts(const BaseNode &root) const;
78 SceneNode *GetSceneNode() const;
80 void WriteTerminal(const std::string &message) const;
84 size_t GetPanelDebugBorderCount() const { return PanelDebugVisuals.size(); }
85
88 EventReply OnTextInput(wchar_t character) override;
95 void OnPointerCaptureLost() override;
96
97private:
99 std::vector<DrawNode *> LaterTextOccluders;
100 std::vector<std::unique_ptr<RectNode>> PanelDebugVisuals;
101
107 bool CommitPanelDrop(float clientX, float clientY);
109 BaseNode *HitAt(float x, float y) const;
110 void IndexTree(BaseNode *node);
120 void UpdateTextOcclusion();
121 void UpdateTree(BaseNode &node, float parentX, float parentY,
122 const DirectX::XMFLOAT4 &clip, bool dispatchAfterLayout,
123 bool parentVisible = true);
124 void UpdateDockPreview();
126 void UpdateHoveredHandler(float x, float y);
129
130};
131} // namespace z8::ui
Definition Event.h:80
资源的强类型引用,同时覆盖持久化 ID 与运行时索引两种边界。
Definition ResourceRef.h:36
Definition BaseNode.h:25
Definition BehaviorNode.h:17
Definition DockWorkspace.h:60
Definition Layout.h:31
std::vector< DrawNode * > Visuals
Definition Layout.h:35
EventReply OnMouseWheel(MouseWheelArgs args) override
Definition Layout.cpp:550
std::vector< SceneNode * > Scenes
Definition Layout.h:37
void ResetInteractionStates(BaseNode *node)
Definition Layout.cpp:191
void UpdateHoveredHandler(float x, float y)
Definition Layout.cpp:203
std::vector< TextNode * > GetSubtreeTexts(const BaseNode &root) const
Definition Layout.cpp:818
void BringToFront(BaseNode *node)
Definition Layout.cpp:592
void UpdateTextOcclusion()
Definition Layout.cpp:865
void MarkDirty()
Definition Layout.h:63
BaseNode * CapturedTarget
Definition Layout.h:47
bool DebugPanelBorders
Definition Layout.h:44
void UpdateTree(BaseNode &node, float parentX, float parentY, const DirectX::XMFLOAT4 &clip, bool dispatchAfterLayout, bool parentVisible=true)
Definition Layout.cpp:957
std::vector< TextNode * > Texts
Definition Layout.h:36
BehaviorNode * FocusedHandler
Definition Layout.h:53
EventReply OnMouseDown(MouseMovArgs args) override
Definition Layout.cpp:306
bool Dirty
Definition Layout.h:46
SceneNode * GetSceneNode() const
Definition Layout.cpp:831
std::vector< DrawNode * > LaterTextOccluders
Definition Layout.h:99
std::vector< GameObject * > GetMainUO() const
Definition Layout.cpp:776
BehaviorNode * PressedHandler
Definition Layout.h:52
BaseNode * Find(const std::string &key) const
Definition Layout.cpp:729
std::vector< BaseNode * > Nodes
Definition Layout.h:34
void CloseMenusOutside(BaseNode *target)
Definition Layout.cpp:130
EventReply OnMouseMove(MouseMovArgs args) override
Definition Layout.cpp:420
void SetRoot(std::unique_ptr< BaseNode > root)
Definition Layout.cpp:102
std::unique_ptr< BaseNode > Root
Definition Layout.h:33
void NormalizePanelGroups(BaseNode &parent)
Definition Layout.cpp:685
Layout()
Definition Layout.cpp:84
DockRect GetDockPreview() const
Definition Layout.cpp:581
DockNodeID CapturedSplitter
Definition Layout.h:49
void UpdatePanelDebugVisuals()
Definition Layout.cpp:1024
MouseCursor GetMouseCursor(MouseMovArgs args) const override
Definition Layout.cpp:239
void RebuildIndex()
Definition Layout.cpp:157
std::vector< std::unique_ptr< RectNode > > PanelDebugVisuals
Definition Layout.h:100
void SetFocusedHandler(BehaviorNode *handler)
Definition Layout.cpp:216
std::unique_ptr< RectNode > DockPreviewVisual
Definition Layout.h:42
BehaviorNode * CapturedHandler
Definition Layout.h:48
BehaviorNode * FindBehaviorNode(BaseNode *node) const
Definition Layout.cpp:184
BehaviorNode * HoveredHandler
Definition Layout.h:51
EventReply OnKeyDown(KeyArgs args) override
Definition Layout.cpp:268
bool ConsumeDirty()
Definition Layout.cpp:743
size_t GetPanelDebugBorderCount() const
Definition Layout.h:84
std::vector< TerminalNode * > Terminals
Definition Layout.h:38
void ActivateFloating(BaseNode &node)
Definition Layout.cpp:100
BaseNode * HitAt(float x, float y) const
Definition Layout.cpp:229
std::vector< GameObject * > GetSubtreeUO(const BaseNode &root) const
Definition Layout.cpp:793
~Layout() override
void Calculate(float width, float height)
Definition Layout.cpp:845
void OnPointerCaptureLost() override
Definition Layout.cpp:564
EventReply OnMouseDrag(MouseMovArgs args) override
Definition Layout.cpp:434
std::vector< GameObject * > GetUO() const
Definition Layout.cpp:755
bool RemoveClosedPanelGroups(BaseNode &parent)
Definition Layout.cpp:710
EventReply OnKeyUp(KeyArgs args) override
Definition Layout.cpp:297
bool ContainsNode(const BaseNode *node) const
Definition Layout.cpp:749
void WriteTerminal(const std::string &message) const
Definition Layout.cpp:838
DockWorkspace Dock
Definition Layout.h:40
EventReply OnMouseUp(MouseMovArgs args) override
Definition Layout.cpp:484
bool CommitPanelDrop(float clientX, float clientY)
Definition Layout.cpp:609
EventReply OnTextInput(wchar_t character) override
Definition Layout.cpp:301
void IndexTree(BaseNode *node)
Definition Layout.cpp:107
void UpdateDockPreview()
Definition Layout.cpp:1009
std::vector< TextNode * > GetMainTexts() const
Definition Layout.cpp:806
void CancelTreeCaptures(BaseNode *node)
Definition Layout.cpp:146
Definition SceneNode.h:26
Definition Application.h:18
std::uint64_t DockNodeID
Definition DockTree.h:11
世界矩阵 描述坐标系,左手坐标系 使用 DirectX12 坐标系的描述
Definition Application.h:15
MouseCursor
Definition Event.h:27
EventReply
Definition Event.h:13
Definition Event.h:67
Definition Event.h:41
Definition Event.h:57
Definition DockTree.h:14