Skip to content

Commit

Permalink
2011-05-31 Andreas Kling <kling@webkit.org>
Browse files Browse the repository at this point in the history
        Reviewed by Antti Koivisto.

        Canvas/JSC: Auto-generate overloads for setFillColor()
        https://bugs.webkit.org/show_bug.cgi?id=61635

        Move CanvasRenderingContext2D.setStrokeColor() to auto-generated JSC bindings.

        There is a subtle difference to the previous behavior: invalid numbers of
        arguments now raise TypeError instead of SyntaxError. This is in accordance
        with Web IDL, but doesn't matter much anyway since this method is WebKit-only.

        Test: fast/canvas/canvas-overloads-setFillColor.html

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        * html/canvas/CanvasRenderingContext2D.idl:
2011-05-31  Andreas Kling  <kling@webkit.org>

        Reviewed by Antti Koivisto.

        Canvas/JSC: Auto-generate overloads for setFillColor()
        https://bugs.webkit.org/show_bug.cgi?id=61635

        Add a test to verify the behavior of setFillColor() when called with
        different numbers of arguments.

        * fast/canvas/canvas-overloads-setFillColor-expected.txt: Added.
        * fast/canvas/canvas-overloads-setFillColor.html: Added.
        * fast/canvas/script-tests/canvas-overloads-setFillColor.js: Added.


Canonical link: https://commits.webkit.org/77212@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@87732 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  • Loading branch information
Andreas Kling committed May 31, 2011
1 parent 910c9f0 commit cf6b330
Show file tree
Hide file tree
Showing 7 changed files with 79 additions and 39 deletions.
14 changes: 14 additions & 0 deletions LayoutTests/ChangeLog
@@ -1,3 +1,17 @@
2011-05-31 Andreas Kling <kling@webkit.org>

Reviewed by Antti Koivisto.

Canvas/JSC: Auto-generate overloads for setFillColor()
https://bugs.webkit.org/show_bug.cgi?id=61635

Add a test to verify the behavior of setFillColor() when called with
different numbers of arguments.

* fast/canvas/canvas-overloads-setFillColor-expected.txt: Added.
* fast/canvas/canvas-overloads-setFillColor.html: Added.
* fast/canvas/script-tests/canvas-overloads-setFillColor.js: Added.

2011-05-31 Andreas Kling <kling@webkit.org>

Reviewed by Antti Koivisto.
Expand Down
17 changes: 17 additions & 0 deletions LayoutTests/fast/canvas/canvas-overloads-setFillColor-expected.txt
@@ -0,0 +1,17 @@
Test the behavior of CanvasRenderingContext2D.setFillColor() when called with different numbers of arguments.

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".


PASS ctx.setFillColor() threw exception TypeError: Type error.
PASS ctx.setFillColor('red') is undefined
PASS ctx.setFillColor(0) is undefined
PASS ctx.setFillColor(0, 0) is undefined
PASS ctx.setFillColor(0, 0, 0) threw exception TypeError: Type error.
PASS ctx.setFillColor(0, 0, 0, 0) is undefined
PASS ctx.setFillColor(0, 0, 0, 0, 0) is undefined
PASS ctx.setFillColor(0, 0, 0, 0, 0, 0) threw exception TypeError: Type error.
PASS successfullyParsed is true

TEST COMPLETE

13 changes: 13 additions & 0 deletions LayoutTests/fast/canvas/canvas-overloads-setFillColor.html
@@ -0,0 +1,13 @@
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<link rel="stylesheet" href="../js/resources/js-test-style.css">
<script src="../js/resources/js-test-pre.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<script src="script-tests/canvas-overloads-setFillColor.js"></script>
<script src="../js/resources/js-test-post.js"></script>
</body>
</html>
@@ -0,0 +1,16 @@
description("Test the behavior of CanvasRenderingContext2D.setFillColor() when called with different numbers of arguments.");

var ctx = document.createElement('canvas').getContext('2d');

var TypeError = "TypeError: Type error";

shouldThrow("ctx.setFillColor()", "TypeError");
shouldBe("ctx.setFillColor('red')", "undefined");
shouldBe("ctx.setFillColor(0)", "undefined");
shouldBe("ctx.setFillColor(0, 0)", "undefined");
shouldThrow("ctx.setFillColor(0, 0, 0)", "TypeError");
shouldBe("ctx.setFillColor(0, 0, 0, 0)", "undefined");
shouldBe("ctx.setFillColor(0, 0, 0, 0, 0)", "undefined");
shouldThrow("ctx.setFillColor(0, 0, 0, 0, 0, 0)", "TypeError");

var successfullyParsed = true;
18 changes: 18 additions & 0 deletions Source/WebCore/ChangeLog
@@ -1,3 +1,21 @@
2011-05-31 Andreas Kling <kling@webkit.org>

Reviewed by Antti Koivisto.

Canvas/JSC: Auto-generate overloads for setFillColor()
https://bugs.webkit.org/show_bug.cgi?id=61635

Move CanvasRenderingContext2D.setStrokeColor() to auto-generated JSC bindings.

There is a subtle difference to the previous behavior: invalid numbers of
arguments now raise TypeError instead of SyntaxError. This is in accordance
with Web IDL, but doesn't matter much anyway since this method is WebKit-only.

Test: fast/canvas/canvas-overloads-setFillColor.html

* bindings/js/JSCanvasRenderingContext2DCustom.cpp:
* html/canvas/CanvasRenderingContext2D.idl:

2011-05-31 Andreas Kling <kling@webkit.org>

Reviewed by Antti Koivisto.
Expand Down
37 changes: 0 additions & 37 deletions Source/WebCore/bindings/js/JSCanvasRenderingContext2DCustom.cpp
Expand Up @@ -95,43 +95,6 @@ void JSCanvasRenderingContext2D::setFillStyle(ExecState* exec, JSValue value)
context->setFillStyle(toHTMLCanvasStyle(exec, value));
}

JSValue JSCanvasRenderingContext2D::setFillColor(ExecState* exec)
{
CanvasRenderingContext2D* context = static_cast<CanvasRenderingContext2D*>(impl());

// string arg = named color
// number arg = gray color
// string arg, number arg = named color, alpha
// number arg, number arg = gray color, alpha
// 4 args = r, g, b, a
// 5 args = c, m, y, k, a
switch (exec->argumentCount()) {
case 1:
if (exec->argument(0).isString())
context->setFillColor(ustringToString(asString(exec->argument(0))->value(exec)));
else
context->setFillColor(exec->argument(0).toFloat(exec));
break;
case 2:
if (exec->argument(0).isString())
context->setFillColor(ustringToString(asString(exec->argument(0))->value(exec)), exec->argument(1).toFloat(exec));
else
context->setFillColor(exec->argument(0).toFloat(exec), exec->argument(1).toFloat(exec));
break;
case 4:
context->setFillColor(exec->argument(0).toFloat(exec), exec->argument(1).toFloat(exec),
exec->argument(2).toFloat(exec), exec->argument(3).toFloat(exec));
break;
case 5:
context->setFillColor(exec->argument(0).toFloat(exec), exec->argument(1).toFloat(exec),
exec->argument(2).toFloat(exec), exec->argument(3).toFloat(exec), exec->argument(4).toFloat(exec));
break;
default:
return throwSyntaxError(exec);
}
return jsUndefined();
}

JSValue JSCanvasRenderingContext2D::strokeRect(ExecState* exec)
{
CanvasRenderingContext2D* context = static_cast<CanvasRenderingContext2D*>(impl());
Expand Down
3 changes: 1 addition & 2 deletions Source/WebCore/html/canvas/CanvasRenderingContext2D.idl
Expand Up @@ -107,12 +107,12 @@ module html {
void setStrokeColor(in float r, in float g, in float b, in float a);
void setStrokeColor(in float c, in float m, in float y, in float k, in float a);

#if defined(V8_BINDING) && V8_BINDING
void setFillColor(in DOMString color, in [Optional] float alpha);
void setFillColor(in float grayLevel, in [Optional] float alpha);
void setFillColor(in float r, in float g, in float b, in float a);
void setFillColor(in float c, in float m, in float y, in float k, in float a);

#if defined(V8_BINDING) && V8_BINDING
void strokeRect(in float x, in float y, in float width, in float height, in [Optional] float lineWidth);

void drawImage(in HTMLImageElement image, in float x, in float y)
Expand Down Expand Up @@ -156,7 +156,6 @@ module html {
raises (DOMException);
#else
// FIXME: Remove 'else' once JSC supports overloads too.
[Custom] void setFillColor(/* 1 */);
[Custom] void strokeRect(/* 4 */);
[Custom] void drawImage(/* 3 */);
[Custom] void drawImageFromRect(/* 10 */);
Expand Down

0 comments on commit cf6b330

Please sign in to comment.