⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jscanvasrenderingcontext2dcustom.cpp

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 CPP
📖 第 1 页 / 共 2 页
字号:
                break;            case 5:                context->drawImage(imgElt, args.at(exec, 1).toFloat(exec), args.at(exec, 2).toFloat(exec),                                   args.at(exec, 3).toFloat(exec), args.at(exec, 4).toFloat(exec), ec);                setDOMException(exec, ec);                break;            case 9:                context->drawImage(imgElt, FloatRect(args.at(exec, 1).toFloat(exec), args.at(exec, 2).toFloat(exec),                                   args.at(exec, 3).toFloat(exec), args.at(exec, 4).toFloat(exec)),                                   FloatRect(args.at(exec, 5).toFloat(exec), args.at(exec, 6).toFloat(exec),                                   args.at(exec, 7).toFloat(exec), args.at(exec, 8).toFloat(exec)), ec);                setDOMException(exec, ec);                break;            default:                return throwError(exec, SyntaxError);        }    } else if (o->inherits(&JSHTMLCanvasElement::s_info)) {        HTMLCanvasElement* canvas = static_cast<HTMLCanvasElement*>(static_cast<JSHTMLElement*>(o)->impl());        switch (args.size()) {            case 3:                context->drawImage(canvas, args.at(exec, 1).toFloat(exec), args.at(exec, 2).toFloat(exec));                break;            case 5:                context->drawImage(canvas, args.at(exec, 1).toFloat(exec), args.at(exec, 2).toFloat(exec),                                   args.at(exec, 3).toFloat(exec), args.at(exec, 4).toFloat(exec), ec);                setDOMException(exec, ec);                break;            case 9:                context->drawImage(canvas, FloatRect(args.at(exec, 1).toFloat(exec), args.at(exec, 2).toFloat(exec),                                   args.at(exec, 3).toFloat(exec), args.at(exec, 4).toFloat(exec)),                                   FloatRect(args.at(exec, 5).toFloat(exec), args.at(exec, 6).toFloat(exec),                                   args.at(exec, 7).toFloat(exec), args.at(exec, 8).toFloat(exec)), ec);                setDOMException(exec, ec);                break;            default:                return throwError(exec, SyntaxError);        }    } else {        setDOMException(exec, TYPE_MISMATCH_ERR);    }        return jsUndefined();    }JSValuePtr JSCanvasRenderingContext2D::drawImageFromRect(ExecState* exec, const ArgList& args){     CanvasRenderingContext2D* context = impl();        JSValuePtr value = args.at(exec, 0);    if (!value.isObject())        return throwError(exec, TypeError);    JSObject* o = asObject(value);        if (!o->inherits(&JSHTMLImageElement::s_info))        return throwError(exec, TypeError);    context->drawImageFromRect(static_cast<HTMLImageElement*>(static_cast<JSHTMLElement*>(o)->impl()),                               args.at(exec, 1).toFloat(exec), args.at(exec, 2).toFloat(exec),                               args.at(exec, 3).toFloat(exec), args.at(exec, 4).toFloat(exec),                               args.at(exec, 5).toFloat(exec), args.at(exec, 6).toFloat(exec),                               args.at(exec, 7).toFloat(exec), args.at(exec, 8).toFloat(exec),                               args.at(exec, 9).toString(exec));        return jsUndefined();    }JSValuePtr JSCanvasRenderingContext2D::setShadow(ExecState* exec, const ArgList& args){     CanvasRenderingContext2D* context = impl();    switch (args.size()) {        case 3:            context->setShadow(args.at(exec, 0).toFloat(exec), args.at(exec, 1).toFloat(exec),                               args.at(exec, 2).toFloat(exec));            break;        case 4:            if (args.at(exec, 3).isString())                context->setShadow(args.at(exec, 0).toFloat(exec), args.at(exec, 1).toFloat(exec),                                   args.at(exec, 2).toFloat(exec), asString(args.at(exec, 3))->value());            else                context->setShadow(args.at(exec, 0).toFloat(exec), args.at(exec, 1).toFloat(exec),                                   args.at(exec, 2).toFloat(exec), args.at(exec, 3).toFloat(exec));            break;        case 5:            if (args.at(exec, 3).isString())                context->setShadow(args.at(exec, 0).toFloat(exec), args.at(exec, 1).toFloat(exec),                                   args.at(exec, 2).toFloat(exec), asString(args.at(exec, 3))->value(),                                   args.at(exec, 4).toFloat(exec));            else                context->setShadow(args.at(exec, 0).toFloat(exec), args.at(exec, 1).toFloat(exec),                                   args.at(exec, 2).toFloat(exec), args.at(exec, 3).toFloat(exec),                                   args.at(exec, 4).toFloat(exec));            break;        case 7:            context->setShadow(args.at(exec, 0).toFloat(exec), args.at(exec, 1).toFloat(exec),                               args.at(exec, 2).toFloat(exec), args.at(exec, 3).toFloat(exec),                               args.at(exec, 4).toFloat(exec), args.at(exec, 5).toFloat(exec),                               args.at(exec, 6).toFloat(exec));            break;        case 8:            context->setShadow(args.at(exec, 0).toFloat(exec), args.at(exec, 1).toFloat(exec),                               args.at(exec, 2).toFloat(exec), args.at(exec, 3).toFloat(exec),                               args.at(exec, 4).toFloat(exec), args.at(exec, 5).toFloat(exec),                               args.at(exec, 6).toFloat(exec), args.at(exec, 7).toFloat(exec));            break;        default:            return throwError(exec, SyntaxError);    }        return jsUndefined();    }JSValuePtr JSCanvasRenderingContext2D::createPattern(ExecState* exec, const ArgList& args){     CanvasRenderingContext2D* context = impl();    JSValuePtr value = args.at(exec, 0);    if (!value.isObject())        return throwError(exec, TypeError);    JSObject* o = asObject(value);    if (o->inherits(&JSHTMLImageElement::s_info)) {        ExceptionCode ec;        JSValuePtr pattern = toJS(exec,            context->createPattern(static_cast<HTMLImageElement*>(static_cast<JSHTMLElement*>(o)->impl()),                                   valueToStringWithNullCheck(exec, args.at(exec, 1)), ec).get());        setDOMException(exec, ec);        return pattern;    }    if (o->inherits(&JSHTMLCanvasElement::s_info)) {        ExceptionCode ec;        JSValuePtr pattern = toJS(exec,            context->createPattern(static_cast<HTMLCanvasElement*>(static_cast<JSHTMLElement*>(o)->impl()),                valueToStringWithNullCheck(exec, args.at(exec, 1)), ec).get());        setDOMException(exec, ec);        return pattern;    }    setDOMException(exec, TYPE_MISMATCH_ERR);    return jsUndefined();}JSValuePtr JSCanvasRenderingContext2D::putImageData(ExecState* exec, const ArgList& args){    // putImageData has two variants    // putImageData(ImageData, x, y)    // putImageData(ImageData, x, y, dirtyX, dirtyY, dirtyWidth, dirtyHeight)    CanvasRenderingContext2D* context = impl();    ExceptionCode ec = 0;    if (args.size() >= 7)        context->putImageData(toImageData(args.at(exec, 0)), args.at(exec, 1).toFloat(exec), args.at(exec, 2).toFloat(exec),                               args.at(exec, 3).toFloat(exec), args.at(exec, 4).toFloat(exec), args.at(exec, 5).toFloat(exec), args.at(exec, 6).toFloat(exec), ec);    else        context->putImageData(toImageData(args.at(exec, 0)), args.at(exec, 1).toFloat(exec), args.at(exec, 2).toFloat(exec), ec);    setDOMException(exec, ec);    return jsUndefined();}JSValuePtr JSCanvasRenderingContext2D::fillText(ExecState* exec, const ArgList& args){     CanvasRenderingContext2D* context = impl();    // string arg = text to draw    // number arg = x    // number arg = y    // optional number arg = maxWidth    if (args.size() < 3 || args.size() > 4)        return throwError(exec, SyntaxError);        if (args.size() == 4)        context->fillText(args.at(exec, 0).toString(exec), args.at(exec, 1).toFloat(exec), args.at(exec, 2).toFloat(exec), args.at(exec, 3).toFloat(exec));    else        context->fillText(args.at(exec, 0).toString(exec), args.at(exec, 1).toFloat(exec), args.at(exec, 2).toFloat(exec));    return jsUndefined();}JSValuePtr JSCanvasRenderingContext2D::strokeText(ExecState* exec, const ArgList& args){     CanvasRenderingContext2D* context = impl();    // string arg = text to draw    // number arg = x    // number arg = y    // optional number arg = maxWidth    if (args.size() < 3 || args.size() > 4)        return throwError(exec, SyntaxError);        if (args.size() == 4)        context->strokeText(args.at(exec, 0).toString(exec), args.at(exec, 1).toFloat(exec), args.at(exec, 2).toFloat(exec), args.at(exec, 3).toFloat(exec));    else        context->strokeText(args.at(exec, 0).toString(exec), args.at(exec, 1).toFloat(exec), args.at(exec, 2).toFloat(exec));    return jsUndefined();}} // namespace WebCore

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -