From 5220ab4fee1281b2daeacf4dd50448e06eb1f5e8 Mon Sep 17 00:00:00 2001 From: crupest Date: Tue, 11 Dec 2018 23:38:59 +0800 Subject: ... --- src/ui/render/render_object.cpp | 33 ++++++++++++++++++++++++++++++++- src/ui/render/render_object.hpp | 36 +++++++++++++++++++++++++++++++++++- 2 files changed, 67 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/ui/render/render_object.cpp b/src/ui/render/render_object.cpp index 78445bf1..6796f382 100644 --- a/src/ui/render/render_object.cpp +++ b/src/ui/render/render_object.cpp @@ -220,9 +220,40 @@ namespace cru::ui::render InvalidateRenderHost; } - void CustomDrawHandlerRenderObject::Draw(ID2D1RenderTarget * render_target) + void CustomDrawHandlerRenderObject::Draw(ID2D1RenderTarget* render_target) { if (draw_handler_ != nullptr) draw_handler_(render_target); } + + ContainerRenderObject::~ContainerRenderObject() + { + for (const auto child : children_) + delete child; + } + + void ContainerRenderObject::AddChild(RenderObject* child) + { + children_.push_back(child); + } + + void ContainerRenderObject::AddChild(RenderObject* child, const int position) + { + assert(position >= 0); + assert(position <= children_.size()); + children_.insert(children_.cbegin() + position, child); + } + + void ContainerRenderObject::RemoveChild(const int position) + { + assert(position >= 0); + assert(position < children_.size()); + children_.erase(children_.cbegin() + position); + } + + void ContainerRenderObject::Draw(ID2D1RenderTarget* render_target) + { + for (const auto child : children_) + child->Draw(render_target); + } } diff --git a/src/ui/render/render_object.hpp b/src/ui/render/render_object.hpp index 6603728d..4432636c 100644 --- a/src/ui/render/render_object.hpp +++ b/src/ui/render/render_object.hpp @@ -4,6 +4,7 @@ #include "system_headers.hpp" #include +#include #include "base.hpp" #include "ui/ui_base.hpp" @@ -343,7 +344,40 @@ namespace cru::ui::render }; - class ContainerRenderObject; //TODO! + class ContainerRenderObject : public RenderObject + { + public: + ContainerRenderObject() = default; + ContainerRenderObject(const ContainerRenderObject& other) = delete; + ContainerRenderObject& operator=(const ContainerRenderObject& other) = delete; + ContainerRenderObject(ContainerRenderObject&& other) = delete; + ContainerRenderObject& operator=(ContainerRenderObject&& other) = delete; + ~ContainerRenderObject(); + + const std::vector& GetChildren() const + { + return children_; + } + + RenderObject* GetAt(const int position) const + { + assert(position >= 0); + assert(position < static_cast(children_.size())); + return children_.at(static_cast::size_type>(position)); + } + + void AddChild(RenderObject* child); + + void AddChild(RenderObject* child, int position); + + void RemoveChild(int position); + + protected: + void Draw(ID2D1RenderTarget* render_target) override; + + private: + std::vector children_; + }; -- cgit v1.2.3