2010-11-10  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Convert SVGMatrix/SVGTransform/SVGTransformList to the new SVGPropertyTearOff concept
        https://bugs.webkit.org/show_bug.cgi?id=49311

        Move the last list type, SVGTransformList, and the last POD types, SVGMatrix & SVGTransform, over to the new SVGPropertyTearOff concept.
        Removes the need for a custom JSSVGMatrix/V8SVGMatrix implementation, it's all integrated within the bindings now.

        Tests: svg/W3C-SVG-1.1-SE/coords-dom-01-f.svg
               svg/W3C-SVG-1.1-SE/coords-dom-02-f.svg
               svg/W3C-SVG-1.1-SE/coords-dom-03-f.svg
               svg/W3C-SVG-1.1-SE/coords-dom-04-f.svg
               svg/W3C-SVG-1.1-SE/types-dom-01-b.svg
               svg/W3C-SVG-1.1-SE/types-dom-02-f.svg
               svg/W3C-SVG-1.1-SE/types-dom-03-b.svg
               svg/W3C-SVG-1.1-SE/types-dom-04-b.svg
               svg/W3C-SVG-1.1-SE/types-dom-05-b.svg
               svg/dom/SVGMatrix.html
               svg/dom/SVGTransform.html
               svg/dom/SVGTransformList.html

        * Android.jscbindings.mk: Removed JSSVGMatrixCustom.cpp.
        * Android.v8bindings.mk: Removed V8SVGMatrixCustom.cpp.
        * CMakeLists.txt: Remove JSSVGMatrixCustom.cpp. 
        * GNUmakefile.am: Ditto. Add SVGAnimatedTransformListPropertyTearOff.h/SVGStaticPropertyWithParentTearOff.h/SVGTransformListPropertyTearOff.h/SVGAnimatedTransformList.h/SVGMatrix.h to build.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/js/JSBindingsAllInOne.cpp: Remove JSSVGMatrixCustom.cpp
        * bindings/js/JSSVGMatrixCustom.cpp: Removed.
        * bindings/scripts/CodeGenerator.pm: Convert SVGMatrix/SVGTransform/SVGTransformList to the new concept.
        * bindings/scripts/CodeGeneratorJS.pm: Ditto.
        * bindings/scripts/CodeGeneratorObjC.pm: Ditto.
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.
        * bindings/v8/custom/V8SVGMatrixCustom.cpp: Removed.
        * svg/DeprecatedSVGAnimatedPropertyTraits.h: Remove SVGTransformList handling.
        * svg/DeprecatedSVGAnimatedTemplate.h: Ditto.
        * svg/SVGAnimateTransformElement.cpp: Adapt to SVGTransformList API changes.
        (WebCore::transformListFor):
        (WebCore::SVGAnimateTransformElement::resetToBaseValue):
        (WebCore::SVGAnimateTransformElement::calculateAnimatedValue):
        (WebCore::SVGAnimateTransformElement::applyResultsToTarget):
        * svg/SVGAnimatedTransformList.h: Added.
        * svg/SVGGradientElement.cpp: Ditto.
        (WebCore::SVGGradientElement::SVGGradientElement):
        (WebCore::SVGGradientElement::parseMappedAttribute):
        * svg/SVGGradientElement.h: Ditto.
        * svg/SVGLinearGradientElement.cpp: Ditto.
        (WebCore::SVGLinearGradientElement::collectGradientAttributes):
        * svg/SVGMatrix.h: Added. SVGMatrix inherits from AffineTransform, and is only used in the bindings. It implements SVGs special requirements.
        (WebCore::SVGMatrix::translate): Returns a copy of the matrix, not affecting the original matrix.
        (WebCore::SVGMatrix::scale): Ditto.
        (WebCore::SVGMatrix::scaleNonUniform): Ditto.
        (WebCore::SVGMatrix::rotate): Ditto.
        (WebCore::SVGMatrix::flipX): Ditto.
        (WebCore::SVGMatrix::flipY): Ditto.
        (WebCore::SVGMatrix::skewX): Ditto.
        (WebCore::SVGMatrix::skewY): Ditto.
        (WebCore::SVGMatrix::multiply): Ditto.
        (WebCore::SVGMatrix::inverse): Ditto.
        (WebCore::SVGMatrix::rotateFromVector): Dittto.
        * svg/SVGMatrix.idl: Enable StrictTypeChecking/RequiresAllArguments=Raise on all attributes/functions.
        * svg/SVGPatternElement.cpp: Adapt to SVGTransformList API changes.
        (WebCore::SVGPatternElement::SVGPatternElement):
        (WebCore::SVGPatternElement::parseMappedAttribute):
        (WebCore::SVGPatternElement::collectPatternAttributes):
        * svg/SVGPatternElement.h: Ditto.
        * svg/SVGPoint.idl: Enable StrictTypeChecking/RequiresAllArguments=Raise for 'matrixTransform', now that SVGMatrix has been converted to the new scheme.
        * svg/SVGRadialGradientElement.cpp: Adapt to SVGTransformList API changes.
        (WebCore::SVGRadialGradientElement::collectGradientAttributes):
        * svg/SVGSVGElement.cpp: Ditto.
        (WebCore::SVGSVGElement::createSVGTransformFromMatrix):
        (WebCore::SVGSVGElement::viewBoxToViewTransform):
        * svg/SVGSVGElement.h: Ditto.
        * svg/SVGStyledTransformableElement.cpp: Ditto.
        (WebCore::SVGStyledTransformableElement::SVGStyledTransformableElement):
        (WebCore::SVGStyledTransformableElement::animatedLocalTransform):
        (WebCore::SVGStyledTransformableElement::parseMappedAttribute):
        * svg/SVGStyledTransformableElement.h: Ditto.
        * svg/SVGTextElement.cpp: Ditto.
        (WebCore::SVGTextElement::SVGTextElement):
        (WebCore::SVGTextElement::parseMappedAttribute):
        (WebCore::SVGTextElement::animatedLocalTransform):
        * svg/SVGTextElement.h: Ditto.
        * svg/SVGTransform.cpp: Modernize code, inlined some getters.
        (WebCore::SVGTransform::SVGTransform):
        (WebCore::SVGTransform::setMatrix):
        * svg/SVGTransform.h: Reindent header.
        (WebCore::SVGTransform::type):
        (WebCore::SVGTransform::svgMatrix):
        (WebCore::SVGTransform::matrix):
        (WebCore::SVGTransform::angle):
        (WebCore::SVGTransform::rotationCenter):
        (WebCore::SVGTransform::isValid):
        (WebCore::operator==): Avoid function calls, make operator== a friend of SVGTransform, and compare members directly.
        (WebCore::operator!=):
        * svg/SVGTransform.idl:
        * svg/SVGTransformList.cpp: Rewritten as plain Vector<SVGTransform>.
        (WebCore::SVGTransformList::createSVGTransformFromMatrix):
        (WebCore::SVGTransformList::consolidate):
        (WebCore::SVGTransformList::concatenate):
        (WebCore::SVGTransformList::valueAsString):
        * svg/SVGTransformList.h:
        (WebCore::SVGTransformList::SVGTransformList):
        * svg/SVGTransformList.idl: Enable StrictTypeChecking/RequiresAllArguments=Raise on all attributes/functions.
        * svg/SVGTransformable.cpp: Adapt to SVGTransformList API changes.
        (WebCore::SVGTransformable::parseTransformAttribute):
        * svg/SVGTransformable.h: Ditto.
        * svg/SVGViewSpec.cpp: Ditto.
        (WebCore::SVGViewSpec::SVGViewSpec):
        (WebCore::SVGViewSpec::setTransform):
        (WebCore::SVGViewSpec::parseViewSpec):
        * svg/SVGViewSpec.h: Ditto.
        (WebCore::SVGViewSpec::transform):
        * svg/properties/SVGAnimatedListPropertyTearOff.h: Made constructor and members protected.
        * svg/properties/SVGAnimatedPropertyMacros.h: Add new helper macro DECLARE_ANIMATED_TRANSFORM_LIST_PROPERTY. This is needed until we expand all macros.
        * svg/properties/SVGAnimatedTransformListPropertyTearOff.h: Added. Extends SVGAnimatedListPropertyTearOff, returning SVGTransformListPropertyTearOff objects.
        (WebCore::SVGAnimatedTransformListPropertyTearOff::baseVal):
        (WebCore::SVGAnimatedTransformListPropertyTearOff::animVal):
        (WebCore::SVGAnimatedTransformListPropertyTearOff::create):
        (WebCore::SVGAnimatedTransformListPropertyTearOff::SVGAnimatedTransformListPropertyTearOff):
        * svg/properties/SVGListPropertyTearOff.h: Made construct and members protected.
        * svg/properties/SVGProperty.h: Declare commitChange() as pure virtual method.
        * svg/properties/SVGPropertyTraits.h: Handle SVGTransformList.
        * svg/properties/SVGStaticPropertyWithParentTearOff.h: Added. Same concept as JSSVGStaticPODTypeWrapperWithParent, used to expose SVGPropertyTearOffs for types
                                                               that are using this concept themselves. (SVGMatrix attribute of SVGTransform, both are POD types, using SVGPropertyTearOff).
        (WebCore::SVGStaticPropertyWithParentTearOff::create):
        (WebCore::SVGStaticPropertyWithParentTearOff::commitChange):
        (WebCore::SVGStaticPropertyWithParentTearOff::SVGStaticPropertyWithParentTearOff):
        * svg/properties/SVGTransformListPropertyTearOff.h: Added. Extends SVGListPropertyTearOff by two special SVGTransformList methods: consolidate and createSVGTransformFromMatrix.
        (WebCore::SVGTransformListPropertyTearOff::create):
        (WebCore::SVGTransformListPropertyTearOff::createSVGTransformFromMatrix):
        (WebCore::SVGTransformListPropertyTearOff::consolidate):
        (WebCore::SVGTransformListPropertyTearOff::SVGTransformListPropertyTearOff):
2010-11-10  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Convert SVGMatrix/SVGTransform/SVGTransformList to the new SVGPropertyTearOff concept
        https://bugs.webkit.org/show_bug.cgi?id=49311

        Add tests covering StrictTypeChecking and RequiresAllArguments=Raise for SVGMatrix/SVGPoint.
        Imported several new tests from SVG 1.1 2nd Edition, regarding SVG DOM primitives.

        * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-01-f-expected.checksum: Added.
        * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-01-f-expected.png: Added.
        * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-01-f-expected.txt: Added.
        * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-02-f-expected.checksum: Added.
        * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-02-f-expected.png: Added.
        * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-02-f-expected.txt: Added.
        * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-03-f-expected.checksum: Added.
        * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-03-f-expected.png: Added.
        * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-03-f-expected.txt: Added.
        * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-04-f-expected.checksum: Added.
        * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-04-f-expected.png: Added.
        * platform/mac/svg/W3C-SVG-1.1-SE/coords-dom-04-f-expected.txt: Added.
        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-01-b-expected.checksum: Added.
        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-01-b-expected.png: Added.
        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-01-b-expected.txt: Added.
        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-02-f-expected.checksum: Added.
        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-02-f-expected.png: Added.
        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-02-f-expected.txt: Added.
        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-03-b-expected.checksum: Added.
        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-03-b-expected.png: Added.
        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-03-b-expected.txt: Added.
        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.checksum: Added.
        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.png: Added.
        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-04-b-expected.txt: Added.
        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-05-b-expected.checksum: Added.
        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-05-b-expected.png: Added.
        * platform/mac/svg/W3C-SVG-1.1-SE/types-dom-05-b-expected.txt: Added.
        * svg/W3C-SVG-1.1-SE/coords-dom-01-f.svg: Added.
        * svg/W3C-SVG-1.1-SE/coords-dom-02-f.svg: Added.
        * svg/W3C-SVG-1.1-SE/coords-dom-03-f.svg: Added.
        * svg/W3C-SVG-1.1-SE/coords-dom-04-f.svg: Added.
        * svg/W3C-SVG-1.1-SE/types-dom-01-b.svg: Added.
        * svg/W3C-SVG-1.1-SE/types-dom-02-f.svg: Added.
        * svg/W3C-SVG-1.1-SE/types-dom-03-b.svg: Added.
        * svg/W3C-SVG-1.1-SE/types-dom-04-b.svg: Added.
        * svg/W3C-SVG-1.1-SE/types-dom-05-b.svg: Added.
        * svg/dom/SVGMatrix-expected.txt: Added.
        * svg/dom/SVGMatrix.html: Added.
        * svg/dom/SVGPoint-expected.txt:
        * svg/dom/SVGTransform-expected.txt: Added.
        * svg/dom/SVGTransform.html: Added.
        * svg/dom/SVGTransformList-expected.txt: Added.
        * svg/dom/SVGTransformList.html: Added.
        * svg/dom/script-tests/SVGMatrix.js: Added.
        * svg/dom/script-tests/SVGPoint.js:
        * svg/dom/script-tests/SVGTransform.js: Added.
        * svg/dom/script-tests/SVGTransformList.js: Added.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@71802 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/LayoutTests/svg/dom/SVGTransform-expected.txt b/LayoutTests/svg/dom/SVGTransform-expected.txt
new file mode 100644
index 0000000..5f8c178
--- /dev/null
+++ b/LayoutTests/svg/dom/SVGTransform-expected.txt
@@ -0,0 +1,115 @@
+This test checks the SVGTransform API
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+
+Check initial transform values
+PASS transform.type is SVGTransform.SVG_TRANSFORM_MATRIX
+PASS transform.angle is 0
+PASS transform.matrix.a is 1
+PASS transform.matrix.b is 0
+PASS transform.matrix.c is 0
+PASS transform.matrix.d is 1
+PASS transform.matrix.e is 0
+PASS transform.matrix.f is 0
+
+Change to skewX transformation
+PASS transform.setSkewX(45) is undefined.
+PASS transform.type is SVGTransform.SVG_TRANSFORM_SKEWX
+PASS transform.angle is 45
+PASS transform.matrix.a is 1
+PASS transform.matrix.b is 0
+PASS transform.matrix.c.toFixed(1) is "1.0"
+PASS transform.matrix.d is 1
+PASS transform.matrix.e is 0
+PASS transform.matrix.f is 0
+
+Changing matrix.e to 100, should reset transformation type to MATRIX, and angle should be 0
+PASS transform.matrix.e = 100 is 100
+PASS transform.type is SVGTransform.SVG_TRANSFORM_MATRIX
+PASS transform.angle is 0
+PASS transform.matrix.a is 1
+PASS transform.matrix.b is 0
+PASS transform.matrix.c.toFixed(1) is "1.0"
+PASS transform.matrix.d is 1
+PASS transform.matrix.e is 100
+PASS transform.matrix.f is 0
+
+Now revert to initial matrix
+PASS transform.matrix.c = null is null
+PASS transform.matrix.e = 0 is 0
+PASS transform.type is SVGTransform.SVG_TRANSFORM_MATRIX
+PASS transform.angle is 0
+PASS transform.matrix.a is 1
+PASS transform.matrix.b is 0
+PASS transform.matrix.c is 0
+PASS transform.matrix.d is 1
+PASS transform.matrix.e is 0
+PASS transform.matrix.f is 0
+
+Check passing invalid arguments to 'setMatrix'
+PASS transform.setMatrix() threw exception SyntaxError: Not enough arguments.
+PASS transform.setMatrix(transform) threw exception TypeError: Type error.
+PASS transform.setMatrix(svgElement) threw exception TypeError: Type error.
+PASS transform.setMatrix('aString') threw exception TypeError: Type error.
+PASS transform.setMatrix(1) threw exception TypeError: Type error.
+PASS transform.setMatrix(false) threw exception TypeError: Type error.
+
+Check passing invalid arguments to 'setTranslate'
+PASS transform.setTranslate() threw exception SyntaxError: Not enough arguments.
+PASS transform.setTranslate(transform) threw exception SyntaxError: Not enough arguments.
+PASS transform.setTranslate(svgElement) threw exception SyntaxError: Not enough arguments.
+PASS transform.setTranslate('aString') threw exception SyntaxError: Not enough arguments.
+PASS transform.setTranslate(1, transform) threw exception TypeError: Type error.
+PASS transform.setTranslate(1, svgElement) threw exception TypeError: Type error.
+PASS transform.setTranslate(1, 'aString') threw exception TypeError: Type error.
+PASS transform.setTranslate(transform, 1) threw exception TypeError: Type error.
+PASS transform.setTranslate(svgElement, 1) threw exception TypeError: Type error.
+PASS transform.setTranslate('aString', 1) threw exception TypeError: Type error.
+PASS transform.setTranslate(transform, transform) threw exception TypeError: Type error.
+PASS transform.setTranslate(svgElement, svgElement) threw exception TypeError: Type error.
+PASS transform.setTranslate('aString', 'aString') threw exception TypeError: Type error.
+
+Check passing invalid arguments to 'setScale'
+PASS transform.setScale() threw exception SyntaxError: Not enough arguments.
+PASS transform.setScale(transform) threw exception SyntaxError: Not enough arguments.
+PASS transform.setScale(svgElement) threw exception SyntaxError: Not enough arguments.
+PASS transform.setScale('aString') threw exception SyntaxError: Not enough arguments.
+PASS transform.setScale(1, transform) threw exception TypeError: Type error.
+PASS transform.setScale(1, svgElement) threw exception TypeError: Type error.
+PASS transform.setScale(1, 'aString') threw exception TypeError: Type error.
+PASS transform.setScale(transform, 1) threw exception TypeError: Type error.
+PASS transform.setScale(svgElement, 1) threw exception TypeError: Type error.
+PASS transform.setScale('aString', 1) threw exception TypeError: Type error.
+PASS transform.setScale(transform, transform) threw exception TypeError: Type error.
+PASS transform.setScale(svgElement, svgElement) threw exception TypeError: Type error.
+PASS transform.setScale('aString', 'aString') threw exception TypeError: Type error.
+
+Check passing invalid arguments to 'setRotate'
+PASS transform.setRotate() threw exception SyntaxError: Not enough arguments.
+PASS transform.setRotate(transform) threw exception SyntaxError: Not enough arguments.
+PASS transform.setRotate(svgElement) threw exception SyntaxError: Not enough arguments.
+PASS transform.setRotate('aString') threw exception SyntaxError: Not enough arguments.
+PASS transform.setRotate(1, transform) threw exception SyntaxError: Not enough arguments.
+PASS transform.setRotate(1, svgElement) threw exception SyntaxError: Not enough arguments.
+PASS transform.setRotate(1, 'aString') threw exception SyntaxError: Not enough arguments.
+PASS transform.setRotate(1, 1, transform) threw exception TypeError: Type error.
+PASS transform.setRotate(1, 1, svgElement) threw exception TypeError: Type error.
+PASS transform.setRotate(1, 1, 'aString') threw exception TypeError: Type error.
+
+Check passing invalid arguments to 'setSkewX'
+PASS transform.setSkewX() threw exception SyntaxError: Not enough arguments.
+PASS transform.setSkewX(transform) threw exception TypeError: Type error.
+PASS transform.setSkewX(svgElement) threw exception TypeError: Type error.
+PASS transform.setSkewX('aString') threw exception TypeError: Type error.
+
+Check passing invalid arguments to 'setSkewY'
+PASS transform.setSkewY() threw exception SyntaxError: Not enough arguments.
+PASS transform.setSkewY(transform) threw exception TypeError: Type error.
+PASS transform.setSkewY(svgElement) threw exception TypeError: Type error.
+PASS transform.setSkewY('aString') threw exception TypeError: Type error.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+