• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)13 SkSVGContainer::SkSVGContainer(SkSVGTag t) : INHERITED(t) { }
14 
appendChild(sk_sp<SkSVGNode> node)15 void SkSVGContainer::appendChild(sk_sp<SkSVGNode> node) {
16     SkASSERT(node);
17     fChildren.push_back(std::move(node));
18 }
19 
hasChildren() const20 bool SkSVGContainer::hasChildren() const {
21     return !fChildren.empty();
22 }
23 
onRender(const SkSVGRenderContext & ctx) const24 void 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) const30 SkPath 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