diff options
Diffstat (limited to 'experimental/svg/model/SkSVGShape.cpp')
-rw-r--r-- | experimental/svg/model/SkSVGShape.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/experimental/svg/model/SkSVGShape.cpp b/experimental/svg/model/SkSVGShape.cpp index 38af4c9303..9351a2f096 100644 --- a/experimental/svg/model/SkSVGShape.cpp +++ b/experimental/svg/model/SkSVGShape.cpp @@ -11,16 +11,31 @@ SkSVGShape::SkSVGShape(SkSVGTag t) : INHERITED(t) {} void SkSVGShape::onRender(const SkSVGRenderContext& ctx) const { + const SkPath::FillType fillType = + FillRuleToFillType(*ctx.presentationContext().fInherited.fFillRule.get()); + // TODO: this approach forces duplicate geometry resolution in onDraw(); refactor to avoid. if (const SkPaint* fillPaint = ctx.fillPaint()) { - this->onDraw(ctx.canvas(), ctx.lengthContext(), *fillPaint); + this->onDraw(ctx.canvas(), ctx.lengthContext(), *fillPaint, fillType); } if (const SkPaint* strokePaint = ctx.strokePaint()) { - this->onDraw(ctx.canvas(), ctx.lengthContext(), *strokePaint); + this->onDraw(ctx.canvas(), ctx.lengthContext(), *strokePaint, fillType); } } void SkSVGShape::appendChild(sk_sp<SkSVGNode>) { SkDebugf("cannot append child nodes to an SVG shape.\n"); } + +SkPath::FillType SkSVGShape::FillRuleToFillType(const SkSVGFillRule& fillRule) { + switch (fillRule.type()) { + case SkSVGFillRule::Type::kNonZero: + return SkPath::kWinding_FillType; + case SkSVGFillRule::Type::kEvenOdd: + return SkPath::kEvenOdd_FillType; + default: + SkASSERT(false); + return SkPath::kWinding_FillType; + } +} |