diff options
author | crupest <crupest@outlook.com> | 2018-12-11 23:38:59 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2018-12-11 23:38:59 +0800 |
commit | 5220ab4fee1281b2daeacf4dd50448e06eb1f5e8 (patch) | |
tree | f4eeba51b3fb6af483b952d79becb1d2b857ac75 /src | |
parent | 5f1c790741192733cf2867ce79923b48ad6b6151 (diff) | |
download | cru-5220ab4fee1281b2daeacf4dd50448e06eb1f5e8.tar.gz cru-5220ab4fee1281b2daeacf4dd50448e06eb1f5e8.tar.bz2 cru-5220ab4fee1281b2daeacf4dd50448e06eb1f5e8.zip |
...
Diffstat (limited to 'src')
-rw-r--r-- | src/ui/render/render_object.cpp | 33 | ||||
-rw-r--r-- | src/ui/render/render_object.hpp | 36 |
2 files changed, 67 insertions, 2 deletions
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 <functional> +#include <cassert> #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<RenderObject*>& GetChildren() const + { + return children_; + } + + RenderObject* GetAt(const int position) const + { + assert(position >= 0); + assert(position < static_cast<int>(children_.size())); + return children_.at(static_cast<std::vector<RenderObject*>::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<RenderObject*> children_; + }; |