diff options
Diffstat (limited to 'experimental/svg/model/SkSVGAttributeParser.cpp')
-rw-r--r-- | experimental/svg/model/SkSVGAttributeParser.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/experimental/svg/model/SkSVGAttributeParser.cpp b/experimental/svg/model/SkSVGAttributeParser.cpp index 9d2d6b8136..04b050828a 100644 --- a/experimental/svg/model/SkSVGAttributeParser.cpp +++ b/experimental/svg/model/SkSVGAttributeParser.cpp @@ -491,6 +491,29 @@ bool SkSVGAttributeParser::parseLineJoin(SkSVGLineJoin* join) { return parsedValue && this->parseEOSToken(); } +// https://www.w3.org/TR/SVG/pservers.html#LinearGradientElementSpreadMethodAttribute +bool SkSVGAttributeParser::parseSpreadMethod(SkSVGSpreadMethod* spread) { + static const struct { + SkSVGSpreadMethod::Type fType; + const char* fName; + } gSpreadInfo[] = { + { SkSVGSpreadMethod::Type::kPad , "pad" }, + { SkSVGSpreadMethod::Type::kReflect, "reflect" }, + { SkSVGSpreadMethod::Type::kRepeat , "repeat" }, + }; + + bool parsedValue = false; + for (size_t i = 0; i < SK_ARRAY_COUNT(gSpreadInfo); ++i) { + if (this->parseExpectedStringToken(gSpreadInfo[i].fName)) { + *spread = SkSVGSpreadMethod(gSpreadInfo[i].fType); + parsedValue = true; + break; + } + } + + return parsedValue && this->parseEOSToken(); +} + // https://www.w3.org/TR/SVG/shapes.html#PolygonElementPointsAttribute bool SkSVGAttributeParser::parsePoints(SkSVGPointsType* points) { SkTDArray<SkPoint> pts; |