1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2017 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#ifndef SkSGGroup_DEFINED 9cb93a386Sopenharmony_ci#define SkSGGroup_DEFINED 10cb93a386Sopenharmony_ci 11cb93a386Sopenharmony_ci#include "modules/sksg/include/SkSGRenderNode.h" 12cb93a386Sopenharmony_ci 13cb93a386Sopenharmony_ci#include <vector> 14cb93a386Sopenharmony_ci 15cb93a386Sopenharmony_cinamespace sksg { 16cb93a386Sopenharmony_ci 17cb93a386Sopenharmony_ci/** 18cb93a386Sopenharmony_ci * Concrete node, grouping together multiple descendants. 19cb93a386Sopenharmony_ci */ 20cb93a386Sopenharmony_ciclass Group : public RenderNode { 21cb93a386Sopenharmony_cipublic: 22cb93a386Sopenharmony_ci static sk_sp<Group> Make() { 23cb93a386Sopenharmony_ci return sk_sp<Group>(new Group(std::vector<sk_sp<RenderNode>>())); 24cb93a386Sopenharmony_ci } 25cb93a386Sopenharmony_ci 26cb93a386Sopenharmony_ci static sk_sp<Group> Make(std::vector<sk_sp<RenderNode>> children) { 27cb93a386Sopenharmony_ci return sk_sp<Group>(new Group(std::move(children))); 28cb93a386Sopenharmony_ci } 29cb93a386Sopenharmony_ci 30cb93a386Sopenharmony_ci void addChild(sk_sp<RenderNode>); 31cb93a386Sopenharmony_ci void removeChild(const sk_sp<RenderNode>&); 32cb93a386Sopenharmony_ci 33cb93a386Sopenharmony_ci size_t size() const { return fChildren.size(); } 34cb93a386Sopenharmony_ci bool empty() const { return fChildren.empty(); } 35cb93a386Sopenharmony_ci void clear(); 36cb93a386Sopenharmony_ci 37cb93a386Sopenharmony_ciprotected: 38cb93a386Sopenharmony_ci Group(); 39cb93a386Sopenharmony_ci explicit Group(std::vector<sk_sp<RenderNode>>); 40cb93a386Sopenharmony_ci ~Group() override; 41cb93a386Sopenharmony_ci 42cb93a386Sopenharmony_ci void onRender(SkCanvas*, const RenderContext*) const override; 43cb93a386Sopenharmony_ci const RenderNode* onNodeAt(const SkPoint&) const override; 44cb93a386Sopenharmony_ci 45cb93a386Sopenharmony_ci SkRect onRevalidate(InvalidationController*, const SkMatrix&) override; 46cb93a386Sopenharmony_ci 47cb93a386Sopenharmony_ciprivate: 48cb93a386Sopenharmony_ci std::vector<sk_sp<RenderNode>> fChildren; 49cb93a386Sopenharmony_ci bool fRequiresIsolation = true; 50cb93a386Sopenharmony_ci 51cb93a386Sopenharmony_ci using INHERITED = RenderNode; 52cb93a386Sopenharmony_ci}; 53cb93a386Sopenharmony_ci 54cb93a386Sopenharmony_ci} // namespace sksg 55cb93a386Sopenharmony_ci 56cb93a386Sopenharmony_ci#endif // SkSGGroup_DEFINED 57