1bffc2566872f99d378a1113d0a49ec9ee0d60b7afmalita/*
2bffc2566872f99d378a1113d0a49ec9ee0d60b7afmalita * Copyright 2016 Google Inc.
3bffc2566872f99d378a1113d0a49ec9ee0d60b7afmalita *
4bffc2566872f99d378a1113d0a49ec9ee0d60b7afmalita * Use of this source code is governed by a BSD-style license that can be
5bffc2566872f99d378a1113d0a49ec9ee0d60b7afmalita * found in the LICENSE file.
6bffc2566872f99d378a1113d0a49ec9ee0d60b7afmalita */
7bffc2566872f99d378a1113d0a49ec9ee0d60b7afmalita
8bffc2566872f99d378a1113d0a49ec9ee0d60b7afmalita#include "SkSVGRenderContext.h"
9bffc2566872f99d378a1113d0a49ec9ee0d60b7afmalita#include "SkSVGShape.h"
10bffc2566872f99d378a1113d0a49ec9ee0d60b7afmalita
11bffc2566872f99d378a1113d0a49ec9ee0d60b7afmalitaSkSVGShape::SkSVGShape(SkSVGTag t) : INHERITED(t) {}
12bffc2566872f99d378a1113d0a49ec9ee0d60b7afmalita
13397a517d1a5774653fcdd08172f9a6b5eea67621fmalitavoid SkSVGShape::onRender(const SkSVGRenderContext& ctx) const {
14e932d4b3a99905a6272c5574f21ac651632f4e82Florin Malita    const SkPath::FillType fillType =
15e932d4b3a99905a6272c5574f21ac651632f4e82Florin Malita        FillRuleToFillType(*ctx.presentationContext().fInherited.fFillRule.get());
16e932d4b3a99905a6272c5574f21ac651632f4e82Florin Malita
17286a8657da0364006e95cb0988477cc3a5f0e112fmalita    // TODO: this approach forces duplicate geometry resolution in onDraw(); refactor to avoid.
182d961e086bb40b371b1a667536fa089794847368fmalita    if (const SkPaint* fillPaint = ctx.fillPaint()) {
19e932d4b3a99905a6272c5574f21ac651632f4e82Florin Malita        this->onDraw(ctx.canvas(), ctx.lengthContext(), *fillPaint, fillType);
20bffc2566872f99d378a1113d0a49ec9ee0d60b7afmalita    }
21bffc2566872f99d378a1113d0a49ec9ee0d60b7afmalita
222d961e086bb40b371b1a667536fa089794847368fmalita    if (const SkPaint* strokePaint = ctx.strokePaint()) {
23e932d4b3a99905a6272c5574f21ac651632f4e82Florin Malita        this->onDraw(ctx.canvas(), ctx.lengthContext(), *strokePaint, fillType);
24bffc2566872f99d378a1113d0a49ec9ee0d60b7afmalita    }
25bffc2566872f99d378a1113d0a49ec9ee0d60b7afmalita}
26bffc2566872f99d378a1113d0a49ec9ee0d60b7afmalita
27bffc2566872f99d378a1113d0a49ec9ee0d60b7afmalitavoid SkSVGShape::appendChild(sk_sp<SkSVGNode>) {
28bffc2566872f99d378a1113d0a49ec9ee0d60b7afmalita    SkDebugf("cannot append child nodes to an SVG shape.\n");
29bffc2566872f99d378a1113d0a49ec9ee0d60b7afmalita}
30e932d4b3a99905a6272c5574f21ac651632f4e82Florin Malita
31e932d4b3a99905a6272c5574f21ac651632f4e82Florin MalitaSkPath::FillType SkSVGShape::FillRuleToFillType(const SkSVGFillRule& fillRule) {
32e932d4b3a99905a6272c5574f21ac651632f4e82Florin Malita    switch (fillRule.type()) {
33e932d4b3a99905a6272c5574f21ac651632f4e82Florin Malita    case SkSVGFillRule::Type::kNonZero:
34e932d4b3a99905a6272c5574f21ac651632f4e82Florin Malita        return SkPath::kWinding_FillType;
35e932d4b3a99905a6272c5574f21ac651632f4e82Florin Malita    case SkSVGFillRule::Type::kEvenOdd:
36e932d4b3a99905a6272c5574f21ac651632f4e82Florin Malita        return SkPath::kEvenOdd_FillType;
37e932d4b3a99905a6272c5574f21ac651632f4e82Florin Malita    default:
38e932d4b3a99905a6272c5574f21ac651632f4e82Florin Malita        SkASSERT(false);
39e932d4b3a99905a6272c5574f21ac651632f4e82Florin Malita        return SkPath::kWinding_FillType;
40e932d4b3a99905a6272c5574f21ac651632f4e82Florin Malita    }
41e932d4b3a99905a6272c5574f21ac651632f4e82Florin Malita}
42