Example #1
0
static v8::Handle<v8::Value> matrixTransformCallback(const v8::Arguments& args)
{
    INC_STATS("DOM.SVGPoint.matrixTransform");
    V8SVGPODTypeWrapper<FloatPoint>* impWrapper = V8SVGPODTypeWrapper<FloatPoint>::toNative(args.Holder());
    FloatPoint impInstance = *impWrapper;
    FloatPoint* imp = &impInstance;
    ExceptionCode ec = 0;
    {
    bool matrixOk;
    AffineTransform matrix = V8SVGPODTypeUtil::toSVGPODType<AffineTransform>(&V8SVGMatrix::info, args[0], matrixOk);
    if (UNLIKELY(!matrixOk)) {
        ec = TYPE_MISMATCH_ERR;
        goto fail;
    }
    FloatPoint result = imp->matrixTransform(matrix);
    RefPtr<V8SVGPODTypeWrapper<FloatPoint> > wrapper = V8SVGStaticPODTypeWrapper<FloatPoint>::create(result);
    SVGElement* context = V8Proxy::svgContext(impWrapper);
    V8Proxy::setSVGContext(wrapper.get(), context);
    impWrapper->commitChange(impInstance, context);
    return toV8(wrapper.release());
    }
    fail:
    V8Proxy::setDOMException(ec);
    return v8::Handle<v8::Value>();
}