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