diff options
author | crupest <crupest@outlook.com> | 2020-04-11 00:01:51 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2020-04-11 00:01:51 +0800 |
commit | 23ef59b6aa14874e3b68c8716c137eb65583cd63 (patch) | |
tree | 3f15dbfe3115b03a19a49abb7fcbc27d9c440769 /include/cru/ui/render | |
parent | 41e17e281ba31e9eff612017f5a2dafd847278b0 (diff) | |
download | cru-23ef59b6aa14874e3b68c8716c137eb65583cd63.tar.gz cru-23ef59b6aa14874e3b68c8716c137eb65583cd63.tar.bz2 cru-23ef59b6aa14874e3b68c8716c137eb65583cd63.zip |
...
Diffstat (limited to 'include/cru/ui/render')
-rw-r--r-- | include/cru/ui/render/render_object.hpp | 35 | ||||
-rw-r--r-- | include/cru/ui/render/window_render_object.hpp | 10 |
2 files changed, 8 insertions, 37 deletions
diff --git a/include/cru/ui/render/render_object.hpp b/include/cru/ui/render/render_object.hpp index 33ef3d1a..6a8db52f 100644 --- a/include/cru/ui/render/render_object.hpp +++ b/include/cru/ui/render/render_object.hpp @@ -4,27 +4,12 @@ #include "cru/common/event.hpp" namespace cru::ui::render { - -struct AfterLayoutEventArgs {}; - -struct IRenderHost : Interface { - // Mark the layout as invalid, and arrange a re-layout later. - // Note this method might be called more than one times in a message cycle. So - // implementation should merge multiple request into once. - virtual void InvalidateLayout() = 0; - - // Mark the paint as invalid, and arrange a re-paint later. - // Note this method might be called more than one times in a message cycle. So - // implementation should merge multiple request into once. - virtual void InvalidatePaint() = 0; - - virtual IEvent<AfterLayoutEventArgs>* AfterLayoutEvent() = 0; -}; - // Render object will not destroy its children when destroyed. Control must // manage lifecycle of its render objects. Since control will destroy its // children when destroyed, render objects will be destroyed along with it. class RenderObject : public Object { + friend WindowRenderObject; + protected: enum class ChildMode { None, @@ -47,8 +32,7 @@ class RenderObject : public Object { Control* GetAttachedControl() const { return control_; } void SetAttachedControl(Control* new_control) { control_ = new_control; } - IRenderHost* GetRenderHost() const { return render_host_; } - void SetRenderHost(IRenderHost* render_host) { render_host_ = render_host; } + UiHost* GetUiHost() const { return ui_host_; } RenderObject* GetParent() const { return parent_; } @@ -83,13 +67,8 @@ class RenderObject : public Object { virtual RenderObject* HitTest(const Point& point) = 0; public: - void InvalidateLayout() const { - if (render_host_ != nullptr) render_host_->InvalidateLayout(); - } - - void InvalidatePaint() const { - if (render_host_ != nullptr) render_host_->InvalidatePaint(); - } + void InvalidateLayout(); + void InvalidatePaint(); protected: void SetChildMode(ChildMode mode) { child_mode_ = mode; } @@ -117,11 +96,11 @@ class RenderObject : public Object { private: void SetParent(RenderObject* new_parent); - void SetRenderHostRecursive(IRenderHost* host); + void SetRenderHostRecursive(UiHost* host); private: Control* control_ = nullptr; - IRenderHost* render_host_ = nullptr; + UiHost* ui_host_ = nullptr; RenderObject* parent_ = nullptr; std::vector<RenderObject*> children_{}; diff --git a/include/cru/ui/render/window_render_object.hpp b/include/cru/ui/render/window_render_object.hpp index 2f7f1e84..76b17b82 100644 --- a/include/cru/ui/render/window_render_object.hpp +++ b/include/cru/ui/render/window_render_object.hpp @@ -4,17 +4,13 @@ namespace cru::ui::render { class WindowRenderObject : public RenderObject { public: - WindowRenderObject(Window* window); + WindowRenderObject(UiHost* host); WindowRenderObject(const WindowRenderObject& other) = delete; WindowRenderObject(WindowRenderObject&& other) = delete; WindowRenderObject& operator=(const WindowRenderObject& other) = delete; WindowRenderObject& operator=(WindowRenderObject&& other) = delete; ~WindowRenderObject() override = default; - Window* GetWindow() const { return window_; } - - void Relayout(); - void Draw(platform::graph::IPainter* painter) override; RenderObject* HitTest(const Point& point) override; @@ -29,10 +25,6 @@ class WindowRenderObject : public RenderObject { } private: - Window* window_; - EventRevokerGuard after_layout_event_guard_; - - std::unique_ptr<IRenderHost> render_host_; }; } // namespace cru::ui::render |