aboutsummaryrefslogtreecommitdiff
path: root/include/cru/ui/render
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2020-04-11 00:01:51 +0800
committercrupest <crupest@outlook.com>2020-04-11 00:01:51 +0800
commit23ef59b6aa14874e3b68c8716c137eb65583cd63 (patch)
tree3f15dbfe3115b03a19a49abb7fcbc27d9c440769 /include/cru/ui/render
parent41e17e281ba31e9eff612017f5a2dafd847278b0 (diff)
downloadcru-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.hpp35
-rw-r--r--include/cru/ui/render/window_render_object.hpp10
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