Home | History | Annotate | Download | only in sksg
      1 /*
      2  * Copyright 2017 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 
      8 #ifndef SkSGGroup_DEFINED
      9 #define SkSGGroup_DEFINED
     10 
     11 #include "SkSGRenderNode.h"
     12 
     13 #include "SkTArray.h"
     14 
     15 namespace sksg {
     16 
     17 /**
     18  * Concrete node, grouping together multiple descendants.
     19  */
     20 class Group : public RenderNode {
     21 public:
     22     static sk_sp<Group> Make() {
     23         return sk_sp<Group>(new Group());
     24     }
     25 
     26     void addChild(sk_sp<RenderNode>);
     27     void removeChild(const sk_sp<RenderNode>&);
     28 
     29     size_t size() const { return SkTo<size_t>(fChildren.count()); }
     30     bool  empty() const { return fChildren.empty(); }
     31 
     32 protected:
     33     Group();
     34     ~Group() override;
     35 
     36     void onRender(SkCanvas*) const override;
     37     SkRect onRevalidate(InvalidationController*, const SkMatrix&) override;
     38 
     39 private:
     40     SkTArray<sk_sp<RenderNode>, true> fChildren;
     41 
     42     typedef RenderNode INHERITED;
     43 };
     44 
     45 } // namespace sksg
     46 
     47 #endif // SkSGGroup_DEFINED
     48