JSValue* JSCanvasRenderingContext2D::createPattern(ExecState* exec, const ArgList& args) { CanvasRenderingContext2D* context = impl(); JSValue* value = args[0]; if (!value->isObject()) return throwError(exec, TypeError); JSObject* o = static_cast<JSObject*>(value); if (o->inherits(&JSHTMLImageElement::s_info)) { ExceptionCode ec; JSValue* pattern = toJS(exec, context->createPattern(static_cast<HTMLImageElement*>(static_cast<JSHTMLElement*>(args[0])->impl()), valueToStringWithNullCheck(exec, args[1]), ec).get()); setDOMException(exec, ec); return pattern; } if (o->inherits(&JSHTMLCanvasElement::s_info)) { ExceptionCode ec; JSValue* pattern = toJS(exec, context->createPattern(static_cast<HTMLCanvasElement*>(static_cast<JSHTMLElement*>(args[0])->impl()), valueToStringWithNullCheck(exec, args[1]), ec).get()); setDOMException(exec, ec); return pattern; } setDOMException(exec, TYPE_MISMATCH_ERR); return 0; }
v8::Handle<v8::Value> V8CanvasRenderingContext2D::createPatternCallback(const v8::Arguments& args) { INC_STATS("DOM.CanvasRenderingContext2D.createPattern()"); CanvasRenderingContext2D* context = V8CanvasRenderingContext2D::toNative(args.Holder()); v8::Handle<v8::Value> arg = args[0]; if (V8HTMLImageElement::HasInstance(arg)) { HTMLImageElement* imageElement = V8HTMLImageElement::toNative(v8::Handle<v8::Object>::Cast(arg)); ExceptionCode ec = 0; RefPtr<CanvasPattern> pattern = context->createPattern(imageElement, toWebCoreStringWithNullCheck(args[1]), ec); if (ec != 0) { V8Proxy::setDOMException(ec); return notHandledByInterceptor(); } return toV8(pattern.release()); } if (V8HTMLCanvasElement::HasInstance(arg)) { HTMLCanvasElement* canvasElement = V8HTMLCanvasElement::toNative(v8::Handle<v8::Object>::Cast(arg)); ExceptionCode ec = 0; RefPtr<CanvasPattern> pattern = context->createPattern(canvasElement, toWebCoreStringWithNullCheck(args[1]), ec); if (ec != 0) { V8Proxy::setDOMException(ec); return notHandledByInterceptor(); } return toV8(pattern.release()); } V8Proxy::setDOMException(TYPE_MISMATCH_ERR); return notHandledByInterceptor(); }