/* * Copyright 2017 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkSGGroup_DEFINED #define SkSGGroup_DEFINED #include "modules/sksg/include/SkSGRenderNode.h" #include namespace sksg { /** * Concrete node, grouping together multiple descendants. */ class Group : public RenderNode { public: static sk_sp Make() { return sk_sp(new Group(std::vector>())); } static sk_sp Make(std::vector> children) { return sk_sp(new Group(std::move(children))); } void addChild(sk_sp); void removeChild(const sk_sp&); size_t size() const { return fChildren.size(); } bool empty() const { return fChildren.empty(); } void clear(); protected: Group(); explicit Group(std::vector>); ~Group() override; void onRender(SkCanvas*, const RenderContext*) const override; const RenderNode* onNodeAt(const SkPoint&) const override; SkRect onRevalidate(InvalidationController*, const SkMatrix&) override; private: std::vector> fChildren; bool fRequiresIsolation = true; using INHERITED = RenderNode; }; } // namespace sksg #endif // SkSGGroup_DEFINED