1 /* 2 * Copyright 2016 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 #include "SkSVGContainer.h" 9 10 #include "SkPath.h" 11 #include "SkPathOps.h" 12 SkSVGContainer(SkSVGTag t)13SkSVGContainer::SkSVGContainer(SkSVGTag t) : INHERITED(t) { } 14 appendChild(sk_sp<SkSVGNode> node)15void SkSVGContainer::appendChild(sk_sp<SkSVGNode> node) { 16 SkASSERT(node); 17 fChildren.push_back(std::move(node)); 18 } 19 hasChildren() const20bool SkSVGContainer::hasChildren() const { 21 return !fChildren.empty(); 22 } 23 onRender(const SkSVGRenderContext & ctx) const24void SkSVGContainer::onRender(const SkSVGRenderContext& ctx) const { 25 for (int i = 0; i < fChildren.count(); ++i) { 26 fChildren[i]->render(ctx); 27 } 28 } 29 onAsPath(const SkSVGRenderContext & ctx) const30SkPath SkSVGContainer::onAsPath(const SkSVGRenderContext& ctx) const { 31 SkPath path; 32 33 for (int i = 0; i < fChildren.count(); ++i) { 34 const SkPath childPath = fChildren[i]->asPath(ctx); 35 36 Op(path, childPath, kUnion_SkPathOp, &path); 37 } 38 39 this->mapToParent(&path); 40 return path; 41 } 42