Changeset 57787 in webkit


Ignore:
Timestamp:
Apr 17, 2010 1:43:30 PM (14 years ago)
Author:
eric@webkit.org
Message:

2010-04-17 Yaar Schnitman <yaar@chromium.org>

Reviewed by Adam Barth.

Auto-generate V8 bindings for canvas.* overloads
https://bugs.webkit.org/show_bug.cgi?id=37453

  • bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp: Deleted custom code that is now auto-generated.
  • bindings/scripts/CodeGeneratorV8.pm: Not generating custom signatures for overloaded methods and accepting Object as a string input.
  • html/canvas/CanvasRenderingContext2D.cpp: (WebCore::CanvasRenderingContext2D::drawImage): Added missing 9-arguments overloads for drawImage.
  • html/canvas/CanvasRenderingContext2D.h:
  • html/canvas/CanvasRenderingContext2D.idl: Overloaded methods defined (V8 only).
Location:
trunk/WebCore
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r57784 r57787  
     12010-04-17  Yaar Schnitman  <yaar@chromium.org>
     2
     3        Reviewed by Adam Barth.
     4
     5        Auto-generate V8 bindings for canvas.* overloads
     6        https://bugs.webkit.org/show_bug.cgi?id=37453
     7
     8        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp: Deleted custom code that is now auto-generated.
     9        * bindings/scripts/CodeGeneratorV8.pm: Not generating custom signatures for overloaded methods and accepting Object as a string input.
     10        * html/canvas/CanvasRenderingContext2D.cpp:
     11        (WebCore::CanvasRenderingContext2D::drawImage): Added missing 9-arguments overloads for drawImage.
     12        * html/canvas/CanvasRenderingContext2D.h:
     13        * html/canvas/CanvasRenderingContext2D.idl: Overloaded methods defined (V8 only).
     14
    1152010-04-17  Yury Semikhatsky  <yurys@chromium.org>
    216
  • trunk/WebCore/bindings/scripts/CodeGeneratorV8.pm

    r57653 r57787  
    10331033
    10341034        # Only DOMString or wrapper types are checked.
    1035         # For DOMString, Null or Undefined are accepted too, as these are
    1036         # usually acceptable values for a DOMString argument.
    1037         push(@andExpression, "(${value}.IsNull() || ${value}.IsUndefined() || ${value}.IsString())") if $codeGenerator->IsStringType($type);
     1035        # For DOMString, Null, Undefined and any Object are accepted too, as
     1036        # these are acceptable values for a DOMString argument (any Object can
     1037        # be converted to a string via .toString).
     1038        push(@andExpression, "(${value}->IsNull() || ${value}->IsUndefined() || ${value}->IsString() || ${value}->IsObject())") if $codeGenerator->IsStringType($type);
    10381039        push(@andExpression, "V8${type}::HasInstance($value)") if IsWrapperType($type);
    10391040
     
    10781079    INC_STATS(\"DOM.$implClassName.$name\");
    10791080END
     1081
    10801082    foreach my $overload (@{$function->{overloads}}) {
    10811083        my $parametersCheck = GenerateFunctionParametersCheck($overload);
     
    27132715        $function->signature->extendedAttributes->{"V8Custom"}) {
    27142716        return 0;
     2717    }
     2718    # No signature needed for overloaded function
     2719    if (@{$function->{overloads}} > 1) {
     2720        return 0;
     2721    }
     2722
     2723    foreach my $parameter (@{$function->parameters}) {
     2724        if ($parameter->extendedAttributes->{"Optional"}) {
     2725            return 0;
     2726        }
    27152727    }
    27162728
  • trunk/WebCore/bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp

    r56166 r57787  
    9999}
    100100
    101 // TODO: SetStrokeColor and SetFillColor are similar except function names,
    102 // consolidate them into one.
    103 v8::Handle<v8::Value> V8CanvasRenderingContext2D::setStrokeColorCallback(const v8::Arguments& args)
    104 {
    105     INC_STATS("DOM.CanvasRenderingContext2D.setStrokeColor()");
    106     CanvasRenderingContext2D* context = V8CanvasRenderingContext2D::toNative(args.Holder());
    107     switch (args.Length()) {
    108     case 1:
    109         if (args[0]->IsString())
    110             context->setStrokeColor(toWebCoreString(args[0]));
    111         else
    112             context->setStrokeColor(toFloat(args[0]));
    113         break;
    114     case 2:
    115         if (args[0]->IsString())
    116             context->setStrokeColor(toWebCoreString(args[0]), toFloat(args[1]));
    117         else
    118             context->setStrokeColor(toFloat(args[0]), toFloat(args[1]));
    119         break;
    120     case 4:
    121         context->setStrokeColor(toFloat(args[0]), toFloat(args[1]), toFloat(args[2]), toFloat(args[3]));
    122         break;
    123     case 5:
    124         context->setStrokeColor(toFloat(args[0]), toFloat(args[1]), toFloat(args[2]), toFloat(args[3]), toFloat(args[4]));
    125         break;
    126     default:
    127         V8Proxy::throwError(V8Proxy::SyntaxError, "setStrokeColor: Invalid number of arguments");
    128         break;
    129     }
    130     return v8::Undefined();
    131 }
    132 
    133 v8::Handle<v8::Value> V8CanvasRenderingContext2D::setFillColorCallback(const v8::Arguments& args)
    134 {
    135     INC_STATS("DOM.CanvasRenderingContext2D.setFillColor()");
    136     CanvasRenderingContext2D* context = V8CanvasRenderingContext2D::toNative(args.Holder());
    137     switch (args.Length()) {
    138     case 1:
    139         if (args[0]->IsString())
    140             context->setFillColor(toWebCoreString(args[0]));
    141         else
    142             context->setFillColor(toFloat(args[0]));
    143         break;
    144     case 2:
    145         if (args[0]->IsString())
    146             context->setFillColor(toWebCoreString(args[0]), toFloat(args[1]));
    147         else
    148             context->setFillColor(toFloat(args[0]), toFloat(args[1]));
    149         break;
    150     case 4:
    151         context->setFillColor(toFloat(args[0]), toFloat(args[1]), toFloat(args[2]), toFloat(args[3]));
    152         break;
    153     case 5:
    154         context->setFillColor(toFloat(args[0]), toFloat(args[1]), toFloat(args[2]), toFloat(args[3]), toFloat(args[4]));
    155         break;
    156     default:
    157         V8Proxy::throwError(V8Proxy::SyntaxError, "setFillColor: Invalid number of arguments");
    158         break;
    159     }
    160     return v8::Undefined();
    161 }
    162 
    163 v8::Handle<v8::Value> V8CanvasRenderingContext2D::strokeRectCallback(const v8::Arguments& args)
    164 {
    165     INC_STATS("DOM.CanvasRenderingContext2D.strokeRect()");
    166     CanvasRenderingContext2D* context = V8CanvasRenderingContext2D::toNative(args.Holder());
    167     if (args.Length() == 5)
    168         context->strokeRect(toFloat(args[0]), toFloat(args[1]), toFloat(args[2]), toFloat(args[3]), toFloat(args[4]));
    169     else if (args.Length() == 4)
    170         context->strokeRect(toFloat(args[0]), toFloat(args[1]), toFloat(args[2]), toFloat(args[3]));
    171     else {
    172         V8Proxy::setDOMException(INDEX_SIZE_ERR);
    173         return notHandledByInterceptor();
    174     }
    175     return v8::Undefined();
    176 }
    177 
    178 v8::Handle<v8::Value> V8CanvasRenderingContext2D::setShadowCallback(const v8::Arguments& args)
    179 {
    180     INC_STATS("DOM.CanvasRenderingContext2D.setShadow()");
    181     CanvasRenderingContext2D* context = V8CanvasRenderingContext2D::toNative(args.Holder());
    182 
    183     switch (args.Length()) {
    184     case 3:
    185         context->setShadow(toFloat(args[0]), toFloat(args[1]), toFloat(args[2]));
    186         break;
    187     case 4:
    188         if (args[3]->IsString())
    189             context->setShadow(toFloat(args[0]), toFloat(args[1]), toFloat(args[2]), toWebCoreString(args[3]));
    190         else
    191             context->setShadow(toFloat(args[0]), toFloat(args[1]), toFloat(args[2]), toFloat(args[3]));
    192         break;
    193     case 5:
    194         if (args[3]->IsString())
    195             context->setShadow(toFloat(args[0]), toFloat(args[1]), toFloat(args[2]), toWebCoreString(args[3]), toFloat(args[4]));
    196         else
    197             context->setShadow(toFloat(args[0]), toFloat(args[1]), toFloat(args[2]), toFloat(args[3]), toFloat(args[4]));
    198         break;
    199     case 7:
    200         context->setShadow(toFloat(args[0]), toFloat(args[1]), toFloat(args[2]), toFloat(args[3]), toFloat(args[4]), toFloat(args[5]), toFloat(args[6]));
    201         break;
    202     case 8:
    203         context->setShadow(toFloat(args[0]), toFloat(args[1]), toFloat(args[2]), toFloat(args[3]), toFloat(args[4]), toFloat(args[5]), toFloat(args[6]), toFloat(args[7]));
    204         break;
    205     default:
    206         V8Proxy::throwError(V8Proxy::SyntaxError, "setShadow: Invalid number of arguments");
    207         break;
    208     }
    209 
    210     return v8::Undefined();
    211 }
    212 
    213 v8::Handle<v8::Value> V8CanvasRenderingContext2D::drawImageCallback(const v8::Arguments& args)
    214 {
    215     INC_STATS("DOM.CanvasRenderingContext2D.drawImage()");
    216     CanvasRenderingContext2D* context = V8CanvasRenderingContext2D::toNative(args.Holder());
    217 
    218     v8::Handle<v8::Value> arg = args[0];
    219 
    220     if (V8HTMLImageElement::HasInstance(arg)) {
    221         ExceptionCode ec = 0;
    222         HTMLImageElement* imageElement = V8HTMLImageElement::toNative(v8::Handle<v8::Object>::Cast(arg));
    223         switch (args.Length()) {
    224         case 3:
    225             context->drawImage(imageElement, toFloat(args[1]), toFloat(args[2]));
    226             break;
    227         case 5:
    228             context->drawImage(imageElement, toFloat(args[1]), toFloat(args[2]), toFloat(args[3]), toFloat(args[4]), ec);
    229             if (ec != 0) {
    230                 V8Proxy::setDOMException(ec);
    231                 return notHandledByInterceptor();
    232             }
    233             break;
    234         case 9:
    235             context->drawImage(imageElement,
    236                 FloatRect(toFloat(args[1]), toFloat(args[2]), toFloat(args[3]), toFloat(args[4])),
    237                 FloatRect(toFloat(args[5]), toFloat(args[6]), toFloat(args[7]), toFloat(args[8])),
    238                 ec);
    239             if (ec != 0) {
    240                 V8Proxy::setDOMException(ec);
    241                 return notHandledByInterceptor();
    242             }
    243             break;
    244         default:
    245             return throwError("drawImage: Invalid number of arguments", V8Proxy::SyntaxError);
    246         }
    247         return v8::Undefined();
    248     }
    249 
    250     // HTMLCanvasElement
    251     if (V8HTMLCanvasElement::HasInstance(arg)) {
    252         ExceptionCode ec = 0;
    253         HTMLCanvasElement* canvasElement = V8HTMLCanvasElement::toNative(v8::Handle<v8::Object>::Cast(arg));
    254         switch (args.Length()) {
    255         case 3:
    256             context->drawImage(canvasElement, toFloat(args[1]), toFloat(args[2]));
    257             break;
    258         case 5:
    259             context->drawImage(canvasElement, toFloat(args[1]), toFloat(args[2]), toFloat(args[3]), toFloat(args[4]), ec);
    260             if (ec != 0) {
    261                 V8Proxy::setDOMException(ec);
    262                 return notHandledByInterceptor();
    263             }
    264             break;
    265         case 9:
    266             context->drawImage(canvasElement,
    267                 FloatRect(toFloat(args[1]), toFloat(args[2]), toFloat(args[3]), toFloat(args[4])),
    268                 FloatRect(toFloat(args[5]), toFloat(args[6]), toFloat(args[7]), toFloat(args[8])),
    269                 ec);
    270             if (ec != 0) {
    271                 V8Proxy::setDOMException(ec);
    272                 return notHandledByInterceptor();
    273             }
    274             break;
    275         default:
    276             return throwError("drawImage: Invalid number of arguments", V8Proxy::SyntaxError);
    277         }
    278         return v8::Undefined();
    279     }
    280 
    281 #if ENABLE(VIDEO)
    282     // HTMLVideoElement
    283     if (V8HTMLVideoElement::HasInstance(arg)) {
    284         ExceptionCode ec = 0;
    285         HTMLVideoElement* videoElement = V8HTMLVideoElement::toNative(v8::Handle<v8::Object>::Cast(arg));
    286         switch (args.Length()) {
    287         case 3:
    288             context->drawImage(videoElement, toFloat(args[1]), toFloat(args[2]));
    289             break;
    290         case 5:
    291             context->drawImage(videoElement, toFloat(args[1]), toFloat(args[2]), toFloat(args[3]), toFloat(args[4]), ec);
    292             if (ec != 0) {
    293                 V8Proxy::setDOMException(ec);
    294                 return notHandledByInterceptor();
    295             }
    296             break;
    297         case 9:
    298             context->drawImage(videoElement,
    299                 FloatRect(toFloat(args[1]), toFloat(args[2]), toFloat(args[3]), toFloat(args[4])),
    300                 FloatRect(toFloat(args[5]), toFloat(args[6]), toFloat(args[7]), toFloat(args[8])),
    301                 ec);
    302             if (ec != 0) {
    303                 V8Proxy::setDOMException(ec);
    304                 return notHandledByInterceptor();
    305             }
    306             break;
    307         default:
    308             return throwError("drawImage: Invalid number of arguments", V8Proxy::SyntaxError);
    309         }
    310         return v8::Undefined();
    311     }
    312 #endif
    313 
    314     V8Proxy::setDOMException(TYPE_MISMATCH_ERR);
    315     return notHandledByInterceptor();
    316 }
    317 
    318 
    319 v8::Handle<v8::Value> V8CanvasRenderingContext2D::drawImageFromRectCallback(const v8::Arguments& args)
    320 {
    321     INC_STATS("DOM.CanvasRenderingContext2D.drawImageFromRect()");
    322     CanvasRenderingContext2D* context = V8CanvasRenderingContext2D::toNative(args.Holder());
    323 
    324     v8::Handle<v8::Value> arg = args[0];
    325 
    326     if (V8HTMLImageElement::HasInstance(arg)) {
    327         HTMLImageElement* imageElement = V8HTMLImageElement::toNative(v8::Handle<v8::Object>::Cast(arg));
    328         context->drawImageFromRect(imageElement,  toFloat(args[1]), toFloat(args[2]), toFloat(args[3]), toFloat(args[4]), toFloat(args[5]), toFloat(args[6]), toFloat(args[7]), toFloat(args[8]), toWebCoreString(args[9]));
    329     } else
    330         V8Proxy::throwError(V8Proxy::TypeError, "drawImageFromRect: Invalid type of arguments");
    331 
    332     return v8::Undefined();
    333 }
    334 
    335 v8::Handle<v8::Value> V8CanvasRenderingContext2D::createPatternCallback(const v8::Arguments& args)
    336 {
    337     INC_STATS("DOM.CanvasRenderingContext2D.createPattern()");
    338     CanvasRenderingContext2D* context = V8CanvasRenderingContext2D::toNative(args.Holder());
    339 
    340     v8::Handle<v8::Value> arg = args[0];
    341 
    342     if (V8HTMLImageElement::HasInstance(arg)) {
    343         HTMLImageElement* imageElement = V8HTMLImageElement::toNative(v8::Handle<v8::Object>::Cast(arg));
    344         ExceptionCode ec = 0;
    345         RefPtr<CanvasPattern> pattern = context->createPattern(imageElement, toWebCoreStringWithNullCheck(args[1]), ec);
    346         if (ec != 0) {
    347             V8Proxy::setDOMException(ec);
    348             return notHandledByInterceptor();
    349         }
    350         return toV8(pattern.release());
    351     }
    352 
    353     if (V8HTMLCanvasElement::HasInstance(arg)) {
    354         HTMLCanvasElement* canvasElement = V8HTMLCanvasElement::toNative(v8::Handle<v8::Object>::Cast(arg));
    355         ExceptionCode ec = 0;
    356         RefPtr<CanvasPattern> pattern = context->createPattern(canvasElement, toWebCoreStringWithNullCheck(args[1]), ec);
    357         if (ec != 0) {
    358             V8Proxy::setDOMException(ec);
    359             return notHandledByInterceptor();
    360         }
    361         return toV8(pattern.release());
    362     }
    363 
    364     V8Proxy::setDOMException(TYPE_MISMATCH_ERR);
    365     return notHandledByInterceptor();
    366 }
    367 
    368 v8::Handle<v8::Value> V8CanvasRenderingContext2D::fillTextCallback(const v8::Arguments& args)
    369 {
    370     INC_STATS("DOM.CanvasRenderingContext2D.fillText()");
    371 
    372     CanvasRenderingContext2D* context = V8CanvasRenderingContext2D::toNative(args.Holder());
    373 
    374     // Two forms:
    375     // * fillText(text, x, y)
    376     // * fillText(text, x, y, maxWidth)
    377     if (args.Length() < 3 || args.Length() > 4) {
    378         V8Proxy::setDOMException(SYNTAX_ERR);
    379         return notHandledByInterceptor();
    380     }
    381 
    382     String text = toWebCoreString(args[0]);
    383     float x = toFloat(args[1]);
    384     float y = toFloat(args[2]);
    385 
    386     if (args.Length() == 4) {
    387         float maxWidth = toFloat(args[3]);
    388         context->fillText(text, x, y, maxWidth);
    389     } else
    390         context->fillText(text, x, y);
    391 
    392     return v8::Undefined();
    393 }
    394 
    395 v8::Handle<v8::Value> V8CanvasRenderingContext2D::strokeTextCallback(const v8::Arguments& args)
    396 {
    397     INC_STATS("DOM.CanvasRenderingContext2D.strokeText()");
    398     CanvasRenderingContext2D* context = V8CanvasRenderingContext2D::toNative(args.Holder());
    399 
    400     // Two forms:
    401     // * strokeText(text, x, y)
    402     // * strokeText(text, x, y, maxWidth)
    403     if (args.Length() < 3 || args.Length() > 4) {
    404         V8Proxy::setDOMException(SYNTAX_ERR);
    405         return notHandledByInterceptor();
    406     }
    407 
    408     String text = toWebCoreString(args[0]);
    409     float x = toFloat(args[1]);
    410     float y = toFloat(args[2]);
    411 
    412     if (args.Length() == 4) {
    413         float maxWidth = toFloat(args[3]);
    414         context->strokeText(text, x, y, maxWidth);
    415     } else
    416         context->strokeText(text, x, y);
    417 
    418     return v8::Undefined();
    419 }
    420 
    421 v8::Handle<v8::Value> V8CanvasRenderingContext2D::putImageDataCallback(const v8::Arguments& args)
    422 {
    423     INC_STATS("DOM.CanvasRenderingContext2D.putImageData()");
    424 
    425     // Two froms:
    426     // * putImageData(ImageData, x, y)
    427     // * putImageData(ImageData, x, y, dirtyX, dirtyY, dirtyWidth, dirtyHeight)
    428     if (args.Length() != 3 && args.Length() != 7) {
    429         V8Proxy::setDOMException(SYNTAX_ERR);
    430         return notHandledByInterceptor();
    431     }
    432 
    433     CanvasRenderingContext2D* context = V8CanvasRenderingContext2D::toNative(args.Holder());
    434 
    435     ImageData* imageData = 0;
    436 
    437     // Need to check that the argument is of the correct type, since
    438     // toNative() expects it to be correct. If the argument was incorrect
    439     // we leave it null, and putImageData() will throw the correct exception
    440     // (TYPE_MISMATCH_ERR).
    441     if (V8DOMWrapper::isWrapperOfType(args[0], &V8ImageData::info))
    442         imageData = V8ImageData::toNative(v8::Handle<v8::Object>::Cast(args[0]));
    443 
    444     ExceptionCode ec = 0;
    445 
    446     if (args.Length() == 7)
    447         context->putImageData(imageData, toFloat(args[1]), toFloat(args[2]), toFloat(args[3]), toFloat(args[4]), toFloat(args[5]), toFloat(args[6]), ec);
    448     else
    449         context->putImageData(imageData, toFloat(args[1]), toFloat(args[2]), ec);
    450 
    451     if (ec != 0) {
    452         V8Proxy::setDOMException(ec);
    453         return notHandledByInterceptor();
    454     }
    455 
    456     return v8::Undefined();
    457 }
    458 
    459101} // namespace WebCore
  • trunk/WebCore/bindings/v8/test/V8TestObj.cpp

    r57653 r57787  
    306306static v8::Handle<v8::Value> overloadedMethodCallback(const v8::Arguments& args) {
    307307    INC_STATS("DOM.TestObj.overloadedMethod");
    308     if ((args.Length() == 2 && V8TestObj::HasInstance(args[0]) && (args[1].IsNull() || args[1].IsUndefined() || args[1].IsString()))) {
     308    if ((args.Length() == 2 && V8TestObj::HasInstance(args[0]) && (args[1]->IsNull() || args[1]->IsUndefined() || args[1]->IsString() || args[1]->IsObject()))) {
    309309        return overloadedMethod1Callback(args);
    310310    } else if ((args.Length() == 1 && V8TestObj::HasInstance(args[0])) || (args.Length() == 2 && V8TestObj::HasInstance(args[0]))) {
    311311        return overloadedMethod2Callback(args);
    312     } else if ((args.Length() == 1 && (args[0].IsNull() || args[0].IsUndefined() || args[0].IsString()))) {
     312    } else if ((args.Length() == 1 && (args[0]->IsNull() || args[0]->IsUndefined() || args[0]->IsString() || args[0]->IsObject()))) {
    313313        return overloadedMethod3Callback(args);
    314314    } else if (args.Length() == 1) {
     
    434434  {"methodWithNonOptionalArgAndOptionalArg", TestObjInternal::methodWithNonOptionalArgAndOptionalArgCallback},
    435435  {"methodWithNonOptionalArgAndTwoOptionalArgs", TestObjInternal::methodWithNonOptionalArgAndTwoOptionalArgsCallback},
     436  {"overloadedMethod", TestObjInternal::overloadedMethodCallback},
    436437};
    437438static v8::Persistent<v8::FunctionTemplate> ConfigureV8TestObjTemplate(v8::Persistent<v8::FunctionTemplate> desc)
     
    461462    v8::Handle<v8::Signature> objMethodWithArgs_signature = v8::Signature::New(desc, objMethodWithArgs_argc, objMethodWithArgs_argv);
    462463    proto->Set(v8::String::New("objMethodWithArgs"), v8::FunctionTemplate::New(TestObjInternal::objMethodWithArgsCallback, v8::Handle<v8::Value>(), objMethodWithArgs_signature));
    463 
    464     // Custom Signature 'overloadedMethod'
    465     const int overloadedMethod_argc = 2;
    466     v8::Handle<v8::FunctionTemplate> overloadedMethod_argv[overloadedMethod_argc] = { V8TestObj::GetRawTemplate(), v8::Handle<v8::FunctionTemplate>() };
    467     v8::Handle<v8::Signature> overloadedMethod_signature = v8::Signature::New(desc, overloadedMethod_argc, overloadedMethod_argv);
    468     proto->Set(v8::String::New("overloadedMethod"), v8::FunctionTemplate::New(TestObjInternal::overloadedMethodCallback, v8::Handle<v8::Value>(), overloadedMethod_signature));
    469464
    470465    // Custom toString template
  • trunk/WebCore/html/canvas/CanvasRenderingContext2D.cpp

    r57022 r57787  
    971971}
    972972
     973void CanvasRenderingContext2D::drawImage(HTMLImageElement* image,
     974    float sx, float sy, float sw, float sh,
     975    float dx, float dy, float dw, float dh, ExceptionCode& ec)
     976{
     977    drawImage(image, FloatRect(sx, sy, sw, sh), FloatRect(dx, dy, dw, dh), ec);
     978}
     979
    973980void CanvasRenderingContext2D::drawImage(HTMLImageElement* image, const FloatRect& srcRect, const FloatRect& dstRect,
    974981    ExceptionCode& ec)
     
    10211028    ASSERT(canvas);
    10221029    drawImage(canvas, FloatRect(0, 0, canvas->width(), canvas->height()), FloatRect(x, y, width, height), ec);
     1030}
     1031
     1032void CanvasRenderingContext2D::drawImage(HTMLCanvasElement* canvas,
     1033    float sx, float sy, float sw, float sh,
     1034    float dx, float dy, float dw, float dh, ExceptionCode& ec)
     1035{
     1036    drawImage(canvas, FloatRect(sx, sy, sw, sh), FloatRect(dx, dy, dw, dh), ec);
    10231037}
    10241038
     
    10761090    IntSize s = size(video);
    10771091    drawImage(video, FloatRect(0, 0, s.width(), s.height()), FloatRect(x, y, width, height), ec);
     1092}
     1093
     1094void CanvasRenderingContext2D::drawImage(HTMLVideoElement* video,
     1095    float sx, float sy, float sw, float sh,
     1096    float dx, float dy, float dw, float dh, ExceptionCode& ec)
     1097{
     1098    drawImage(video, FloatRect(sx, sy, sw, sh), FloatRect(dx, dy, dw, dh), ec);
    10781099}
    10791100
  • trunk/WebCore/html/canvas/CanvasRenderingContext2D.h

    r57022 r57787  
    157157        void drawImage(HTMLImageElement*, float x, float y);
    158158        void drawImage(HTMLImageElement*, float x, float y, float width, float height, ExceptionCode&);
     159        void drawImage(HTMLImageElement*, float sx, float sy, float sw, float sh, float dx, float dy, float dw, float dh, ExceptionCode&);
    159160        void drawImage(HTMLImageElement*, const FloatRect& srcRect, const FloatRect& dstRect, ExceptionCode&);
    160161        void drawImage(HTMLCanvasElement*, float x, float y);
    161162        void drawImage(HTMLCanvasElement*, float x, float y, float width, float height, ExceptionCode&);
     163        void drawImage(HTMLCanvasElement*, float sx, float sy, float sw, float sh, float dx, float dy, float dw, float dh, ExceptionCode&);
    162164        void drawImage(HTMLCanvasElement*, const FloatRect& srcRect, const FloatRect& dstRect, ExceptionCode&);
    163165#if ENABLE(VIDEO)
    164166        void drawImage(HTMLVideoElement*, float x, float y);
    165167        void drawImage(HTMLVideoElement*, float x, float y, float width, float height, ExceptionCode&);
     168        void drawImage(HTMLVideoElement*, float sx, float sy, float sw, float sh, float dx, float dy, float dw, float dh, ExceptionCode&);
    166169        void drawImage(HTMLVideoElement*, const FloatRect& srcRect, const FloatRect& dstRect, ExceptionCode&);
    167170#endif
  • trunk/WebCore/html/canvas/CanvasRenderingContext2D.idl

    r52537 r57787  
    2121 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    2222 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
     23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    2424 */
    2525
     
    8383        attribute DOMString textAlign;
    8484        attribute DOMString textBaseline;
    85         [Custom] void fillText(/* 4 */);
    86         [Custom] void strokeText(/* 4 */);
     85
    8786        TextMetrics measureText(in DOMString text);
    8887
     
    9998        void clearShadow();
    10099
     100#if defined(V8_BINDING) && V8_BINDING
     101        void fillText(in DOMString text, in float x, in float y, in [Optional] float maxWidth);
     102        void strokeText(in DOMString text, in float x, in float y, in [Optional] float maxWidth);
     103
     104        void setStrokeColor(in DOMString color, in [Optional] float alpha);
     105        void setStrokeColor(in float grayLevel, in [Optional] float alpha);
     106        void setStrokeColor(in float r, in float g, in float b, in float a);
     107        void setStrokeColor(in float c, in float m, in float y, in float k, in float a);
     108
     109        void setFillColor(in DOMString color, in [Optional] float alpha);
     110        void setFillColor(in float grayLevel, in [Optional] float alpha);
     111        void setFillColor(in float r, in float g, in float b, in float a);
     112        void setFillColor(in float c, in float m, in float y, in float k, in float a);
     113
     114        void strokeRect(in float x, in float y, in float width, in float height, in [Optional] float lineWidth);
     115
     116        void drawImage(in HTMLImageElement image, in float x, in float y);
     117        void drawImage(in HTMLImageElement image, in float x, in float y, in float width, in float height)
     118            raises (DOMException);
     119        void drawImage(in HTMLImageElement image, in float sx, in float sy, in float sw, in float sh, in float dx, in float dy, in float dw, in float dh)
     120            raises (DOMException);
     121        void drawImage(in HTMLCanvasElement canvas, in float x, in float y);
     122        void drawImage(in HTMLCanvasElement canvas, in float x, in float y, in float width, in float height)
     123            raises (DOMException);
     124        void drawImage(in HTMLCanvasElement canvas, in float sx, in float sy, in float sw, in float sh, in float dx, in float dy, in float dw, in float dh)
     125            raises (DOMException);
     126#if defined(ENABLE_VIDEO) && ENABLE_VIDEO
     127        void drawImage(in HTMLVideoElement video, in float x, in float y);
     128        void drawImage(in HTMLVideoElement video, in float x, in float y, in float width, in float height)
     129            raises (DOMException);
     130        void drawImage(in HTMLVideoElement video, in float sx, in float sy, in float sw, in float sh, in float dx, in float dy, in float dw, in float dh)
     131            raises (DOMException);
     132#endif
     133        void drawImageFromRect(in HTMLImageElement image,
     134                               in float sx, in float sy, in float sw, in float sh,
     135                               in float dx, in float dy, in float dw, in float dh, in DOMString compositeOperation);
     136
     137        void setShadow(in float width, in float height, in float blur, in [Optional] DOMString color, in [Optional] float alpha);
     138        void setShadow(in float width, in float height, in float blur, in float grayLevel, in [Optional] float alpha);
     139        void setShadow(in float width, in float height, in float blur, in float r, in float g, in float b, in float a);
     140        void setShadow(in float width, in float height, in float blur, in float c, in float m, in float y, in float k, in float a);
     141
     142        CanvasPattern createPattern(in HTMLCanvasElement canvas, in [ConvertNullToNullString] DOMString repetitionType)
     143            raises (DOMException);
     144        CanvasPattern createPattern(in HTMLImageElement image, in [ConvertNullToNullString] DOMString repetitionType)
     145            raises (DOMException);
     146        void putImageData(in ImageData imagedata, in float dx, in float dy, in [Optional] float dirtyX, in float dirtyY, in float dirtyWidth, in float dirtyHeight)
     147            raises(DOMException);
     148#else
     149        // FIXME: Remove 'else' once JSC supports overloads too.
     150        [Custom] void fillText(/* 4 */);
     151        [Custom] void strokeText(/* 4 */);
    101152        [Custom] void setStrokeColor(/* 1  */);
    102153        [Custom] void setFillColor(/* 1 */);
     
    106157        [Custom] void setShadow(/* 3 */);
    107158        [Custom] void createPattern(/* 2 */);
    108        
     159        [Custom] void putImageData(/* in ImageData imagedata, in float dx, in float dy [, in float dirtyX, in float dirtyY, in float dirtyWidth, in float dirtyHeight] */);
     160#endif // defined(V8_BINDING)
     161
    109162        attribute [Custom] custom strokeStyle;
    110163        attribute [Custom] custom fillStyle;
    111        
     164
    112165        // pixel manipulation
    113166        ImageData createImageData(in float sw, in float sh)
     
    115168        ImageData getImageData(in float sx, in float sy, in float sw, in float sh)
    116169            raises(DOMException);
    117         [Custom] void putImageData(/* in ImageData imagedata, in float dx, in float dy [, in float dirtyX, in float dirtyY, in float dirtyWidth, in float dirtyHeight] */);
    118170    };
    119171
Note: See TracChangeset for help on using the changeset viewer.