26 if (!child)
return nullptr;
27 child->parent_ =
this;
29 children_.push_back(std::move(child));
35 template <
class T,
class... Args>
37 auto owned = std::make_unique<T>(std::forward<Args>(args)...);
45 if (index >= children_.size())
return false;
46 children_[index]->parent_ =
nullptr;
47 children_.erase(children_.begin() +
static_cast<long>(index));
54 for (
size_t i = 0; i < children_.size(); ++i) {
55 if (children_[i].get() == node) {
64 return i < children_.size() ? children_[i].get() :
nullptr;
67 const std::vector<std::unique_ptr<SceneNode>>&
children()
const {
75 for (
auto& c : children_) {
78 static_cast<SceneGroup*
>(c.get())->for_each_descendant(fn);
88 std::vector<std::unique_ptr<SceneNode>> children_;
Definition canvas.hpp:240
bool remove_child(SceneNode *node)
Detach + destroy a child by raw pointer. Returns true on success.
Definition scene_group.hpp:53
bool remove_child(size_t index)
Detach + destroy a child by index. Returns true on success.
Definition scene_group.hpp:44
size_t child_count() const
Definition scene_group.hpp:62
SceneGroup()
Definition scene_group.hpp:20
SceneNode * add_child(std::unique_ptr< SceneNode > child)
Take ownership of child and re-parent it to this group.
Definition scene_group.hpp:25
void for_each_descendant(Fn fn) const
Walk the sub-tree depth-first, applying fn(node).
Definition scene_group.hpp:74
const std::vector< std::unique_ptr< SceneNode > > & children() const
Definition scene_group.hpp:67
SceneRect local_bounds() const override
Local-coordinate bounding box (pre-transform, pre-opacity).
T * emplace_child(Args &&... args)
Convenience for the common in-place construction case.
Definition scene_group.hpp:36
void paint_geometry(Canvas &canvas) const override
Paint this node (and its sub-tree) into canvas.
SceneNode * child_at(size_t i) const
Definition scene_group.hpp:63
void mark_dirty()
Mark this node and (recursively) every ancestor dirty.
SceneNode(SceneNodeKind kind)
Definition scene_node.hpp:108
Definition affine_transform.hpp:24
SceneNodeKind
Kind discriminator — keeps dynamic_cast off the hot path.
Definition scene_node.hpp:91
@ group
Definition scene_node.hpp:92
Axis-aligned bounding box used for repaint-rect math.
Definition scene_node.hpp:27