diff options
author | 2016-08-08 12:58:57 -0700 | |
---|---|---|
committer | 2016-08-08 12:58:57 -0700 | |
commit | c97796b47b2f3e0ca8c04073c1576db21b58eedb (patch) | |
tree | f77603d9a868ee5f9cc2a9d54d67c2ea57a1ff07 /experimental/svg/model/SkSVGDOM.cpp | |
parent | 9dcdc352c14eb95a833961b22682ed9900059dae (diff) |
[SVGDom] Improved transform parsing
Update 'transform' attribute parsing to a more robust, SkSVGAttributeParser-based implementation.
R=robertphillips@google.com,stephana@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2220933003
Review-Url: https://codereview.chromium.org/2220933003
Diffstat (limited to 'experimental/svg/model/SkSVGDOM.cpp')
-rw-r--r-- | experimental/svg/model/SkSVGDOM.cpp | 56 |
1 files changed, 7 insertions, 49 deletions
diff --git a/experimental/svg/model/SkSVGDOM.cpp b/experimental/svg/model/SkSVGDOM.cpp index 13d67b9cfe..9b67484fbc 100644 --- a/experimental/svg/model/SkSVGDOM.cpp +++ b/experimental/svg/model/SkSVGDOM.cpp @@ -7,7 +7,6 @@ #include "SkCanvas.h" #include "SkDOM.h" -#include "SkParse.h" #include "SkParsePath.h" #include "SkString.h" #include "SkSVGAttributeParser.h" @@ -24,53 +23,6 @@ namespace { -const char* ParseScalarPair(const char* str, SkScalar v[2]) { - str = SkParse::FindScalar(str, v); - if (str) { - const char* second = SkParse::FindScalar(str, v + 1); - if (!second) { - v[1] = v[0]; - } else { - str = second; - } - } - - return str; -} - -SkMatrix ParseTransform(const char* str) { - SkMatrix m = SkMatrix::I(); - - // FIXME: real parser - if (!strncmp(str, "matrix(", 7)) { - SkScalar values[6]; - str = SkParse::FindScalars(str + 7, values, 6); - if (str) { - m.setAffine(values); - } - } else if (!strncmp(str, "scale(", 6)) { - SkScalar values[2]; - str = ParseScalarPair(str + 6, values); - if (str) { - m.setScale(values[0], values[1]); - } - } else if (!strncmp(str, "translate(", 10)) { - SkScalar values[2]; - str = ParseScalarPair(str + 10, values); - if (str) { - m.setTranslate(values[0], values[1]); - } - } else if (!strncmp(str, "rotate(", 7)) { - SkScalar value; - str = SkParse::FindScalar(str + 7, &value); - if (str) { - m.setRotate(value); - } - } - - return m; -} - bool SetPaintAttribute(const sk_sp<SkSVGNode>& node, SkSVGAttribute attr, const char* stringValue) { SkSVGColorType color; @@ -96,7 +48,13 @@ bool SetPathDataAttribute(const sk_sp<SkSVGNode>& node, SkSVGAttribute attr, bool SetTransformAttribute(const sk_sp<SkSVGNode>& node, SkSVGAttribute attr, const char* stringValue) { - node->setAttribute(attr, SkSVGTransformValue(ParseTransform(stringValue))); + SkSVGTransformType transform; + SkSVGAttributeParser parser(stringValue); + if (!parser.parseTransform(&transform)) { + return false; + } + + node->setAttribute(attr, SkSVGTransformValue(transform)); return true; } |