Reviewed by Dave Hyatt.
authorcmarrin@apple.com <cmarrin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 18 Dec 2008 21:06:22 +0000 (21:06 +0000)
committercmarrin@apple.com <cmarrin@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 18 Dec 2008 21:06:22 +0000 (21:06 +0000)
        https://bugs.webkit.org/show_bug.cgi?id=22888

        To avoid future dependency issues, all the TransformOperations and Animation related files need to be moved to platform

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@39378 268f45cc-cd09-0410-ab3c-d52691b4dbfc

23 files changed:
WebCore/ChangeLog
WebCore/WebCore.xcodeproj/project.pbxproj
WebCore/platform/animation/Animation.cpp [moved from WebCore/rendering/style/Animation.cpp with 50% similarity]
WebCore/platform/animation/Animation.h [moved from WebCore/rendering/style/Animation.h with 50% similarity]
WebCore/platform/animation/AnimationList.cpp [moved from WebCore/rendering/style/AnimationList.cpp with 50% similarity]
WebCore/platform/animation/AnimationList.h [moved from WebCore/rendering/style/AnimationList.h with 50% similarity]
WebCore/platform/animation/TimingFunction.h [moved from WebCore/rendering/style/TimingFunction.h with 50% similarity]
WebCore/platform/graphics/transforms/AffineTransform.cpp [moved from WebCore/platform/graphics/AffineTransform.cpp with 50% similarity]
WebCore/platform/graphics/transforms/AffineTransform.h [moved from WebCore/platform/graphics/AffineTransform.h with 50% similarity]
WebCore/platform/graphics/transforms/IdentityTransformOperation.h [moved from WebCore/rendering/style/IdentityTransformOperation.h with 50% similarity]
WebCore/platform/graphics/transforms/MatrixTransformOperation.cpp [moved from WebCore/rendering/style/MatrixTransformOperation.cpp with 50% similarity]
WebCore/platform/graphics/transforms/MatrixTransformOperation.h [moved from WebCore/rendering/style/MatrixTransformOperation.h with 50% similarity]
WebCore/platform/graphics/transforms/RotateTransformOperation.cpp [moved from WebCore/rendering/style/RotateTransformOperation.cpp with 50% similarity]
WebCore/platform/graphics/transforms/RotateTransformOperation.h [moved from WebCore/rendering/style/RotateTransformOperation.h with 50% similarity]
WebCore/platform/graphics/transforms/ScaleTransformOperation.cpp [moved from WebCore/rendering/style/ScaleTransformOperation.cpp with 50% similarity]
WebCore/platform/graphics/transforms/ScaleTransformOperation.h [moved from WebCore/rendering/style/ScaleTransformOperation.h with 50% similarity]
WebCore/platform/graphics/transforms/SkewTransformOperation.cpp [moved from WebCore/rendering/style/SkewTransformOperation.cpp with 50% similarity]
WebCore/platform/graphics/transforms/SkewTransformOperation.h [moved from WebCore/rendering/style/SkewTransformOperation.h with 50% similarity]
WebCore/platform/graphics/transforms/TransformOperation.h [moved from WebCore/rendering/style/TransformOperation.h with 50% similarity]
WebCore/platform/graphics/transforms/TransformOperations.cpp [moved from WebCore/rendering/style/TransformOperations.cpp with 50% similarity]
WebCore/platform/graphics/transforms/TransformOperations.h [moved from WebCore/rendering/style/TransformOperations.h with 50% similarity]
WebCore/platform/graphics/transforms/TranslateTransformOperation.cpp [moved from WebCore/rendering/style/TranslateTransformOperation.cpp with 50% similarity]
WebCore/platform/graphics/transforms/TranslateTransformOperation.h [moved from WebCore/rendering/style/TranslateTransformOperation.h with 50% similarity]

index 6c41082..3fe99be 100644 (file)
@@ -1,3 +1,57 @@
+2008-12-18  Chris Marrin  <cmarrin@apple.com>
+
+        Reviewed by Dave Hyatt.
+
+        https://bugs.webkit.org/show_bug.cgi?id=22888
+
+        To avoid future dependency issues, all the TransformOperations and Animation related files need to be moved to platform
+
+        * WebCore.xcodeproj/project.pbxproj:
+        * platform/animation: Added.
+        * platform/animation/Animation.cpp: Copied from WebCore/rendering/style/Animation.cpp.
+        * platform/animation/Animation.h: Copied from WebCore/rendering/style/Animation.h.
+        * platform/animation/AnimationList.cpp: Copied from WebCore/rendering/style/AnimationList.cpp.
+        * platform/animation/AnimationList.h: Copied from WebCore/rendering/style/AnimationList.h.
+        * platform/animation/TimingFunction.h: Copied from WebCore/rendering/style/TimingFunction.h.
+        * platform/graphics/AffineTransform.cpp: Removed.
+        * platform/graphics/AffineTransform.h: Removed.
+        * platform/graphics/transforms: Added.
+        * platform/graphics/transforms/AffineTransform.cpp: Copied from WebCore/platform/graphics/AffineTransform.cpp.
+        * platform/graphics/transforms/AffineTransform.h: Copied from WebCore/platform/graphics/AffineTransform.h.
+        * platform/graphics/transforms/IdentityTransformOperation.h: Copied from WebCore/rendering/style/IdentityTransformOperation.h.
+        * platform/graphics/transforms/MatrixTransformOperation.cpp: Copied from WebCore/rendering/style/MatrixTransformOperation.cpp.
+        * platform/graphics/transforms/MatrixTransformOperation.h: Copied from WebCore/rendering/style/MatrixTransformOperation.h.
+        * platform/graphics/transforms/RotateTransformOperation.cpp: Copied from WebCore/rendering/style/RotateTransformOperation.cpp.
+        * platform/graphics/transforms/RotateTransformOperation.h: Copied from WebCore/rendering/style/RotateTransformOperation.h.
+        * platform/graphics/transforms/ScaleTransformOperation.cpp: Copied from WebCore/rendering/style/ScaleTransformOperation.cpp.
+        * platform/graphics/transforms/ScaleTransformOperation.h: Copied from WebCore/rendering/style/ScaleTransformOperation.h.
+        * platform/graphics/transforms/SkewTransformOperation.cpp: Copied from WebCore/rendering/style/SkewTransformOperation.cpp.
+        * platform/graphics/transforms/SkewTransformOperation.h: Copied from WebCore/rendering/style/SkewTransformOperation.h.
+        * platform/graphics/transforms/TransformOperation.h: Copied from WebCore/rendering/style/TransformOperation.h.
+        * platform/graphics/transforms/TransformOperations.cpp: Copied from WebCore/rendering/style/TransformOperations.cpp.
+        * platform/graphics/transforms/TransformOperations.h: Copied from WebCore/rendering/style/TransformOperations.h.
+        * platform/graphics/transforms/TranslateTransformOperation.cpp: Copied from WebCore/rendering/style/TranslateTransformOperation.cpp.
+        * platform/graphics/transforms/TranslateTransformOperation.h: Copied from WebCore/rendering/style/TranslateTransformOperation.h.
+        * rendering/style/Animation.cpp: Removed.
+        * rendering/style/Animation.h: Removed.
+        * rendering/style/AnimationList.cpp: Removed.
+        * rendering/style/AnimationList.h: Removed.
+        * rendering/style/IdentityTransformOperation.h: Removed.
+        * rendering/style/MatrixTransformOperation.cpp: Removed.
+        * rendering/style/MatrixTransformOperation.h: Removed.
+        * rendering/style/RotateTransformOperation.cpp: Removed.
+        * rendering/style/RotateTransformOperation.h: Removed.
+        * rendering/style/ScaleTransformOperation.cpp: Removed.
+        * rendering/style/ScaleTransformOperation.h: Removed.
+        * rendering/style/SkewTransformOperation.cpp: Removed.
+        * rendering/style/SkewTransformOperation.h: Removed.
+        * rendering/style/TimingFunction.h: Removed.
+        * rendering/style/TransformOperation.h: Removed.
+        * rendering/style/TransformOperations.cpp: Removed.
+        * rendering/style/TransformOperations.h: Removed.
+        * rendering/style/TranslateTransformOperation.cpp: Removed.
+        * rendering/style/TranslateTransformOperation.h: Removed.
+
 2008-12-18  Cameron Zwarich  <zwarich@apple.com>
 
         Reviewed by Geoff Garen.
index 0e06a63..f86a299 100644 (file)
                46F9D5DD0B0D60170028EE36 /* aliasCursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 46F9D5DA0B0D60170028EE36 /* aliasCursor.png */; };
                46F9D5DE0B0D60170028EE36 /* noDropCursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 46F9D5DB0B0D60170028EE36 /* noDropCursor.png */; };
                46F9D5DF0B0D60170028EE36 /* progressCursor.png in Resources */ = {isa = PBXBuildFile; fileRef = 46F9D5DC0B0D60170028EE36 /* progressCursor.png */; };
+               49E911C30EF86D47009D0CAF /* AffineTransform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 49E911B30EF86D47009D0CAF /* AffineTransform.cpp */; };
+               49E911C40EF86D47009D0CAF /* AffineTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = 49E911B40EF86D47009D0CAF /* AffineTransform.h */; };
+               49E911C50EF86D47009D0CAF /* IdentityTransformOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 49E911B50EF86D47009D0CAF /* IdentityTransformOperation.h */; };
+               49E911C60EF86D47009D0CAF /* MatrixTransformOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 49E911B60EF86D47009D0CAF /* MatrixTransformOperation.cpp */; };
+               49E911C70EF86D47009D0CAF /* MatrixTransformOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 49E911B70EF86D47009D0CAF /* MatrixTransformOperation.h */; };
+               49E911C80EF86D47009D0CAF /* RotateTransformOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 49E911B80EF86D47009D0CAF /* RotateTransformOperation.cpp */; };
+               49E911C90EF86D47009D0CAF /* RotateTransformOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 49E911B90EF86D47009D0CAF /* RotateTransformOperation.h */; };
+               49E911CA0EF86D47009D0CAF /* ScaleTransformOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 49E911BA0EF86D47009D0CAF /* ScaleTransformOperation.cpp */; };
+               49E911CB0EF86D47009D0CAF /* ScaleTransformOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 49E911BB0EF86D47009D0CAF /* ScaleTransformOperation.h */; };
+               49E911CC0EF86D47009D0CAF /* SkewTransformOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 49E911BC0EF86D47009D0CAF /* SkewTransformOperation.cpp */; };
+               49E911CD0EF86D47009D0CAF /* SkewTransformOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 49E911BD0EF86D47009D0CAF /* SkewTransformOperation.h */; };
+               49E911CE0EF86D47009D0CAF /* TransformOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 49E911BE0EF86D47009D0CAF /* TransformOperation.h */; };
+               49E911CF0EF86D47009D0CAF /* TransformOperations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 49E911BF0EF86D47009D0CAF /* TransformOperations.cpp */; };
+               49E911D00EF86D47009D0CAF /* TransformOperations.h in Headers */ = {isa = PBXBuildFile; fileRef = 49E911C00EF86D47009D0CAF /* TransformOperations.h */; };
+               49E911D10EF86D47009D0CAF /* TranslateTransformOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 49E911C10EF86D47009D0CAF /* TranslateTransformOperation.cpp */; };
+               49E911D20EF86D47009D0CAF /* TranslateTransformOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = 49E911C20EF86D47009D0CAF /* TranslateTransformOperation.h */; };
+               49E912AA0EFAC906009D0CAF /* Animation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 49E912A50EFAC906009D0CAF /* Animation.cpp */; };
+               49E912AB0EFAC906009D0CAF /* Animation.h in Headers */ = {isa = PBXBuildFile; fileRef = 49E912A60EFAC906009D0CAF /* Animation.h */; };
+               49E912AC0EFAC906009D0CAF /* AnimationList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 49E912A70EFAC906009D0CAF /* AnimationList.cpp */; };
+               49E912AD0EFAC906009D0CAF /* AnimationList.h in Headers */ = {isa = PBXBuildFile; fileRef = 49E912A80EFAC906009D0CAF /* AnimationList.h */; };
+               49E912AE0EFAC906009D0CAF /* TimingFunction.h in Headers */ = {isa = PBXBuildFile; fileRef = 49E912A90EFAC906009D0CAF /* TimingFunction.h */; };
                4A8C96EB0BE69032004EEFF0 /* SelectionControllerMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4A8C96EA0BE69032004EEFF0 /* SelectionControllerMac.mm */; };
                4B17CBC90D945B370053F183 /* AccessibilityObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B17CBC80D945B370053F183 /* AccessibilityObject.h */; settings = {ATTRIBUTES = (Private, ); }; };
                4B17CBCC0D945B910053F183 /* AccessibilityObjectWrapper.mm in Sources */ = {isa = PBXBuildFile; fileRef = 4B17CBCA0D945B910053F183 /* AccessibilityObjectWrapper.mm */; };
                B26554EB0B80D74900A50EC3 /* RenderSVGTextPath.h in Headers */ = {isa = PBXBuildFile; fileRef = B26554E90B80D74900A50EC3 /* RenderSVGTextPath.h */; };
                B266CD4D0C3AEC6500EB08D2 /* JSSVGException.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B266CD4B0C3AEC6500EB08D2 /* JSSVGException.cpp */; };
                B266CD4E0C3AEC6500EB08D2 /* JSSVGException.h in Headers */ = {isa = PBXBuildFile; fileRef = B266CD4C0C3AEC6500EB08D2 /* JSSVGException.h */; };
-               B27535560B053814002CE64F /* AffineTransform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B27535270B053814002CE64F /* AffineTransform.cpp */; };
-               B27535570B053814002CE64F /* AffineTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = B27535280B053814002CE64F /* AffineTransform.h */; settings = {ATTRIBUTES = (Private, ); }; };
                B27535580B053814002CE64F /* AffineTransformCG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B275352A0B053814002CE64F /* AffineTransformCG.cpp */; };
                B27535590B053814002CE64F /* FloatPointCG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B275352B0B053814002CE64F /* FloatPointCG.cpp */; };
                B275355A0B053814002CE64F /* FloatRectCG.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B275352C0B053814002CE64F /* FloatRectCG.cpp */; };
                BC1A37C0097C715F0019F3D8 /* DOMViews.h in Headers */ = {isa = PBXBuildFile; fileRef = BC1A37AA097C715F0019F3D8 /* DOMViews.h */; settings = {ATTRIBUTES = (Private, ); }; };
                BC1DEA4F0E268EB60083A73F /* JSDocumentFragmentCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC1DEA4E0E268EB60083A73F /* JSDocumentFragmentCustom.cpp */; };
                BC20FB7F0C0E8E6C00D1447F /* JSCSSValueCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC20FB7E0C0E8E6C00D1447F /* JSCSSValueCustom.cpp */; };
-               BC2271D90E82407300E7F975 /* AnimationList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC2271D70E82407300E7F975 /* AnimationList.cpp */; };
-               BC2271DA0E82407300E7F975 /* AnimationList.h in Headers */ = {isa = PBXBuildFile; fileRef = BC2271D80E82407300E7F975 /* AnimationList.h */; settings = {ATTRIBUTES = (Private, ); }; };
                BC2272870E82E70700E7F975 /* StyleReflection.h in Headers */ = {isa = PBXBuildFile; fileRef = BC2272860E82E70700E7F975 /* StyleReflection.h */; settings = {ATTRIBUTES = (Private, ); }; };
                BC2272A20E82E87C00E7F975 /* CursorData.h in Headers */ = {isa = PBXBuildFile; fileRef = BC2272A10E82E87C00E7F975 /* CursorData.h */; settings = {ATTRIBUTES = (Private, ); }; };
                BC2272AD0E82E8F300E7F975 /* CursorList.h in Headers */ = {isa = PBXBuildFile; fileRef = BC2272AC0E82E8F300E7F975 /* CursorList.h */; settings = {ATTRIBUTES = (Private, ); }; };
                BC5EB72A0E81DE8100B25965 /* StyleMarqueeData.h in Headers */ = {isa = PBXBuildFile; fileRef = BC5EB7280E81DE8100B25965 /* StyleMarqueeData.h */; settings = {ATTRIBUTES = (Private, ); }; };
                BC5EB74D0E81E06700B25965 /* StyleMultiColData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC5EB74B0E81E06700B25965 /* StyleMultiColData.cpp */; };
                BC5EB74E0E81E06700B25965 /* StyleMultiColData.h in Headers */ = {isa = PBXBuildFile; fileRef = BC5EB74C0E81E06700B25965 /* StyleMultiColData.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               BC5EB77E0E81EBA600B25965 /* TransformOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = BC5EB77D0E81EBA600B25965 /* TransformOperation.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               BC5EB7810E81EC5B00B25965 /* IdentityTransformOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = BC5EB7800E81EC5B00B25965 /* IdentityTransformOperation.h */; settings = {ATTRIBUTES = (); }; };
-               BC5EB7830E81ECF200B25965 /* ScaleTransformOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = BC5EB7820E81ECF200B25965 /* ScaleTransformOperation.h */; settings = {ATTRIBUTES = (); }; };
-               BC5EB79D0E81ED5F00B25965 /* RotateTransformOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = BC5EB79C0E81ED5F00B25965 /* RotateTransformOperation.h */; settings = {ATTRIBUTES = (); }; };
-               BC5EB79F0E81EDD200B25965 /* SkewTransformOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = BC5EB79E0E81EDD200B25965 /* SkewTransformOperation.h */; settings = {ATTRIBUTES = (); }; };
-               BC5EB7A30E81EEAF00B25965 /* RotateTransformOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC5EB7A00E81EEAF00B25965 /* RotateTransformOperation.cpp */; };
-               BC5EB7A40E81EEAF00B25965 /* ScaleTransformOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC5EB7A10E81EEAF00B25965 /* ScaleTransformOperation.cpp */; };
-               BC5EB7A50E81EEAF00B25965 /* SkewTransformOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC5EB7A20E81EEAF00B25965 /* SkewTransformOperation.cpp */; };
-               BC5EB7CC0E81EF5D00B25965 /* TranslateTransformOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC5EB7CA0E81EF5D00B25965 /* TranslateTransformOperation.cpp */; };
-               BC5EB7CD0E81EF5D00B25965 /* TranslateTransformOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = BC5EB7CB0E81EF5D00B25965 /* TranslateTransformOperation.h */; settings = {ATTRIBUTES = (); }; };
-               BC5EB7F70E81F05700B25965 /* MatrixTransformOperation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC5EB7F50E81F05700B25965 /* MatrixTransformOperation.cpp */; };
-               BC5EB7F80E81F05700B25965 /* MatrixTransformOperation.h in Headers */ = {isa = PBXBuildFile; fileRef = BC5EB7F60E81F05700B25965 /* MatrixTransformOperation.h */; settings = {ATTRIBUTES = (); }; };
-               BC5EB80A0E81F11200B25965 /* TransformOperations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC5EB8080E81F11200B25965 /* TransformOperations.cpp */; };
-               BC5EB80B0E81F11200B25965 /* TransformOperations.h in Headers */ = {isa = PBXBuildFile; fileRef = BC5EB8090E81F11200B25965 /* TransformOperations.h */; settings = {ATTRIBUTES = (Private, ); }; };
                BC5EB80F0E81F2CE00B25965 /* StyleTransformData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC5EB80D0E81F2CE00B25965 /* StyleTransformData.cpp */; };
                BC5EB8100E81F2CE00B25965 /* StyleTransformData.h in Headers */ = {isa = PBXBuildFile; fileRef = BC5EB80E0E81F2CE00B25965 /* StyleTransformData.h */; settings = {ATTRIBUTES = (Private, ); }; };
                BC5EB8B80E8201BD00B25965 /* StyleFlexibleBoxData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC5EB8B60E8201BD00B25965 /* StyleFlexibleBoxData.cpp */; };
                BC5EB9790E82069200B25965 /* CounterContent.h in Headers */ = {isa = PBXBuildFile; fileRef = BC5EB9780E82069200B25965 /* CounterContent.h */; };
                BC5EB9800E82072500B25965 /* ContentData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC5EB97E0E82072500B25965 /* ContentData.cpp */; };
                BC5EB9810E82072500B25965 /* ContentData.h in Headers */ = {isa = PBXBuildFile; fileRef = BC5EB97F0E82072500B25965 /* ContentData.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               BC5EB9B80E820CA000B25965 /* TimingFunction.h in Headers */ = {isa = PBXBuildFile; fileRef = BC5EB9B70E820CA000B25965 /* TimingFunction.h */; settings = {ATTRIBUTES = (Private, ); }; };
-               BC5EBA0C0E823A1C00B25965 /* Animation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC5EBA0A0E823A1C00B25965 /* Animation.cpp */; };
-               BC5EBA0D0E823A1C00B25965 /* Animation.h in Headers */ = {isa = PBXBuildFile; fileRef = BC5EBA0B0E823A1C00B25965 /* Animation.h */; settings = {ATTRIBUTES = (Private, ); }; };
                BC5EBA100E823E4700B25965 /* KeyframeList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC5EBA0E0E823E4700B25965 /* KeyframeList.cpp */; };
                BC5EBA110E823E4700B25965 /* KeyframeList.h in Headers */ = {isa = PBXBuildFile; fileRef = BC5EBA0F0E823E4700B25965 /* KeyframeList.h */; };
                BC6049CC0DB560C200204739 /* CSSCanvasValue.h in Headers */ = {isa = PBXBuildFile; fileRef = BC6049CB0DB560C200204739 /* CSSCanvasValue.h */; };
                46F9D5DA0B0D60170028EE36 /* aliasCursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = aliasCursor.png; sourceTree = "<group>"; };
                46F9D5DB0B0D60170028EE36 /* noDropCursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = noDropCursor.png; sourceTree = "<group>"; };
                46F9D5DC0B0D60170028EE36 /* progressCursor.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = progressCursor.png; sourceTree = "<group>"; };
+               49E911B30EF86D47009D0CAF /* AffineTransform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AffineTransform.cpp; path = transforms/AffineTransform.cpp; sourceTree = "<group>"; };
+               49E911B40EF86D47009D0CAF /* AffineTransform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AffineTransform.h; path = transforms/AffineTransform.h; sourceTree = "<group>"; };
+               49E911B50EF86D47009D0CAF /* IdentityTransformOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IdentityTransformOperation.h; path = transforms/IdentityTransformOperation.h; sourceTree = "<group>"; };
+               49E911B60EF86D47009D0CAF /* MatrixTransformOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MatrixTransformOperation.cpp; path = transforms/MatrixTransformOperation.cpp; sourceTree = "<group>"; };
+               49E911B70EF86D47009D0CAF /* MatrixTransformOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MatrixTransformOperation.h; path = transforms/MatrixTransformOperation.h; sourceTree = "<group>"; };
+               49E911B80EF86D47009D0CAF /* RotateTransformOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RotateTransformOperation.cpp; path = transforms/RotateTransformOperation.cpp; sourceTree = "<group>"; };
+               49E911B90EF86D47009D0CAF /* RotateTransformOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RotateTransformOperation.h; path = transforms/RotateTransformOperation.h; sourceTree = "<group>"; };
+               49E911BA0EF86D47009D0CAF /* ScaleTransformOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScaleTransformOperation.cpp; path = transforms/ScaleTransformOperation.cpp; sourceTree = "<group>"; };
+               49E911BB0EF86D47009D0CAF /* ScaleTransformOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScaleTransformOperation.h; path = transforms/ScaleTransformOperation.h; sourceTree = "<group>"; };
+               49E911BC0EF86D47009D0CAF /* SkewTransformOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkewTransformOperation.cpp; path = transforms/SkewTransformOperation.cpp; sourceTree = "<group>"; };
+               49E911BD0EF86D47009D0CAF /* SkewTransformOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkewTransformOperation.h; path = transforms/SkewTransformOperation.h; sourceTree = "<group>"; };
+               49E911BE0EF86D47009D0CAF /* TransformOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TransformOperation.h; path = transforms/TransformOperation.h; sourceTree = "<group>"; };
+               49E911BF0EF86D47009D0CAF /* TransformOperations.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TransformOperations.cpp; path = transforms/TransformOperations.cpp; sourceTree = "<group>"; };
+               49E911C00EF86D47009D0CAF /* TransformOperations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TransformOperations.h; path = transforms/TransformOperations.h; sourceTree = "<group>"; };
+               49E911C10EF86D47009D0CAF /* TranslateTransformOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TranslateTransformOperation.cpp; path = transforms/TranslateTransformOperation.cpp; sourceTree = "<group>"; };
+               49E911C20EF86D47009D0CAF /* TranslateTransformOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TranslateTransformOperation.h; path = transforms/TranslateTransformOperation.h; sourceTree = "<group>"; };
+               49E912A50EFAC906009D0CAF /* Animation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Animation.cpp; path = animation/Animation.cpp; sourceTree = "<group>"; };
+               49E912A60EFAC906009D0CAF /* Animation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Animation.h; path = animation/Animation.h; sourceTree = "<group>"; };
+               49E912A70EFAC906009D0CAF /* AnimationList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AnimationList.cpp; path = animation/AnimationList.cpp; sourceTree = "<group>"; };
+               49E912A80EFAC906009D0CAF /* AnimationList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AnimationList.h; path = animation/AnimationList.h; sourceTree = "<group>"; };
+               49E912A90EFAC906009D0CAF /* TimingFunction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TimingFunction.h; path = animation/TimingFunction.h; sourceTree = "<group>"; };
                4A8C96EA0BE69032004EEFF0 /* SelectionControllerMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; name = SelectionControllerMac.mm; path = mac/SelectionControllerMac.mm; sourceTree = "<group>"; };
                4B17CBC80D945B370053F183 /* AccessibilityObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccessibilityObject.h; sourceTree = "<group>"; };
                4B17CBCA0D945B910053F183 /* AccessibilityObjectWrapper.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = AccessibilityObjectWrapper.mm; sourceTree = "<group>"; };
                B26554E90B80D74900A50EC3 /* RenderSVGTextPath.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = RenderSVGTextPath.h; sourceTree = "<group>"; };
                B266CD4B0C3AEC6500EB08D2 /* JSSVGException.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSSVGException.cpp; sourceTree = "<group>"; };
                B266CD4C0C3AEC6500EB08D2 /* JSSVGException.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = JSSVGException.h; sourceTree = "<group>"; };
-               B27535270B053814002CE64F /* AffineTransform.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = AffineTransform.cpp; sourceTree = "<group>"; };
-               B27535280B053814002CE64F /* AffineTransform.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AffineTransform.h; sourceTree = "<group>"; };
                B275352A0B053814002CE64F /* AffineTransformCG.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = AffineTransformCG.cpp; sourceTree = "<group>"; };
                B275352B0B053814002CE64F /* FloatPointCG.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = FloatPointCG.cpp; sourceTree = "<group>"; };
                B275352C0B053814002CE64F /* FloatRectCG.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = FloatRectCG.cpp; sourceTree = "<group>"; };
                BC1A37AA097C715F0019F3D8 /* DOMViews.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = DOMViews.h; sourceTree = "<group>"; };
                BC1DEA4E0E268EB60083A73F /* JSDocumentFragmentCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSDocumentFragmentCustom.cpp; sourceTree = "<group>"; };
                BC20FB7E0C0E8E6C00D1447F /* JSCSSValueCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JSCSSValueCustom.cpp; sourceTree = "<group>"; };
-               BC2271D70E82407300E7F975 /* AnimationList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AnimationList.cpp; path = style/AnimationList.cpp; sourceTree = "<group>"; };
-               BC2271D80E82407300E7F975 /* AnimationList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AnimationList.h; path = style/AnimationList.h; sourceTree = "<group>"; };
                BC2272860E82E70700E7F975 /* StyleReflection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StyleReflection.h; path = style/StyleReflection.h; sourceTree = "<group>"; };
                BC2272A10E82E87C00E7F975 /* CursorData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CursorData.h; path = style/CursorData.h; sourceTree = "<group>"; };
                BC2272AC0E82E8F300E7F975 /* CursorList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CursorList.h; path = style/CursorList.h; sourceTree = "<group>"; };
                BC5EB7280E81DE8100B25965 /* StyleMarqueeData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StyleMarqueeData.h; path = style/StyleMarqueeData.h; sourceTree = "<group>"; };
                BC5EB74B0E81E06700B25965 /* StyleMultiColData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = StyleMultiColData.cpp; path = style/StyleMultiColData.cpp; sourceTree = "<group>"; };
                BC5EB74C0E81E06700B25965 /* StyleMultiColData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StyleMultiColData.h; path = style/StyleMultiColData.h; sourceTree = "<group>"; };
-               BC5EB77D0E81EBA600B25965 /* TransformOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TransformOperation.h; path = style/TransformOperation.h; sourceTree = "<group>"; };
-               BC5EB7800E81EC5B00B25965 /* IdentityTransformOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IdentityTransformOperation.h; path = style/IdentityTransformOperation.h; sourceTree = "<group>"; };
-               BC5EB7820E81ECF200B25965 /* ScaleTransformOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ScaleTransformOperation.h; path = style/ScaleTransformOperation.h; sourceTree = "<group>"; };
-               BC5EB79C0E81ED5F00B25965 /* RotateTransformOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RotateTransformOperation.h; path = style/RotateTransformOperation.h; sourceTree = "<group>"; };
-               BC5EB79E0E81EDD200B25965 /* SkewTransformOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SkewTransformOperation.h; path = style/SkewTransformOperation.h; sourceTree = "<group>"; };
-               BC5EB7A00E81EEAF00B25965 /* RotateTransformOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RotateTransformOperation.cpp; path = style/RotateTransformOperation.cpp; sourceTree = "<group>"; };
-               BC5EB7A10E81EEAF00B25965 /* ScaleTransformOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ScaleTransformOperation.cpp; path = style/ScaleTransformOperation.cpp; sourceTree = "<group>"; };
-               BC5EB7A20E81EEAF00B25965 /* SkewTransformOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SkewTransformOperation.cpp; path = style/SkewTransformOperation.cpp; sourceTree = "<group>"; };
-               BC5EB7CA0E81EF5D00B25965 /* TranslateTransformOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TranslateTransformOperation.cpp; path = style/TranslateTransformOperation.cpp; sourceTree = "<group>"; };
-               BC5EB7CB0E81EF5D00B25965 /* TranslateTransformOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TranslateTransformOperation.h; path = style/TranslateTransformOperation.h; sourceTree = "<group>"; };
-               BC5EB7F50E81F05700B25965 /* MatrixTransformOperation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MatrixTransformOperation.cpp; path = style/MatrixTransformOperation.cpp; sourceTree = "<group>"; };
-               BC5EB7F60E81F05700B25965 /* MatrixTransformOperation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MatrixTransformOperation.h; path = style/MatrixTransformOperation.h; sourceTree = "<group>"; };
-               BC5EB8080E81F11200B25965 /* TransformOperations.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TransformOperations.cpp; path = style/TransformOperations.cpp; sourceTree = "<group>"; };
-               BC5EB8090E81F11200B25965 /* TransformOperations.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TransformOperations.h; path = style/TransformOperations.h; sourceTree = "<group>"; };
                BC5EB80D0E81F2CE00B25965 /* StyleTransformData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = StyleTransformData.cpp; path = style/StyleTransformData.cpp; sourceTree = "<group>"; };
                BC5EB80E0E81F2CE00B25965 /* StyleTransformData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StyleTransformData.h; path = style/StyleTransformData.h; sourceTree = "<group>"; };
                BC5EB8B60E8201BD00B25965 /* StyleFlexibleBoxData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = StyleFlexibleBoxData.cpp; path = style/StyleFlexibleBoxData.cpp; sourceTree = "<group>"; };
                BC5EB9780E82069200B25965 /* CounterContent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CounterContent.h; path = style/CounterContent.h; sourceTree = "<group>"; };
                BC5EB97E0E82072500B25965 /* ContentData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ContentData.cpp; path = style/ContentData.cpp; sourceTree = "<group>"; };
                BC5EB97F0E82072500B25965 /* ContentData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ContentData.h; path = style/ContentData.h; sourceTree = "<group>"; };
-               BC5EB9B70E820CA000B25965 /* TimingFunction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TimingFunction.h; path = style/TimingFunction.h; sourceTree = "<group>"; };
-               BC5EBA0A0E823A1C00B25965 /* Animation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Animation.cpp; path = style/Animation.cpp; sourceTree = "<group>"; };
-               BC5EBA0B0E823A1C00B25965 /* Animation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Animation.h; path = style/Animation.h; sourceTree = "<group>"; };
                BC5EBA0E0E823E4700B25965 /* KeyframeList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = KeyframeList.cpp; path = style/KeyframeList.cpp; sourceTree = "<group>"; };
                BC5EBA0F0E823E4700B25965 /* KeyframeList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = KeyframeList.h; path = style/KeyframeList.h; sourceTree = "<group>"; };
                BC5EC1760A507E3E006007F5 /* view-source.css */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = "view-source.css"; sourceTree = "<group>"; };
                        name = animation;
                        sourceTree = "<group>";
                };
+               49E911B20EF86D27009D0CAF /* transforms */ = {
+                       isa = PBXGroup;
+                       children = (
+                               49E911B30EF86D47009D0CAF /* AffineTransform.cpp */,
+                               49E911B40EF86D47009D0CAF /* AffineTransform.h */,
+                               49E911B50EF86D47009D0CAF /* IdentityTransformOperation.h */,
+                               49E911B60EF86D47009D0CAF /* MatrixTransformOperation.cpp */,
+                               49E911B70EF86D47009D0CAF /* MatrixTransformOperation.h */,
+                               49E911B80EF86D47009D0CAF /* RotateTransformOperation.cpp */,
+                               49E911B90EF86D47009D0CAF /* RotateTransformOperation.h */,
+                               49E911BA0EF86D47009D0CAF /* ScaleTransformOperation.cpp */,
+                               49E911BB0EF86D47009D0CAF /* ScaleTransformOperation.h */,
+                               49E911BC0EF86D47009D0CAF /* SkewTransformOperation.cpp */,
+                               49E911BD0EF86D47009D0CAF /* SkewTransformOperation.h */,
+                               49E911BE0EF86D47009D0CAF /* TransformOperation.h */,
+                               49E911BF0EF86D47009D0CAF /* TransformOperations.cpp */,
+                               49E911C00EF86D47009D0CAF /* TransformOperations.h */,
+                               49E911C10EF86D47009D0CAF /* TranslateTransformOperation.cpp */,
+                               49E911C20EF86D47009D0CAF /* TranslateTransformOperation.h */,
+                       );
+                       name = transforms;
+                       sourceTree = "<group>";
+               };
+               49E912A40EFAC8E6009D0CAF /* animation */ = {
+                       isa = PBXGroup;
+                       children = (
+                               49E912A50EFAC906009D0CAF /* Animation.cpp */,
+                               49E912A60EFAC906009D0CAF /* Animation.h */,
+                               49E912A70EFAC906009D0CAF /* AnimationList.cpp */,
+                               49E912A80EFAC906009D0CAF /* AnimationList.h */,
+                               49E912A90EFAC906009D0CAF /* TimingFunction.h */,
+                       );
+                       name = animation;
+                       sourceTree = "<group>";
+               };
                4C6B99150E52E37300487BB7 /* wml */ = {
                        isa = PBXGroup;
                        children = (
                                B27535290B053814002CE64F /* cg */,
                                A75E8B7F0E1DE2B0007F2481 /* filters */,
                                B27535490B053814002CE64F /* mac */,
-                               B27535270B053814002CE64F /* AffineTransform.cpp */,
-                               B27535280B053814002CE64F /* AffineTransform.h */,
+                               49E911B20EF86D27009D0CAF /* transforms */,
                                A89943270B42338700D7C802 /* BitmapImage.cpp */,
                                A89943260B42338700D7C802 /* BitmapImage.h */,
                                B27535380B053814002CE64F /* Color.cpp */,
                BC8C8FAA0DDCD2F200B592F4 /* style */ = {
                        isa = PBXGroup;
                        children = (
-                               BC5EBA0A0E823A1C00B25965 /* Animation.cpp */,
-                               BC5EBA0B0E823A1C00B25965 /* Animation.h */,
-                               BC2271D70E82407300E7F975 /* AnimationList.cpp */,
-                               BC2271D80E82407300E7F975 /* AnimationList.h */,
                                BC5EB91D0E82040800B25965 /* BindingURI.cpp */,
                                BC5EB91E0E82040800B25965 /* BindingURI.h */,
                                BC5EB5E00E81BE8700B25965 /* BorderData.h */,
                                BC22746E0E83664500E7F975 /* DataRef.h */,
                                BC5EB69C0E81DAEB00B25965 /* FillLayer.cpp */,
                                BC5EB69D0E81DAEB00B25965 /* FillLayer.h */,
-                               BC5EB7800E81EC5B00B25965 /* IdentityTransformOperation.h */,
                                BC5EBA0E0E823E4700B25965 /* KeyframeList.cpp */,
                                BC5EBA0F0E823E4700B25965 /* KeyframeList.h */,
-                               BC5EB7F50E81F05700B25965 /* MatrixTransformOperation.cpp */,
-                               BC5EB7F60E81F05700B25965 /* MatrixTransformOperation.h */,
                                BCEF43DF0E674110001C1287 /* NinePieceImage.cpp */,
                                BCEF43DC0E674012001C1287 /* NinePieceImage.h */,
                                BC5EB5DC0E81B8DD00B25965 /* OutlineValue.h */,
                                BC8C8FAB0DDCD31B00B592F4 /* RenderStyle.cpp */,
                                BC8C8FAC0DDCD31B00B592F4 /* RenderStyle.h */,
                                BC5EB6670E81CB7100B25965 /* RenderStyleConstants.h */,
-                               BC5EB7A00E81EEAF00B25965 /* RotateTransformOperation.cpp */,
-                               BC5EB79C0E81ED5F00B25965 /* RotateTransformOperation.h */,
                                BC2274740E8366E200E7F975 /* SVGRenderStyle.cpp */,
                                BC2274750E8366E200E7F975 /* SVGRenderStyle.h */,
                                BC2274760E8366E200E7F975 /* SVGRenderStyleDefs.cpp */,
                                BC2274770E8366E200E7F975 /* SVGRenderStyleDefs.h */,
-                               BC5EB7A10E81EEAF00B25965 /* ScaleTransformOperation.cpp */,
-                               BC5EB7820E81ECF200B25965 /* ScaleTransformOperation.h */,
                                BC5EB8C10E82031B00B25965 /* ShadowData.cpp */,
                                BC5EB8C20E82031B00B25965 /* ShadowData.h */,
-                               BC5EB7A20E81EEAF00B25965 /* SkewTransformOperation.cpp */,
-                               BC5EB79E0E81EDD200B25965 /* SkewTransformOperation.h */,
                                BC5EB6A00E81DC4F00B25965 /* StyleBackgroundData.cpp */,
                                BC5EB6A10E81DC4F00B25965 /* StyleBackgroundData.h */,
                                BC5EB67C0E81D42000B25965 /* StyleBoxData.cpp */,
                                BC5EB80E0E81F2CE00B25965 /* StyleTransformData.h */,
                                BC5EB6970E81DA6300B25965 /* StyleVisualData.cpp */,
                                BC5EB6980E81DA6300B25965 /* StyleVisualData.h */,
-                               BC5EB9B70E820CA000B25965 /* TimingFunction.h */,
-                               BC5EB77D0E81EBA600B25965 /* TransformOperation.h */,
-                               BC5EB8080E81F11200B25965 /* TransformOperations.cpp */,
-                               BC5EB8090E81F11200B25965 /* TransformOperations.h */,
-                               BC5EB7CA0E81EF5D00B25965 /* TranslateTransformOperation.cpp */,
-                               BC5EB7CB0E81EF5D00B25965 /* TranslateTransformOperation.h */,
                        );
                        name = style;
                        sourceTree = "<group>";
                BCF1A5BA097832090061A123 /* platform */ = {
                        isa = PBXGroup;
                        children = (
+                               49E912A40EFAC8E6009D0CAF /* animation */,
                                1AE42F670AA4B8CB00C8612D /* cf */,
                                B2A015910AF6CD53006BCE0E /* graphics */,
                                6582A14809999D6C00BEEB6D /* mac */,
                                29AAC51F0E53963B008F9B3B /* AccessibilityTableHeaderContainer.h in Headers */,
                                29800C950E524C8B00025536 /* AccessibilityTableRow.h in Headers */,
                                E1C4DE690EA75C1E0023CCD6 /* ActiveDOMObject.h in Headers */,
-                               B27535570B053814002CE64F /* AffineTransform.h in Headers */,
-                               BC5EBA0D0E823A1C00B25965 /* Animation.h in Headers */,
                                316FE1120E6E1DA700BF6088 /* AnimationBase.h in Headers */,
                                316FE1140E6E1DA700BF6088 /* AnimationController.h in Headers */,
-                               BC2271DA0E82407300E7F975 /* AnimationList.h in Headers */,
                                93309DD7099E64920056E581 /* AppendNodeCommand.h in Headers */,
                                1A8F6BBD0DB55CDC001DB794 /* ApplicationCache.h in Headers */,
                                1A8F6BBF0DB55CDC001DB794 /* ApplicationCacheGroup.h in Headers */,
                                1A2D753D0DE47FAB00F0A648 /* IconFetcher.h in Headers */,
                                513F14540AB634C400094DDF /* IconLoader.h in Headers */,
                                51E1ECC10C91C90400DC255B /* IconRecord.h in Headers */,
-                               BC5EB7810E81EC5B00B25965 /* IdentityTransformOperation.h in Headers */,
                                B27535700B053814002CE64F /* Image.h in Headers */,
                                B2A10B920B3818BD00099AA4 /* ImageBuffer.h in Headers */,
                                A779791A0D6B9D0C003851B9 /* ImageData.h in Headers */,
                                1A8F6BC60DB55CDC001DB794 /* ManifestParser.h in Headers */,
                                A8C4A80509D563270003AC8D /* MappedAttribute.h in Headers */,
                                A8C4A84C09D5649D0003AC8D /* MappedAttributeEntry.h in Headers */,
-                               BC5EB7F80E81F05700B25965 /* MatrixTransformOperation.h in Headers */,
                                ABFE7E130D32FAF60066F4D2 /* MediaControlElements.h in Headers */,
                                AB40484E0E083FA8007D6920 /* MediaDocument.h in Headers */,
                                E44613AD0CD6331000FADA75 /* MediaError.h in Headers */,
                                514C76540CE9234E007EF3CD /* ResourceResponse.h in Headers */,
                                514C767F0CE923A1007EF3CD /* ResourceResponseBase.h in Headers */,
                                A8CFF5E10A155A05000A4234 /* RootInlineBox.h in Headers */,
-                               BC5EB79D0E81ED5F00B25965 /* RotateTransformOperation.h in Headers */,
                                E4AFD00C0DAF335400F5F55C /* SMILTime.h in Headers */,
                                E4AFD00E0DAF335500F5F55C /* SMILTimeContainer.h in Headers */,
                                51EC92590CE90DB400F90308 /* SQLError.h in Headers */,
                                B2227AF30D00BF220071B782 /* SVGViewSpec.h in Headers */,
                                B2227AF60D00BF220071B782 /* SVGZoomAndPan.h in Headers */,
                                B2E4EC980D00C22B00432643 /* SVGZoomEvent.h in Headers */,
-                               BC5EB7830E81ECF200B25965 /* ScaleTransformOperation.h in Headers */,
                                1CEFC9B90D78DC8C007D2579 /* SchedulePair.h in Headers */,
                                5DFE8F570D16477C0076E937 /* ScheduledAction.h in Headers */,
                                BCEC01BE0C274DAC009F4EC9 /* Screen.h in Headers */,
                                1A4A954E0B4EDCCB002D8C3C /* SharedBuffer.h in Headers */,
                                93309EA3099EB78C0056E581 /* SharedTimer.h in Headers */,
                                B2C3DA650D006CD600EF6F26 /* SimpleFontData.h in Headers */,
-                               BC5EB79F0E81EDD200B25965 /* SkewTransformOperation.h in Headers */,
                                4B6FA6F40C39E48C00087011 /* SmartReplace.h in Headers */,
                                0A4844990CA44CB200B7BD48 /* SoftLinking.h in Headers */,
                                4B3043C70AE0370300A82647 /* Sound.h in Headers */,
                                51DF6D7E0B92A16D00C2DC85 /* ThreadCheck.h in Headers */,
                                E44613B00CD6331000FADA75 /* TimeRanges.h in Headers */,
                                9305B24D098F1B6B00C28855 /* Timer.h in Headers */,
-                               BC5EB9B80E820CA000B25965 /* TimingFunction.h in Headers */,
                                BCCFBAE80B5152ED0001F1D7 /* Tokenizer.h in Headers */,
-                               BC5EB77E0E81EBA600B25965 /* TransformOperation.h in Headers */,
-                               BC5EB80B0E81F11200B25965 /* TransformOperations.h in Headers */,
-                               BC5EB7CD0E81EF5D00B25965 /* TranslateTransformOperation.h in Headers */,
                                854FE7370A2297BE0058D7AD /* Traversal.h in Headers */,
                                1419D2C50CEA6F6100FF507A /* TreeShared.h in Headers */,
                                854FE7390A2297BE0058D7AD /* TreeWalker.h in Headers */,
                                1A569D250D7E2B82007C3983 /* runtime_root.h in Headers */,
                                93309E1E099E64920056E581 /* visible_units.h in Headers */,
                                08820BDF0EF5D381009099A8 /* WMLTableElement.h in Headers */,
+                               49E911C40EF86D47009D0CAF /* AffineTransform.h in Headers */,
+                               49E911C50EF86D47009D0CAF /* IdentityTransformOperation.h in Headers */,
+                               49E911C70EF86D47009D0CAF /* MatrixTransformOperation.h in Headers */,
+                               49E911C90EF86D47009D0CAF /* RotateTransformOperation.h in Headers */,
+                               49E911CB0EF86D47009D0CAF /* ScaleTransformOperation.h in Headers */,
+                               49E911CD0EF86D47009D0CAF /* SkewTransformOperation.h in Headers */,
+                               49E911CE0EF86D47009D0CAF /* TransformOperation.h in Headers */,
+                               49E911D00EF86D47009D0CAF /* TransformOperations.h in Headers */,
+                               49E911D20EF86D47009D0CAF /* TranslateTransformOperation.h in Headers */,
+                               49E912AB0EFAC906009D0CAF /* Animation.h in Headers */,
+                               49E912AD0EFAC906009D0CAF /* AnimationList.h in Headers */,
+                               49E912AE0EFAC906009D0CAF /* TimingFunction.h in Headers */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
                                29AAC5200E53963B008F9B3B /* AccessibilityTableHeaderContainer.cpp in Sources */,
                                29800C960E524C8B00025536 /* AccessibilityTableRow.cpp in Sources */,
                                E1C4DE6E0EA75C650023CCD6 /* ActiveDOMObject.cpp in Sources */,
-                               B27535560B053814002CE64F /* AffineTransform.cpp in Sources */,
                                B27535580B053814002CE64F /* AffineTransformCG.cpp in Sources */,
-                               BC5EBA0C0E823A1C00B25965 /* Animation.cpp in Sources */,
                                316FE1110E6E1DA700BF6088 /* AnimationBase.cpp in Sources */,
                                316FE1130E6E1DA700BF6088 /* AnimationController.cpp in Sources */,
-                               BC2271D90E82407300E7F975 /* AnimationList.cpp in Sources */,
                                93309DD6099E64920056E581 /* AppendNodeCommand.cpp in Sources */,
                                1A8F6BBC0DB55CDC001DB794 /* ApplicationCache.cpp in Sources */,
                                1A8F6BBE0DB55CDC001DB794 /* ApplicationCacheGroup.cpp in Sources */,
                                93E227E10AF589AD00D48324 /* MainResourceLoader.cpp in Sources */,
                                1A8F6BC50DB55CDC001DB794 /* ManifestParser.cpp in Sources */,
                                A8C4A80609D563270003AC8D /* MappedAttribute.cpp in Sources */,
-                               BC5EB7F70E81F05700B25965 /* MatrixTransformOperation.cpp in Sources */,
                                ABFE7E120D32FAF60066F4D2 /* MediaControlElements.cpp in Sources */,
                                AB40484D0E083FA8007D6920 /* MediaDocument.cpp in Sources */,
                                4E1959210A39DABA00220FE5 /* MediaFeatureNames.cpp in Sources */,
                                514C767E0CE923A1007EF3CD /* ResourceResponseBase.cpp in Sources */,
                                514C76550CE9234F007EF3CD /* ResourceResponseMac.mm in Sources */,
                                A8CFF5E70A155A05000A4234 /* RootInlineBox.cpp in Sources */,
-                               BC5EB7A30E81EEAF00B25965 /* RotateTransformOperation.cpp in Sources */,
                                E4AFD00B0DAF335400F5F55C /* SMILTime.cpp in Sources */,
                                E4AFD00D0DAF335500F5F55C /* SMILTimeContainer.cpp in Sources */,
                                519611730CAC56570010A80C /* SQLResultSet.cpp in Sources */,
                                B2227AF20D00BF220071B782 /* SVGViewSpec.cpp in Sources */,
                                B2227AF50D00BF220071B782 /* SVGZoomAndPan.cpp in Sources */,
                                B2E4EC970D00C22B00432643 /* SVGZoomEvent.cpp in Sources */,
-                               BC5EB7A40E81EEAF00B25965 /* ScaleTransformOperation.cpp in Sources */,
                                1CEFC9BA0D78DC8C007D2579 /* SchedulePair.cpp in Sources */,
                                1CE24F970D7CAF0E007E04C2 /* SchedulePairMac.mm in Sources */,
                                5DFE8F560D16477B0076E937 /* ScheduledAction.cpp in Sources */,
                                93309EA2099EB78C0056E581 /* SharedTimerMac.mm in Sources */,
                                B2C3DA640D006CD600EF6F26 /* SimpleFontData.cpp in Sources */,
                                B2AFFC7F0D00A5C10030074D /* SimpleFontDataMac.mm in Sources */,
-                               BC5EB7A50E81EEAF00B25965 /* SkewTransformOperation.cpp in Sources */,
                                4B6FA6F50C39E48C00087011 /* SmartReplace.cpp in Sources */,
                                4B6FA6F70C39E4A100087011 /* SmartReplaceCF.cpp in Sources */,
                                4B3043C90AE0371D00A82647 /* SoundMac.mm in Sources */,
                                51DF6D800B92A18E00C2DC85 /* ThreadCheck.mm in Sources */,
                                E44613AF0CD6331000FADA75 /* TimeRanges.cpp in Sources */,
                                93309EA4099EB78C0056E581 /* Timer.cpp in Sources */,
-                               BC5EB80A0E81F11200B25965 /* TransformOperations.cpp in Sources */,
-                               BC5EB7CC0E81EF5D00B25965 /* TranslateTransformOperation.cpp in Sources */,
                                854FE7360A2297BE0058D7AD /* Traversal.cpp in Sources */,
                                854FE7380A2297BE0058D7AD /* TreeWalker.cpp in Sources */,
                                93309E19099E64920056E581 /* TypingCommand.cpp in Sources */,
                                1A569D240D7E2B82007C3983 /* runtime_root.cpp in Sources */,
                                93309E1D099E64920056E581 /* visible_units.cpp in Sources */,
                                08820BDE0EF5D381009099A8 /* WMLTableElement.cpp in Sources */,
+                               49E911C30EF86D47009D0CAF /* AffineTransform.cpp in Sources */,
+                               49E911C60EF86D47009D0CAF /* MatrixTransformOperation.cpp in Sources */,
+                               49E911C80EF86D47009D0CAF /* RotateTransformOperation.cpp in Sources */,
+                               49E911CA0EF86D47009D0CAF /* ScaleTransformOperation.cpp in Sources */,
+                               49E911CC0EF86D47009D0CAF /* SkewTransformOperation.cpp in Sources */,
+                               49E911CF0EF86D47009D0CAF /* TransformOperations.cpp in Sources */,
+                               49E911D10EF86D47009D0CAF /* TranslateTransformOperation.cpp in Sources */,
+                               49E912AA0EFAC906009D0CAF /* Animation.cpp in Sources */,
+                               49E912AC0EFAC906009D0CAF /* AnimationList.cpp in Sources */,
                        );
                        runOnlyForDeploymentPostprocessing = 0;
                };
similarity index 50%
rename from WebCore/rendering/style/Animation.cpp
rename to WebCore/platform/animation/Animation.cpp
index ed3a7e7..3a2e48c 100644 (file)
@@ -126,3 +126,131 @@ bool Animation::animationsMatch(const Animation* o, bool matchPlayStates) const
 }
 
 } // namespace WebCore
+/*
+ * Copyright (C) 1999 Antti Koivisto (koivisto@kde.org)
+ * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "config.h"
+#include "Animation.h"
+
+#include "RenderStyle.h"
+
+namespace WebCore {
+
+Animation::Animation()
+    : m_delay(RenderStyle::initialAnimationDelay())
+    , m_direction(RenderStyle::initialAnimationDirection())
+    , m_duration(RenderStyle::initialAnimationDuration())
+    , m_iterationCount(RenderStyle::initialAnimationIterationCount())
+    , m_name(RenderStyle::initialAnimationName())
+    , m_property(RenderStyle::initialAnimationProperty())
+    , m_timingFunction(RenderStyle::initialAnimationTimingFunction())
+    , m_playState(RenderStyle::initialAnimationPlayState())
+    , m_delaySet(false)
+    , m_directionSet(false)
+    , m_durationSet(false)
+    , m_iterationCountSet(false)
+    , m_nameSet(false)
+    , m_playStateSet(false)
+    , m_propertySet(false)
+    , m_timingFunctionSet(false)
+    , m_isNone(false)
+{
+}
+
+Animation::Animation(const Animation& o)
+    : RefCounted<Animation>()
+    , m_delay(o.m_delay)
+    , m_direction(o.m_direction)
+    , m_duration(o.m_duration)
+    , m_iterationCount(o.m_iterationCount)
+    , m_name(o.m_name)
+    , m_property(o.m_property)
+    , m_timingFunction(o.m_timingFunction)
+    , m_playState(o.m_playState)
+    , m_delaySet(o.m_delaySet)
+    , m_directionSet(o.m_directionSet)
+    , m_durationSet(o.m_durationSet)
+    , m_iterationCountSet(o.m_iterationCountSet)
+    , m_nameSet(o.m_nameSet)
+    , m_playStateSet(o.m_playStateSet)
+    , m_propertySet(o.m_propertySet)
+    , m_timingFunctionSet(o.m_timingFunctionSet)
+    , m_isNone(o.m_isNone)
+{
+}
+
+Animation& Animation::operator=(const Animation& o)
+{
+    m_delay = o.m_delay;
+    m_direction = o.m_direction;
+    m_duration = o.m_duration;
+    m_iterationCount = o.m_iterationCount;
+    m_name = o.m_name;
+    m_playState = o.m_playState;
+    m_property = o.m_property;
+    m_timingFunction = o.m_timingFunction;
+
+    m_delaySet = o.m_delaySet;
+    m_directionSet = o.m_directionSet;
+    m_durationSet = o.m_durationSet;
+    m_iterationCountSet = o.m_iterationCountSet;
+    m_nameSet = o.m_nameSet;
+    m_playStateSet = o.m_playStateSet;
+    m_propertySet = o.m_propertySet;
+    m_timingFunctionSet = o.m_timingFunctionSet;
+
+    m_isNone = o.m_isNone;
+
+    return *this;
+}
+
+Animation::~Animation()
+{
+}
+
+bool Animation::animationsMatch(const Animation* o, bool matchPlayStates) const
+{
+    if (!o)
+        return false;
+    
+    bool result = m_delay == o->m_delay &&
+                  m_direction == o->m_direction &&
+                  m_duration == o->m_duration &&
+                  m_iterationCount == o->m_iterationCount &&
+                  m_name == o->m_name &&
+                  m_property == o->m_property && 
+                  m_timingFunction == o->m_timingFunction &&
+                  m_delaySet == o->m_delaySet &&
+                  m_directionSet == o->m_directionSet &&
+                  m_durationSet == o->m_durationSet &&
+                  m_iterationCountSet == o->m_iterationCountSet &&
+                  m_nameSet == o->m_nameSet &&
+                  m_propertySet == o->m_propertySet &&
+                  m_timingFunctionSet == o->m_timingFunctionSet &&
+                  m_isNone == o->m_isNone;
+
+    if (!result)
+        return false;
+
+    return !matchPlayStates || (m_playState == o->m_playState && m_playStateSet == o->m_playStateSet);
+}
+
+} // namespace WebCore
similarity index 50%
rename from WebCore/rendering/style/Animation.h
rename to WebCore/platform/animation/Animation.h
index 8930e30..b35984e 100644 (file)
@@ -131,3 +131,136 @@ private:
 } // namespace WebCore
 
 #endif // Animation_h
+/*
+ * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
+ *           (C) 2000 Antti Koivisto (koivisto@kde.org)
+ *           (C) 2000 Dirk Mueller (mueller@kde.org)
+ * Copyright (C) 2003, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef Animation_h
+#define Animation_h
+
+#include "PlatformString.h"
+#include "TimingFunction.h"
+#include <wtf/PassRefPtr.h>
+#include <wtf/RefCounted.h>
+
+namespace WebCore {
+
+class Animation : public RefCounted<Animation> {
+public:
+    ~Animation();
+
+    static PassRefPtr<Animation> create() { return adoptRef(new Animation); };
+    
+    bool isDelaySet() const { return m_delaySet; }
+    bool isDirectionSet() const { return m_directionSet; }
+    bool isDurationSet() const { return m_durationSet; }
+    bool isIterationCountSet() const { return m_iterationCountSet; }
+    bool isNameSet() const { return m_nameSet; }
+    bool isPlayStateSet() const { return m_playStateSet; }
+    bool isPropertySet() const { return m_propertySet; }
+    bool isTimingFunctionSet() const { return m_timingFunctionSet; }
+
+    // Flags this to be the special "none" animation (animation-name: none)
+    bool isNoneAnimation() const { return m_isNone; }
+    // We can make placeholder Animation objects to keep the comma-separated lists
+    // of properties in sync. isValidAnimation means this is not a placeholder.
+    bool isValidAnimation() const { return !m_isNone && !m_name.isEmpty(); }
+
+    bool isEmpty() const
+    {
+        return (!m_directionSet && !m_durationSet && !m_nameSet && !m_playStateSet && 
+               !m_iterationCountSet && !m_delaySet && !m_timingFunctionSet && !m_propertySet);
+    }
+
+    bool isEmptyOrZeroDuration() const
+    {
+        return isEmpty() || (m_duration == 0 && m_delay <= 0);
+    }
+
+    void clearDelay() { m_delaySet = false; }
+    void clearDirection() { m_directionSet = false; }
+    void clearDuration() { m_durationSet = false; }
+    void clearIterationCount() { m_iterationCountSet = false; }
+    void clearName() { m_nameSet = false; }
+    void clearPlayState() { m_playStateSet = AnimPlayStatePlaying; }
+    void clearProperty() { m_propertySet = false; }
+    void clearTimingFunction() { m_timingFunctionSet = false; }
+
+    double delay() const { return m_delay; }
+    bool direction() const { return m_direction; }
+    double duration() const { return m_duration; }
+    int iterationCount() const { return m_iterationCount; }
+    const String& name() const { return m_name; }
+    unsigned playState() const { return m_playState; }
+    int property() const { return m_property; }
+    const TimingFunction& timingFunction() const { return m_timingFunction; }
+
+    void setDelay(double c) { m_delay = c; m_delaySet = true; }
+    void setDirection(bool d) { m_direction = d; m_directionSet = true; }
+    void setDuration(double d) { ASSERT(d >= 0); m_duration = d; m_durationSet = true; }
+    void setIterationCount(int c) { m_iterationCount = c; m_iterationCountSet = true; }
+    void setName(const String& n) { m_name = n; m_nameSet = true; }
+    void setPlayState(unsigned d) { m_playState = d; m_playStateSet = true; }
+    void setProperty(int t) { m_property = t; m_propertySet = true; }
+    void setTimingFunction(const TimingFunction& f) { m_timingFunction = f; m_timingFunctionSet = true; }
+
+    void setIsNoneAnimation(bool n) { m_isNone = n; }
+
+    Animation& operator=(const Animation& o);
+
+    // return true if all members of this class match (excluding m_next)
+    bool animationsMatch(const Animation*, bool matchPlayStates = true) const;
+
+    // return true every Animation in the chain (defined by m_next) match 
+    bool operator==(const Animation& o) const { return animationsMatch(&o); }
+    bool operator!=(const Animation& o) const { return !(*this == o); }
+
+private:
+    Animation();
+    Animation(const Animation& o);
+    
+    double m_delay;
+    bool m_direction;
+    double m_duration;
+    int m_iterationCount;
+    String m_name;
+    int m_property;
+    TimingFunction m_timingFunction;
+
+    unsigned m_playState     : 2;
+
+    bool m_delaySet          : 1;
+    bool m_directionSet      : 1;
+    bool m_durationSet       : 1;
+    bool m_iterationCountSet : 1;
+    bool m_nameSet           : 1;
+    bool m_playStateSet      : 1;
+    bool m_propertySet       : 1;
+    bool m_timingFunctionSet : 1;
+    
+    bool m_isNone            : 1;
+};
+
+} // namespace WebCore
+
+#endif // Animation_h
similarity index 50%
rename from WebCore/rendering/style/AnimationList.cpp
rename to WebCore/platform/animation/AnimationList.cpp
index 804dede..2fef2bc 100644 (file)
@@ -55,3 +55,60 @@ bool AnimationList::operator==(const AnimationList& o) const
 }
 
 } // namespace WebCore
+/*
+ * Copyright (C) 1999 Antti Koivisto (koivisto@kde.org)
+ * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "config.h"
+#include "AnimationList.h"
+
+namespace WebCore {
+
+#define FILL_UNSET_PROPERTY(test, propGet, propSet) \
+for (i = 0; i < size() && animation(i)->test(); ++i) { } \
+if (i < size() && i != 0) { \
+    for (size_t j = 0; i < size(); ++i, ++j) \
+        animation(i)->propSet(animation(j)->propGet()); \
+}
+
+void AnimationList::fillUnsetProperties()
+{
+    size_t i;
+    FILL_UNSET_PROPERTY(isDelaySet, delay, setDelay);
+    FILL_UNSET_PROPERTY(isDirectionSet, direction, setDirection);
+    FILL_UNSET_PROPERTY(isDurationSet, duration, setDuration);
+    FILL_UNSET_PROPERTY(isIterationCountSet, iterationCount, setIterationCount);
+    FILL_UNSET_PROPERTY(isPlayStateSet, playState, setPlayState);
+    FILL_UNSET_PROPERTY(isNameSet, name, setName);
+    FILL_UNSET_PROPERTY(isTimingFunctionSet, timingFunction, setTimingFunction);
+    FILL_UNSET_PROPERTY(isPropertySet, property, setProperty);
+}
+
+bool AnimationList::operator==(const AnimationList& o) const
+{
+    if (size() != o.size())
+        return false;
+    for (size_t i = 0; i < size(); ++i)
+        if (*animation(i) != *o.animation(i))
+            return false;
+    return true;
+}
+
+} // namespace WebCore
similarity index 50%
rename from WebCore/rendering/style/AnimationList.h
rename to WebCore/platform/animation/AnimationList.h
index 9901424..96ac8c9 100644 (file)
@@ -58,3 +58,63 @@ private:
 } // namespace WebCore
 
 #endif // AnimationList_h
+/*
+ * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
+ *           (C) 2000 Antti Koivisto (koivisto@kde.org)
+ *           (C) 2000 Dirk Mueller (mueller@kde.org)
+ * Copyright (C) 2003, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef AnimationList_h
+#define AnimationList_h
+
+#include "Animation.h"
+#include <wtf/RefPtr.h>
+#include <wtf/Vector.h>
+
+namespace WebCore {
+
+class AnimationList {
+public:
+    void fillUnsetProperties();
+    bool operator==(const AnimationList& o) const;
+    bool operator!=(const AnimationList& o) const
+    {
+        return !(*this == o);
+    }
+    
+    size_t size() const { return m_animations.size(); }
+    bool isEmpty() const { return m_animations.isEmpty(); }
+    
+    void resize(size_t n) { m_animations.resize(n); }
+    void remove(size_t i) { m_animations.remove(i); }
+    void append(PassRefPtr<Animation> anim) { m_animations.append(anim); }
+    
+    Animation* animation(size_t i) { return m_animations[i].get(); }
+    const Animation* animation(size_t i) const { return m_animations[i].get(); }
+    
+private:
+    Vector<RefPtr<Animation> > m_animations;
+};    
+
+
+} // namespace WebCore
+
+#endif // AnimationList_h
similarity index 50%
rename from WebCore/rendering/style/TimingFunction.h
rename to WebCore/platform/animation/TimingFunction.h
index f114596..3d18f8a 100644 (file)
@@ -72,3 +72,77 @@ private:
 } // namespace WebCore
 
 #endif // TimingFunction_h
+/*
+ * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
+ *           (C) 2000 Antti Koivisto (koivisto@kde.org)
+ *           (C) 2000 Dirk Mueller (mueller@kde.org)
+ * Copyright (C) 2003, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef TimingFunction_h
+#define TimingFunction_h
+
+#include "RenderStyleConstants.h"
+
+namespace WebCore {
+
+struct TimingFunction {
+    TimingFunction()
+        : m_type(CubicBezierTimingFunction)
+        , m_x1(0.25)
+        , m_y1(0.1)
+        , m_x2(0.25)
+        , m_y2(1.0)
+    {
+    }
+
+    TimingFunction(ETimingFunctionType timingFunction, double x1 = 0.0, double y1 = 0.0, double x2 = 1.0, double y2 = 1.0)
+        : m_type(timingFunction)
+        , m_x1(x1)
+        , m_y1(y1)
+        , m_x2(x2)
+        , m_y2(y2)
+    {
+    }
+
+    bool operator==(const TimingFunction& o) const
+    {
+        return m_type == o.m_type && m_x1 == o.m_x1 && m_y1 == o.m_y1 && m_x2 == o.m_x2 && m_y2 == o.m_y2;
+    }
+
+    double x1() const { return m_x1; }
+    double y1() const { return m_y1; }
+    double x2() const { return m_x2; }
+    double y2() const { return m_y2; }
+
+    ETimingFunctionType type() const { return m_type; }
+
+private:
+    ETimingFunctionType m_type;
+
+    double m_x1;
+    double m_y1;
+    double m_x2;
+    double m_y2;
+};
+
+} // namespace WebCore
+
+#endif // TimingFunction_h
@@ -203,3 +203,208 @@ void AffineTransform::blend(const AffineTransform& from, double progress)
 }
 
 }
+/*
+ * Copyright (C) 2005, 2006 Apple Computer, Inc.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#include "config.h"
+#include "AffineTransform.h"
+
+#include "FloatRect.h"
+#include "FloatQuad.h"
+#include "IntRect.h"
+
+#include <wtf/MathExtras.h>
+
+namespace WebCore {
+
+static void affineTransformDecompose(const AffineTransform& matrix, double sr[9])
+{
+    AffineTransform m(matrix);
+
+    // Compute scaling factors
+    double sx = sqrt(m.a() * m.a() + m.b() * m.b());
+    double sy = sqrt(m.c() * m.c() + m.d() * m.d());
+
+    /* Compute cross product of transformed unit vectors. If negative,
+        one axis was flipped. */
+
+    if (m.a() * m.d() - m.c() * m.b() < 0.0) {
+        // Flip axis with minimum unit vector dot product
+
+        if (m.a() < m.d())
+            sx = -sx;
+        else
+            sy = -sy;
+    }
+
+    // Remove scale from matrix
+
+    m.scale(1.0 / sx, 1.0 / sy);
+
+    // Compute rotation
+
+    double angle = atan2(m.b(), m.a());
+
+    // Remove rotation from matrix
+
+    m.rotate(rad2deg(-angle));
+
+    // Return results
+
+    sr[0] = sx; sr[1] = sy; sr[2] = angle;
+    sr[3] = m.a(); sr[4] = m.b();
+    sr[5] = m.c(); sr[6] = m.d();
+    sr[7] = m.e(); sr[8] = m.f();
+}
+
+static void affineTransformCompose(AffineTransform& m, const double sr[9])
+{
+    m.setA(sr[3]);
+    m.setB(sr[4]);
+    m.setC(sr[5]);
+    m.setD(sr[6]);
+    m.setE(sr[7]);
+    m.setF(sr[8]);
+    m.rotate(rad2deg(sr[2]));
+    m.scale(sr[0], sr[1]);
+}
+
+bool AffineTransform::isInvertible() const
+{
+    return det() != 0.0;
+}
+
+AffineTransform& AffineTransform::multiply(const AffineTransform& other)
+{
+    return (*this) *= other;
+}
+
+AffineTransform& AffineTransform::scale(double s)
+{
+    return scale(s, s);
+}
+
+AffineTransform& AffineTransform::scaleNonUniform(double sx, double sy)
+{
+    return scale(sx, sy);
+}
+
+AffineTransform& AffineTransform::rotateFromVector(double x, double y)
+{
+    return rotate(rad2deg(atan2(y, x)));
+}
+
+AffineTransform& AffineTransform::flipX()
+{
+    return scale(-1.0f, 1.0f);
+}
+
+AffineTransform& AffineTransform::flipY()
+{
+    return scale(1.0f, -1.0f);
+}
+
+AffineTransform& AffineTransform::skew(double angleX, double angleY)
+{
+    return shear(tan(deg2rad(angleX)), tan(deg2rad(angleY)));
+}
+
+AffineTransform& AffineTransform::skewX(double angle)
+{
+    return shear(tan(deg2rad(angle)), 0.0f);
+}
+
+AffineTransform& AffineTransform::skewY(double angle)
+{
+    return shear(0.0f, tan(deg2rad(angle)));
+}
+
+AffineTransform makeMapBetweenRects(const FloatRect& source, const FloatRect& dest)
+{
+    AffineTransform transform;
+    transform.translate(dest.x() - source.x(), dest.y() - source.y());
+    transform.scale(dest.width() / source.width(), dest.height() / source.height());
+    return transform;
+}
+
+IntPoint AffineTransform::mapPoint(const IntPoint& point) const
+{
+    double x2, y2;
+    map(point.x(), point.y(), &x2, &y2);
+    
+    // Round the point.
+    return IntPoint(lround(x2), lround(y2));
+}
+
+FloatPoint AffineTransform::mapPoint(const FloatPoint& point) const
+{
+    double x2, y2;
+    map(point.x(), point.y(), &x2, &y2);
+
+    return FloatPoint(static_cast<float>(x2), static_cast<float>(y2));
+}
+
+FloatQuad AffineTransform::mapQuad(const FloatQuad& quad) const
+{
+    // FIXME: avoid 4 seperate library calls. Point mapping really needs
+    // to be platform-independent code.
+    return FloatQuad(mapPoint(quad.p1()),
+                     mapPoint(quad.p2()),
+                     mapPoint(quad.p3()),
+                     mapPoint(quad.p4()));
+}
+
+void AffineTransform::blend(const AffineTransform& from, double progress)
+{
+    double srA[9], srB[9];
+
+    affineTransformDecompose(from, srA);
+    affineTransformDecompose(*this, srB);
+
+    // If x-axis of one is flipped, and y-axis of the other, convert to an unflipped rotation.
+    if ((srA[0] < 0.0 && srB[1] < 0.0) || (srA[1] < 0.0 &&  srB[0] < 0.0)) {
+        srA[0] = -srA[0];
+        srA[1] = -srA[1];
+        srA[2] += srA[2] < 0 ? piDouble : -piDouble;
+    }
+
+    // Don't rotate the long way around.
+    srA[2] = fmod(srA[2], 2.0 * piDouble);
+    srB[2] = fmod(srB[2], 2.0 * piDouble);
+
+    if (fabs(srA[2] - srB[2]) > piDouble) {
+        if (srA[2] > srB[2])
+            srA[2] -= piDouble * 2.0;
+        else
+            srB[2] -= piDouble * 2.0;
+    }
+
+    for (int i = 0; i < 9; i++)
+        srA[i] = srA[i] + progress * (srB[i] - srA[i]);
+
+    affineTransformCompose(*this, srA);
+}
+
+}
@@ -138,3 +138,143 @@ AffineTransform makeMapBetweenRects(const FloatRect& source, const FloatRect& de
 } // namespace WebCore
 
 #endif // AffineTransform_h
+/*
+ * Copyright (C) 2005, 2006 Apple Computer, Inc.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#ifndef AffineTransform_h
+#define AffineTransform_h
+
+#if PLATFORM(CG)
+#include <CoreGraphics/CGAffineTransform.h>
+typedef CGAffineTransform PlatformAffineTransform;
+#elif PLATFORM(QT)
+#include <QMatrix>
+typedef QMatrix PlatformAffineTransform;
+#elif PLATFORM(CAIRO)
+#include <cairo.h>
+typedef cairo_matrix_t PlatformAffineTransform;
+#elif PLATFORM(SKIA)
+#include "SkMatrix.h"
+typedef SkMatrix PlatformAffineTransform;
+#elif PLATFORM(WX) && USE(WXGC)
+#include <wx/defs.h>
+#include <wx/graphics.h>
+typedef wxGraphicsMatrix PlatformAffineTransform;
+#endif
+
+namespace WebCore {
+
+class IntPoint;
+class IntRect;
+class FloatPoint;
+class FloatRect;
+class FloatQuad;
+
+class AffineTransform {
+public:
+    AffineTransform();
+    AffineTransform(double a, double b, double c, double d, double e, double f);
+#if !PLATFORM(WX) || USE(WXGC)
+    AffineTransform(const PlatformAffineTransform&);
+#endif
+
+    void setMatrix(double a, double b, double c, double d, double e, double f);
+    void map(double x, double y, double *x2, double *y2) const;
+
+    // Rounds the mapped point to the nearest integer value.
+    IntPoint mapPoint(const IntPoint&) const;
+
+    FloatPoint mapPoint(const FloatPoint&) const;
+
+    // Rounds the resulting mapped rectangle out. This is helpful for bounding
+    // box computations but may not be what is wanted in other contexts.
+    IntRect mapRect(const IntRect&) const;
+
+    FloatRect mapRect(const FloatRect&) const;
+
+    FloatQuad mapQuad(const FloatQuad&) const;
+
+    bool isIdentity() const;
+
+    double a() const;
+    void setA(double a);
+
+    double b() const;
+    void setB(double b);
+
+    double c() const;
+    void setC(double c);
+
+    double d() const;
+    void setD(double d);
+
+    double e() const;
+    void setE(double e);
+
+    double f() const;
+    void setF(double f);
+
+    void reset();
+
+    AffineTransform& multiply(const AffineTransform&);
+    AffineTransform& scale(double); 
+    AffineTransform& scale(double sx, double sy); 
+    AffineTransform& scaleNonUniform(double sx, double sy);
+    AffineTransform& rotate(double d);
+    AffineTransform& rotateFromVector(double x, double y);
+    AffineTransform& translate(double tx, double ty);
+    AffineTransform& shear(double sx, double sy);
+    AffineTransform& flipX();
+    AffineTransform& flipY();
+    AffineTransform& skew(double angleX, double angleY);
+    AffineTransform& skewX(double angle);
+    AffineTransform& skewY(double angle);
+    double det() const;
+    bool isInvertible() const;
+    AffineTransform inverse() const;
+
+    void blend(const AffineTransform& from, double progress);
+
+#if !PLATFORM(WX) || USE(WXGC)
+    operator PlatformAffineTransform() const;
+#endif
+
+    bool operator==(const AffineTransform&) const;
+    bool operator!=(const AffineTransform& other) const { return !(*this == other); }
+    AffineTransform& operator*=(const AffineTransform&);
+    AffineTransform operator*(const AffineTransform&);
+    
+private:
+#if !PLATFORM(WX) || USE(WXGC)
+    PlatformAffineTransform m_transform;
+#endif
+};
+
+AffineTransform makeMapBetweenRects(const FloatRect& source, const FloatRect& dest);
+
+} // namespace WebCore
+
+#endif // AffineTransform_h
@@ -65,3 +65,70 @@ private:
 } // namespace WebCore
 
 #endif // IdentityTransformOperation_h
+/*
+ * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
+ *           (C) 2000 Antti Koivisto (koivisto@kde.org)
+ *           (C) 2000 Dirk Mueller (mueller@kde.org)
+ * Copyright (C) 2003, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef IdentityTransformOperation_h
+#define IdentityTransformOperation_h
+
+#include "TransformOperation.h"
+
+namespace WebCore {
+
+class IdentityTransformOperation : public TransformOperation {
+public:
+    static PassRefPtr<IdentityTransformOperation> create()
+    {
+        return adoptRef(new IdentityTransformOperation());
+    }
+        
+    virtual bool isIdentity() const { return true; }
+    virtual OperationType getOperationType() const { return IDENTITY; }
+    virtual bool isSameType(const TransformOperation& o) const { return o.getOperationType() == IDENTITY; }
+
+    virtual bool operator==(const TransformOperation& o) const
+    {
+        return isSameType(o);
+    }
+
+    virtual bool apply(AffineTransform& transform, const IntSize& borderBoxSize) const
+    {
+        return false;
+    }
+
+    virtual PassRefPtr<TransformOperation> blend(const TransformOperation* from, double progress, bool blendToIdentity = false)
+    {
+        return this;
+    }
+
+private:
+    IdentityTransformOperation()
+    {
+    }
+
+};
+
+} // namespace WebCore
+
+#endif // IdentityTransformOperation_h
@@ -48,3 +48,53 @@ PassRefPtr<TransformOperation> MatrixTransformOperation::blend(const TransformOp
 }
 
 } // namespace WebCore
+/*
+ * Copyright (C) 1999 Antti Koivisto (koivisto@kde.org)
+ * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "config.h"
+#include "MatrixTransformOperation.h"
+
+#include <algorithm>
+
+namespace WebCore {
+
+PassRefPtr<TransformOperation> MatrixTransformOperation::blend(const TransformOperation* from, double progress, bool blendToIdentity)
+{
+    if (from && !from->isSameType(*this))
+        return this;
+
+    // convert the TransformOperations into matrices
+    IntSize size;
+    AffineTransform fromT;
+    AffineTransform toT(m_a, m_b, m_c, m_d, m_e, m_f);
+    if (from) {
+        const MatrixTransformOperation* m = static_cast<const MatrixTransformOperation*>(from);
+        fromT.setMatrix(m->m_a, m->m_b, m->m_c, m->m_d, m->m_e, m->m_f);
+    }
+    
+    if (blendToIdentity)
+        std::swap(fromT, toT);
+
+    toT.blend(fromT, progress);
+    return MatrixTransformOperation::create(toT.a(), toT.b(), toT.c(), toT.d(), toT.e(), toT.f());
+}
+
+} // namespace WebCore
@@ -80,3 +80,85 @@ private:
 } // namespace WebCore
 
 #endif // MatrixTransformOperation_h
+/*
+ * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
+ *           (C) 2000 Antti Koivisto (koivisto@kde.org)
+ *           (C) 2000 Dirk Mueller (mueller@kde.org)
+ * Copyright (C) 2003, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef MatrixTransformOperation_h
+#define MatrixTransformOperation_h
+
+#include "TransformOperation.h"
+
+namespace WebCore {
+
+class MatrixTransformOperation : public TransformOperation {
+public:
+    static PassRefPtr<MatrixTransformOperation> create(double a, double b, double c, double d, double e, double f)
+    {
+        return adoptRef(new MatrixTransformOperation(a, b, c, d, e, f));
+    }
+
+    virtual bool isIdentity() const { return m_a == 1 && m_b == 0 && m_c == 0 && m_d == 1 && m_e == 0 && m_f == 0; }
+    virtual OperationType getOperationType() const { return MATRIX; }
+    virtual bool isSameType(const TransformOperation& o) const { return o.getOperationType() == MATRIX; }
+
+    virtual bool operator==(const TransformOperation& o) const
+    {
+        if (!isSameType(o))
+            return false;
+
+        const MatrixTransformOperation* m = static_cast<const MatrixTransformOperation*>(&o);
+        return m_a == m->m_a && m_b == m->m_b && m_c == m->m_c && m_d == m->m_d && m_e == m->m_e && m_f == m->m_f;
+    }
+
+    virtual bool apply(AffineTransform& transform, const IntSize& borderBoxSize) const
+    {
+        AffineTransform matrix(m_a, m_b, m_c, m_d, m_e, m_f);
+        transform = matrix * transform;
+        return false;
+    }
+
+    virtual PassRefPtr<TransformOperation> blend(const TransformOperation* from, double progress, bool blendToIdentity = false);
+    
+private:
+    MatrixTransformOperation(double a, double b, double c, double d, double e, double f)
+        : m_a(a)
+        , m_b(b)
+        , m_c(c)
+        , m_d(d)
+        , m_e(e)
+        , m_f(f)
+    {
+    }
+    
+    double m_a;
+    double m_b;
+    double m_c;
+    double m_d;
+    double m_e;
+    double m_f;
+};
+
+} // namespace WebCore
+
+#endif // MatrixTransformOperation_h
@@ -38,3 +38,43 @@ PassRefPtr<TransformOperation> RotateTransformOperation::blend(const TransformOp
 }
 
 } // namespace WebCore
+/*
+ * Copyright (C) 1999 Antti Koivisto (koivisto@kde.org)
+ * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "config.h"
+#include "RotateTransformOperation.h"
+
+namespace WebCore {
+
+PassRefPtr<TransformOperation> RotateTransformOperation::blend(const TransformOperation* from, double progress, bool blendToIdentity)
+{
+    if (from && !from->isSameType(*this))
+        return this;
+    
+    if (blendToIdentity)
+        return RotateTransformOperation::create(m_angle - m_angle * progress, m_type);
+    
+    const RotateTransformOperation* fromOp = static_cast<const RotateTransformOperation*>(from);
+    double fromAngle = fromOp ? fromOp->m_angle : 0;
+    return RotateTransformOperation::create(fromAngle + (m_angle - fromAngle) * progress, m_type);
+}
+
+} // namespace WebCore
@@ -72,3 +72,77 @@ private:
 } // namespace WebCore
 
 #endif // RotateTransformOperation_h
+/*
+ * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
+ *           (C) 2000 Antti Koivisto (koivisto@kde.org)
+ *           (C) 2000 Dirk Mueller (mueller@kde.org)
+ * Copyright (C) 2003, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef RotateTransformOperation_h
+#define RotateTransformOperation_h
+
+#include "TransformOperation.h"
+
+namespace WebCore {
+
+class RotateTransformOperation : public TransformOperation {
+public:
+    static PassRefPtr<RotateTransformOperation> create(double angle, OperationType type)
+    {
+        return adoptRef(new RotateTransformOperation(angle, type));
+    }
+
+    virtual bool isIdentity() const { return m_angle == 0; }
+    virtual OperationType getOperationType() const { return m_type; }
+    virtual bool isSameType(const TransformOperation& o) const { return o.getOperationType() == m_type; }
+
+    virtual bool operator==(const TransformOperation& o) const
+    {
+        if (!isSameType(o))
+            return false;
+        const RotateTransformOperation* r = static_cast<const RotateTransformOperation*>(&o);
+        return m_angle == r->m_angle;
+    }
+
+    virtual bool apply(AffineTransform& transform, const IntSize& borderBoxSize) const
+    {
+        transform.rotate(m_angle);
+        return false;
+    }
+
+    virtual PassRefPtr<TransformOperation> blend(const TransformOperation* from, double progress, bool blendToIdentity = false);
+
+    double angle() const { return m_angle; }
+
+private:
+    RotateTransformOperation(double angle, OperationType type)
+        : m_angle(angle)
+        , m_type(type)
+    {
+    }
+
+    double m_angle;
+    OperationType m_type;
+};
+
+} // namespace WebCore
+
+#endif // RotateTransformOperation_h
@@ -39,3 +39,44 @@ PassRefPtr<TransformOperation> ScaleTransformOperation::blend(const TransformOpe
 }
 
 } // namespace WebCore
+/*
+ * Copyright (C) 1999 Antti Koivisto (koivisto@kde.org)
+ * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "config.h"
+#include "ScaleTransformOperation.h"
+
+namespace WebCore {
+
+PassRefPtr<TransformOperation> ScaleTransformOperation::blend(const TransformOperation* from, double progress, bool blendToIdentity)
+{
+    if (from && !from->isSameType(*this))
+        return this;
+    
+    if (blendToIdentity)
+        return ScaleTransformOperation::create(m_x + (1. - m_x) * progress, m_y + (1. - m_y) * progress, m_type);
+    
+    const ScaleTransformOperation* fromOp = static_cast<const ScaleTransformOperation*>(from);
+    double fromX = fromOp ? fromOp->m_x : 1.;
+    double fromY = fromOp ? fromOp->m_y : 1.;
+    return ScaleTransformOperation::create(fromX + (m_x - fromX) * progress, fromY + (m_y - fromY) * progress, m_type);
+}
+
+} // namespace WebCore
@@ -72,3 +72,77 @@ private:
 } // namespace WebCore
 
 #endif // ScaleTransformOperation_h
+/*
+ * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
+ *           (C) 2000 Antti Koivisto (koivisto@kde.org)
+ *           (C) 2000 Dirk Mueller (mueller@kde.org)
+ * Copyright (C) 2003, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef ScaleTransformOperation_h
+#define ScaleTransformOperation_h
+
+#include "TransformOperation.h"
+
+namespace WebCore {
+
+class ScaleTransformOperation : public TransformOperation {
+public:
+    static PassRefPtr<ScaleTransformOperation> create(double sx, double sy, OperationType type)
+    {
+        return adoptRef(new ScaleTransformOperation(sx, sy, type));
+    }
+
+    virtual bool isIdentity() const { return m_x == 1 &&  m_y == 1; }
+    virtual OperationType getOperationType() const { return m_type; }
+    virtual bool isSameType(const TransformOperation& o) const { return o.getOperationType() == m_type; }
+
+    virtual bool operator==(const TransformOperation& o) const
+    {
+        if (!isSameType(o))
+            return false;
+        const ScaleTransformOperation* s = static_cast<const ScaleTransformOperation*>(&o);
+        return m_x == s->m_x && m_y == s->m_y;
+    }
+
+    virtual bool apply(AffineTransform& transform, const IntSize& borderBoxSize) const
+    {
+        transform.scale(m_x, m_y);
+        return false;
+    }
+
+    virtual PassRefPtr<TransformOperation> blend(const TransformOperation* from, double progress, bool blendToIdentity = false);
+
+private:
+    ScaleTransformOperation(double sx, double sy, OperationType type)
+        : m_x(sx)
+        , m_y(sy)
+        , m_type(type)
+    {
+    }
+        
+    double m_x;
+    double m_y;
+    OperationType m_type;
+};
+
+} // namespace WebCore
+
+#endif // ScaleTransformOperation_h
@@ -39,3 +39,44 @@ PassRefPtr<TransformOperation> SkewTransformOperation::blend(const TransformOper
 }
 
 } // namespace WebCore
+/*
+ * Copyright (C) 1999 Antti Koivisto (koivisto@kde.org)
+ * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "config.h"
+#include "SkewTransformOperation.h"
+
+namespace WebCore {
+
+PassRefPtr<TransformOperation> SkewTransformOperation::blend(const TransformOperation* from, double progress, bool blendToIdentity)
+{
+    if (from && !from->isSameType(*this))
+        return this;
+    
+    if (blendToIdentity)
+        return SkewTransformOperation::create(m_angleX - m_angleX * progress, m_angleY - m_angleY * progress, m_type);
+    
+    const SkewTransformOperation* fromOp = static_cast<const SkewTransformOperation*>(from);
+    double fromAngleX = fromOp ? fromOp->m_angleX : 0;
+    double fromAngleY = fromOp ? fromOp->m_angleY : 0;
+    return SkewTransformOperation::create(fromAngleX + (m_angleX - fromAngleX) * progress, fromAngleY + (m_angleY - fromAngleY) * progress, m_type);
+}
+
+} // namespace WebCore
@@ -72,3 +72,77 @@ private:
 } // namespace WebCore
 
 #endif // SkewTransformOperation_h
+/*
+ * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
+ *           (C) 2000 Antti Koivisto (koivisto@kde.org)
+ *           (C) 2000 Dirk Mueller (mueller@kde.org)
+ * Copyright (C) 2003, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef SkewTransformOperation_h
+#define SkewTransformOperation_h
+
+#include "TransformOperation.h"
+
+namespace WebCore {
+
+class SkewTransformOperation : public TransformOperation {
+public:
+    static PassRefPtr<SkewTransformOperation> create(double angleX, double angleY, OperationType type)
+    {
+        return adoptRef(new SkewTransformOperation(angleX, angleY, type));
+    }
+
+    virtual bool isIdentity() const { return m_angleX == 0 && m_angleY == 0; }
+    virtual OperationType getOperationType() const { return m_type; }
+    virtual bool isSameType(const TransformOperation& o) const { return o.getOperationType() == m_type; }
+
+    virtual bool operator==(const TransformOperation& o) const
+    {
+        if (!isSameType(o))
+            return false;
+        const SkewTransformOperation* s = static_cast<const SkewTransformOperation*>(&o);
+        return m_angleX == s->m_angleX && m_angleY == s->m_angleY;
+    }
+
+    virtual bool apply(AffineTransform& transform, const IntSize& borderBoxSize) const
+    {
+        transform.skew(m_angleX, m_angleY);
+        return false;
+    }
+
+    virtual PassRefPtr<TransformOperation> blend(const TransformOperation* from, double progress, bool blendToIdentity = false);
+    
+private:
+    SkewTransformOperation(double angleX, double angleY, OperationType type)
+        : m_angleX(angleX)
+        , m_angleY(angleY)
+        , m_type(type)
+    {
+    }
+    
+    double m_angleX;
+    double m_angleY;
+    OperationType m_type;
+};
+
+} // namespace WebCore
+
+#endif // SkewTransformOperation_h
@@ -62,3 +62,67 @@ public:
 } // namespace WebCore
 
 #endif // TransformOperation_h
+/*
+ * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
+ *           (C) 2000 Antti Koivisto (koivisto@kde.org)
+ *           (C) 2000 Dirk Mueller (mueller@kde.org)
+ * Copyright (C) 2003, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef TransformOperation_h
+#define TransformOperation_h
+
+#include "AffineTransform.h"
+#include "IntSize.h"
+#include <wtf/PassRefPtr.h>
+#include <wtf/RefCounted.h>
+
+namespace WebCore {
+
+// CSS Transforms (may become part of CSS3)
+
+class TransformOperation : public RefCounted<TransformOperation> {
+public:
+    enum OperationType {
+        SCALE_X, SCALE_Y, SCALE, 
+        TRANSLATE_X, TRANSLATE_Y, TRANSLATE, 
+        ROTATE, 
+        SKEW_X, SKEW_Y, SKEW, 
+        MATRIX, IDENTITY, NONE
+    };
+
+    virtual ~TransformOperation() { }
+
+    virtual bool operator==(const TransformOperation&) const = 0;
+    bool operator!=(const TransformOperation& o) const { return !(*this == o); }
+
+    virtual bool isIdentity() const = 0;
+
+    virtual bool apply(AffineTransform&, const IntSize& borderBoxSize) const = 0;
+
+    virtual PassRefPtr<TransformOperation> blend(const TransformOperation* from, double progress, bool blendToIdentity = false) = 0;
+
+    virtual OperationType getOperationType() const = 0;
+    virtual bool isSameType(const TransformOperation& o) const { return false; }
+};
+
+} // namespace WebCore
+
+#endif // TransformOperation_h
@@ -47,3 +47,52 @@ bool TransformOperations::operator==(const TransformOperations& o) const
 }
 
 } // namespace WebCore
+/*
+ * Copyright (C) 1999 Antti Koivisto (koivisto@kde.org)
+ * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "config.h"
+#include "TransformOperations.h"
+
+#include "IdentityTransformOperation.h"
+
+namespace WebCore {
+
+TransformOperations::TransformOperations(bool makeIdentity)
+{
+    if (makeIdentity)
+        m_operations.append(IdentityTransformOperation::create());
+}
+
+bool TransformOperations::operator==(const TransformOperations& o) const
+{
+    if (m_operations.size() != o.m_operations.size())
+        return false;
+        
+    unsigned s = m_operations.size();
+    for (unsigned i = 0; i < s; i++) {
+        if (*m_operations[i] != *o.m_operations[i])
+            return false;
+    }
+    
+    return true;
+}
+
+} // namespace WebCore
@@ -57,3 +57,62 @@ private:
 } // namespace WebCore
 
 #endif // TransformOperations_h
+/*
+ * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
+ *           (C) 2000 Antti Koivisto (koivisto@kde.org)
+ *           (C) 2000 Dirk Mueller (mueller@kde.org)
+ * Copyright (C) 2003, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef TransformOperations_h
+#define TransformOperations_h
+
+#include "TransformOperation.h"
+#include <wtf/RefPtr.h>
+#include <wtf/Vector.h>
+
+namespace WebCore {
+
+class TransformOperations {
+public:
+    TransformOperations(bool makeIdentity = false);
+    
+    bool operator==(const TransformOperations& o) const;
+    bool operator!=(const TransformOperations& o) const
+    {
+        return !(*this == o);
+    }
+    
+    void apply(const IntSize& sz, AffineTransform& t) const
+    {
+        for (unsigned i = 0; i < m_operations.size(); ++i)
+            m_operations[i]->apply(t, sz);
+    }
+    
+    Vector<RefPtr<TransformOperation> >& operations() { return m_operations; }
+    const Vector<RefPtr<TransformOperation> >& operations() const { return m_operations; }
+
+private:
+    Vector<RefPtr<TransformOperation> > m_operations;
+};
+
+} // namespace WebCore
+
+#endif // TransformOperations_h
@@ -39,3 +39,44 @@ PassRefPtr<TransformOperation> TranslateTransformOperation::blend(const Transfor
 }
 
 } // namespace WebCore
+/*
+ * Copyright (C) 1999 Antti Koivisto (koivisto@kde.org)
+ * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "config.h"
+#include "TranslateTransformOperation.h"
+
+namespace WebCore {
+
+PassRefPtr<TransformOperation> TranslateTransformOperation::blend(const TransformOperation* from, double progress, bool blendToIdentity)
+{
+    if (from && !from->isSameType(*this))
+        return this;
+    
+    if (blendToIdentity)
+        return TranslateTransformOperation::create(Length(m_x.type()).blend(m_x, progress), Length(m_y.type()).blend(m_y, progress), m_type);
+
+    const TranslateTransformOperation* fromOp = static_cast<const TranslateTransformOperation*>(from);
+    Length fromX = fromOp ? fromOp->m_x : Length(m_x.type());
+    Length fromY = fromOp ? fromOp->m_y : Length(m_y.type());
+    return TranslateTransformOperation::create(m_x.blend(fromX, progress), m_y.blend(fromY, progress), m_type);
+}
+
+} // namespace WebCore
@@ -73,3 +73,78 @@ private:
 } // namespace WebCore
 
 #endif // TranslateTransformOperation_h
+/*
+ * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
+ *           (C) 2000 Antti Koivisto (koivisto@kde.org)
+ *           (C) 2000 Dirk Mueller (mueller@kde.org)
+ * Copyright (C) 2003, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
+ * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com)
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef TranslateTransformOperation_h
+#define TranslateTransformOperation_h
+
+#include "Length.h"
+#include "TransformOperation.h"
+
+namespace WebCore {
+
+class TranslateTransformOperation : public TransformOperation {
+public:
+    static PassRefPtr<TranslateTransformOperation> create(const Length& tx, const Length& ty, OperationType type)
+    {
+        return adoptRef(new TranslateTransformOperation(tx, ty, type));
+    }
+
+    virtual bool isIdentity() const { return m_x.calcFloatValue(1) == 0 && m_y.calcFloatValue(1) == 0; }
+    virtual OperationType getOperationType() const { return m_type; }
+    virtual bool isSameType(const TransformOperation& o) const { return o.getOperationType() == m_type; }
+
+    virtual bool operator==(const TransformOperation& o) const
+    {
+        if (!isSameType(o))
+            return false;
+        const TranslateTransformOperation* t = static_cast<const TranslateTransformOperation*>(&o);
+        return m_x == t->m_x && m_y == t->m_y;
+    }
+
+    virtual bool apply(AffineTransform& transform, const IntSize& borderBoxSize) const
+    {
+        transform.translate(m_x.calcFloatValue(borderBoxSize.width()), m_y.calcFloatValue(borderBoxSize.height()));
+        return m_x.type() == Percent || m_y.type() == Percent;
+    }
+
+    virtual PassRefPtr<TransformOperation> blend(const TransformOperation* from, double progress, bool blendToIdentity = false);
+
+private:
+    TranslateTransformOperation(const Length& tx, const Length& ty, OperationType type)
+        : m_x(tx)
+        , m_y(ty)
+        , m_type(type)
+    {
+    }
+
+    Length m_x;
+    Length m_y;
+    OperationType m_type;
+};
+
+} // namespace WebCore
+
+#endif // TranslateTransformOperation_h