slot 0.0.1
A real time UI render framework
载入中...
搜索中...
未找到
BehaviorNode.h
浏览该文件的文档.
1#pragma once
2
3#include "Core/Event.h"
6
7#include <memory>
8#include <type_traits>
9#include <utility>
10#include <vector>
11
12namespace z8::ui {
13
17class BehaviorNode : public BaseNode, public EventTarget {
18public:
19 // 非视觉交互容器必须显式开启;根 DockSpace 不应吞掉整个窗口的场景输入。
20 bool HitTestVisible = false;
22 bool Hovered = false;
24 bool Pressed = false;
26 bool Focusable = false;
28 bool Focused = false;
29 std::vector<std::unique_ptr<IBehavior>> Behaviors;
31
32 ~BehaviorNode() override;
33 bool SetProperty(const std::string &name, const std::string &value) override;
34
41 void DispatchAfterLayout() override;
42 void DispatchBeforeLayout(float width, float height) const;
43 void DispatchDragStarted(const MouseMovArgs &args) const;
44 void DispatchDragCompleted(const MouseMovArgs &args) const;
46
47 IBehavior *AddBehavior(std::unique_ptr<IBehavior> behavior);
50 void SetHovered(bool hovered);
52 void SetPressed(bool pressed);
54 void SetFocused(bool focused);
55
56 template <typename T, typename... Args> T *AddBehavior(Args &&...args) {
57 static_assert(std::is_base_of_v<IBehavior, T>);
58 auto behavior = std::make_unique<T>(std::forward<Args>(args)...);
59 auto *observer = behavior.get();
60 AddBehavior(std::move(behavior));
61 return observer;
62 }
63
64 template <typename T> T *GetBehavior() {
65 static_assert(std::is_base_of_v<IBehavior, T>);
66 for (auto &behavior : Behaviors)
67 if (auto *result = dynamic_cast<T *>(behavior.get()))
68 return result;
69 return nullptr;
70 }
71
72 template <typename T> const T *GetBehavior() const {
73 static_assert(std::is_base_of_v<IBehavior, T>);
74 for (const auto &behavior : Behaviors)
75 if (auto *result = dynamic_cast<const T *>(behavior.get()))
76 return result;
77 return nullptr;
78 }
79
80protected:
82 virtual void OnVisualStateChanged() {}
83 void ReleaseBehaviors();
84};
85
86} // namespace z8::ui
Definition Event.h:80
资源的强类型引用,同时覆盖持久化 ID 与运行时索引两种边界。
Definition ResourceRef.h:36
Definition BaseNode.h:25
Definition BehaviorNode.h:17
void SetPressed(bool pressed)
Definition BehaviorNode.cpp:57
bool RemoveBehavior(IBehavior *behavior)
Definition BehaviorNode.cpp:34
bool Focusable
Definition BehaviorNode.h:26
void DispatchAfterLayout() override
Definition BehaviorNode.cpp:137
~BehaviorNode() override
Definition BehaviorNode.cpp:8
bool Hovered
Definition BehaviorNode.h:22
bool HitTestVisible
Definition BehaviorNode.h:20
const T * GetBehavior() const
Definition BehaviorNode.h:72
void SetHovered(bool hovered)
Definition BehaviorNode.cpp:50
void ReleaseBehaviors()
Definition BehaviorNode.cpp:10
void DispatchBeforeLayout(float width, float height) const
Definition BehaviorNode.cpp:143
void CancelPointerCapture()
Definition BehaviorNode.cpp:158
IBehavior * AddBehavior(std::unique_ptr< IBehavior > behavior)
Definition BehaviorNode.cpp:19
T * AddBehavior(Args &&...args)
Definition BehaviorNode.h:56
bool DispatchMouseUp(const MouseMovArgs &args)
Definition BehaviorNode.cpp:106
bool SetProperty(const std::string &name, const std::string &value) override
Definition BehaviorNode.cpp:71
MouseCursor QueryMouseCursor(const MouseMovArgs &args) const
Definition BehaviorNode.cpp:121
std::vector< std::unique_ptr< IBehavior > > Behaviors
Definition BehaviorNode.h:29
bool Focused
Definition BehaviorNode.h:28
EventReply DispatchMouseDown(const MouseMovArgs &args)
Definition BehaviorNode.cpp:80
IBehavior * CapturedBehavior
Definition BehaviorNode.h:30
bool DispatchMouseWheel(MouseWheelArgs args)
Definition BehaviorNode.cpp:114
bool Pressed
Definition BehaviorNode.h:24
void SetFocused(bool focused)
Definition BehaviorNode.cpp:64
void DispatchDragStarted(const MouseMovArgs &args) const
Definition BehaviorNode.cpp:148
bool DispatchMouseMove(const MouseMovArgs &args)
Definition BehaviorNode.cpp:92
bool DispatchMouseDrag(const MouseMovArgs &args)
Definition BehaviorNode.cpp:100
virtual void OnVisualStateChanged()
Definition BehaviorNode.h:82
void DispatchDragCompleted(const MouseMovArgs &args) const
Definition BehaviorNode.cpp:153
T * GetBehavior()
Definition BehaviorNode.h:64
Definition IBehavior.h:17
Definition Application.h:18
MouseCursor
Definition Event.h:27
EventReply
Definition Event.h:13
Definition Event.h:41
Definition Event.h:57