2010-11-11 Alejandro G. Castro <alex@igalia.com>
[WebKit-https.git] / WebCore / bindings / js / JSSVGMatrixCustom.cpp
index 3023f95..56f735e 100644 (file)
@@ -1,5 +1,6 @@
 /*
- * Copyright (C) 2006 Nikolas Zimmermann <zimmermann@kde.org>
+ * Copyright (C) 2006, 2007, 2008 Nikolas Zimmermann <zimmermann@kde.org>
+ * Copyright (C) 2009 Jeff Schiller <codedread@gmail.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
 #include "config.h"
 
 #if ENABLE(SVG)
-
 #include "JSSVGMatrix.h"
 
 #include "AffineTransform.h"
 #include "SVGException.h"
+#include <runtime/Error.h>
 
-using namespace KJS;
+using namespace JSC;
 
 namespace WebCore {
 
-JSValue* JSSVGMatrix::inverse(ExecState* exec, const List&)
+JSValue JSSVGMatrix::multiply(ExecState* exec)
 {
-    const AffineTransform& imp(*impl());
-    KJS::JSValue* result = toJS(exec, new JSSVGPODTypeWrapper<AffineTransform>(imp.inverse()));
+    if (exec->argumentCount() < 1)
+        return throwError(exec, createSyntaxError(exec, "Not enough arguments"));
+
+    if (!exec->argument(0).inherits(&JSSVGMatrix::s_info))
+        return throwError(exec, createTypeError(exec, "secondMatrix argument was not a SVGMatrix"));
+
+    JSSVGMatrix* matrixObj = static_cast<JSSVGMatrix*>(asObject(exec->argument(0)));
+
+    AffineTransform m1(*impl());
+    AffineTransform m2(*(matrixObj->impl()));
+
+    SVGElement* context = JSSVGContextCache::svgContextForDOMObject(this);
+    return toJS(exec, globalObject(), JSSVGStaticPODTypeWrapper<AffineTransform>::create(m1.multLeft(m2)).get(), context);
+}
+
+JSValue JSSVGMatrix::inverse(ExecState* exec)
+{
+    AffineTransform imp(*impl());
+
+    SVGElement* context = JSSVGContextCache::svgContextForDOMObject(this);
+    JSValue result = toJS(exec, globalObject(), JSSVGStaticPODTypeWrapper<AffineTransform>::create(imp.inverse()).get(), context);
 
     if (!imp.isInvertible())
-        setDOMException(exec, SVG_MATRIX_NOT_INVERTABLE);
+        setDOMException(exec, SVGException::SVG_MATRIX_NOT_INVERTABLE);
 
     return result;
 }
 
-JSValue* JSSVGMatrix::rotateFromVector(ExecState* exec, const List& args)
+JSValue JSSVGMatrix::rotateFromVector(ExecState* exec)
 {
-    AffineTransform& imp(*impl());
+    AffineTransform imp(*impl());
  
-    float x = args[0]->toFloat(exec);
-    float y = args[1]->toFloat(exec);
+    float x = exec->argument(0).toFloat(exec);
+    float y = exec->argument(1).toFloat(exec);
 
-    KJS::JSValue* result = toJS(exec, new JSSVGPODTypeWrapper<AffineTransform>(imp.rotateFromVector(x, y)));
+    SVGElement* context = JSSVGContextCache::svgContextForDOMObject(this);
+    JSValue result = toJS(exec, globalObject(), JSSVGStaticPODTypeWrapper<AffineTransform>::create(imp.rotateFromVector(x, y)).get(), context);
 
     if (x == 0.0 || y == 0.0)
-        setDOMException(exec, SVG_INVALID_VALUE_ERR);
+        setDOMException(exec, SVGException::SVG_INVALID_VALUE_ERR);
 
     return result;
 }
-    
+
 }
 
 #endif // ENABLE(SVG)
-
-// vim:ts=4:noet