| 628 | } |
| 629 | |
| 630 | static SkMatrix parseTransformation(int &flags, const char *str) { |
| 631 | SkMatrix transformation; |
| 632 | skipExtraChars(str); |
| 633 | while (*str) { |
| 634 | SkScalar values[6]; |
| 635 | int count; |
| 636 | SkMatrix partial; |
| 637 | if (readTransformationOp(values, count, str, "matrix") && count == 6) { |
| 638 | partial.setAll(values[0], values[2], values[4], values[1], values[3], values[5], SkScalar(0), SkScalar(0), SkScalar(1)); |
| 639 | } else if (readTransformationOp(values, count, str, "translate") && (count == 1 || count == 2)) { |
| 640 | if (count == 1) |
| 641 | values[1] = SkScalar(0); |
| 642 | partial.setTranslate(values[0], values[1]); |
| 643 | } else if (readTransformationOp(values, count, str, "scale") && (count == 1 || count == 2)) { |
| 644 | if (count == 1) |
| 645 | values[1] = values[0]; |
| 646 | partial.setScale(values[0], values[1]); |
| 647 | } else if (readTransformationOp(values, count, str, "rotate") && (count == 1 || count == 3)) { |
| 648 | if (count == 3) |
| 649 | partial.setRotate(values[0], values[1], values[2]); |
| 650 | else |
| 651 | partial.setRotate(values[0]); |
| 652 | } else if (readTransformationOp(values, count, str, "skewX") && count == 1) { |
| 653 | partial.setSkewX(SkScalar(tan(M_PI/180*values[0]))); |
| 654 | } else if (readTransformationOp(values, count, str, "skewY") && count == 1) { |
| 655 | partial.setSkewY(SkScalar(tan(M_PI/180*values[0]))); |
| 656 | } else { |
| 657 | flags |= SVG_IMPORT_PARTIAL_FAILURE_FLAG; |
| 658 | break; |
| 659 | } |
| 660 | transformation = transformation*partial; |
| 661 | skipExtraChars(str); |
| 662 | } |
| 663 | return transformation; |
| 664 | } |
| 665 | |
| 666 | static SkMatrix combineTransformation(int &flags, const SkMatrix &parentTransformation, const char *transformationString, const char *transformationOriginString) { |
| 667 | if (transformationString && *transformationString) { |
no test coverage detected