SVGMatrix *SVGSVGElement::getScreenCTM() const { SVGMatrix *mat = SVGStyledLocatableElement::getScreenCTM(); if(mat) { mat->translate(x()->baseVal()->value(), y()->baseVal()->value()); if(attributes()->getNamedItem(SVGNames::viewBoxAttr)) { RefPtr<SVGMatrix> viewBox = viewBoxToViewTransform(width()->baseVal()->value(), height()->baseVal()->value()); mat->multiply(viewBox.get()); } } return mat; }
static v8::Handle<v8::Value> translateCallback(const v8::Arguments& args) { INC_STATS("DOM.SVGMatrix.translate"); if (args.Length() < 2) return throwError("Not enough arguments", V8Proxy::TypeError); RefPtr<SVGPropertyTearOff<SVGMatrix> > wrapper = V8SVGMatrix::toNative(args.Holder()); if (wrapper->role() == AnimValRole) { V8Proxy::setDOMException(NO_MODIFICATION_ALLOWED_ERR); return v8::Handle<v8::Value>(); } SVGMatrix& impInstance = wrapper->propertyReference(); SVGMatrix* imp = &impInstance; EXCEPTION_BLOCK(float, x, static_cast<float>(MAYBE_MISSING_PARAMETER(args, 0, MissingIsUndefined)->NumberValue())); EXCEPTION_BLOCK(float, y, static_cast<float>(MAYBE_MISSING_PARAMETER(args, 1, MissingIsUndefined)->NumberValue())); return toV8(WTF::getPtr(SVGPropertyTearOff<SVGMatrix>::create(imp->translate(x, y)))); }