webengine/osswebengine/DerivedSources/WebCore/JSCanvasRenderingContext2D.cpp
changeset 0 dd21522fd290
equal deleted inserted replaced
-1:000000000000 0:dd21522fd290
       
     1 /*
       
     2     This file is part of the WebKit open source project.
       
     3     This file has been generated by generate-bindings.pl. DO NOT MODIFY!
       
     4 
       
     5     This library is free software; you can redistribute it and/or
       
     6     modify it under the terms of the GNU Library General Public
       
     7     License as published by the Free Software Foundation; either
       
     8     version 2 of the License, or (at your option) any later version.
       
     9 
       
    10     This library is distributed in the hope that it will be useful,
       
    11     but WITHOUT ANY WARRANTY; without even the implied warranty of
       
    12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
       
    13     Library General Public License for more details.
       
    14 
       
    15     You should have received a copy of the GNU Library General Public License
       
    16     along with this library; see the file COPYING.LIB.  If not, write to
       
    17     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
       
    18     Boston, MA 02110-1301, USA.
       
    19 */
       
    20 
       
    21 #include "config.h"
       
    22 
       
    23 #include "JSCanvasRenderingContext2D.h"
       
    24 
       
    25 #include <wtf/GetPtr.h>
       
    26 
       
    27 #include "CanvasGradient.h"
       
    28 #include "CanvasPattern.h"
       
    29 #include "CanvasRenderingContext2D.h"
       
    30 #include "CanvasStyle.h"
       
    31 #include "HTMLCanvasElement.h"
       
    32 #include "JSCanvasGradient.h"
       
    33 #include "JSHTMLCanvasElement.h"
       
    34 #include "PlatformString.h"
       
    35 
       
    36 using namespace KJS;
       
    37 
       
    38 namespace WebCore {
       
    39 
       
    40 /* Hash table */
       
    41 
       
    42 static const HashEntry JSCanvasRenderingContext2DTableEntries[] =
       
    43 {
       
    44     { "lineWidth", JSCanvasRenderingContext2D::LineWidthAttrNum, DontDelete, 0, &JSCanvasRenderingContext2DTableEntries[14] },
       
    45     { "shadowOffsetY", JSCanvasRenderingContext2D::ShadowOffsetYAttrNum, DontDelete, 0, 0 },
       
    46     { 0, 0, 0, 0, 0 },
       
    47     { "strokeStyle", JSCanvasRenderingContext2D::StrokeStyleAttrNum, DontDelete, 0, 0 },
       
    48     { "globalAlpha", JSCanvasRenderingContext2D::GlobalAlphaAttrNum, DontDelete, 0, 0 },
       
    49     { "lineJoin", JSCanvasRenderingContext2D::LineJoinAttrNum, DontDelete, 0, 0 },
       
    50     { 0, 0, 0, 0, 0 },
       
    51     { "shadowOffsetX", JSCanvasRenderingContext2D::ShadowOffsetXAttrNum, DontDelete, 0, 0 },
       
    52     { "globalCompositeOperation", JSCanvasRenderingContext2D::GlobalCompositeOperationAttrNum, DontDelete, 0, 0 },
       
    53     { "lineCap", JSCanvasRenderingContext2D::LineCapAttrNum, DontDelete, 0, 0 },
       
    54     { "shadowColor", JSCanvasRenderingContext2D::ShadowColorAttrNum, DontDelete, 0, 0 },
       
    55     { "canvas", JSCanvasRenderingContext2D::CanvasAttrNum, DontDelete|ReadOnly, 0, &JSCanvasRenderingContext2DTableEntries[13] },
       
    56     { "shadowBlur", JSCanvasRenderingContext2D::ShadowBlurAttrNum, DontDelete, 0, 0 },
       
    57     { "miterLimit", JSCanvasRenderingContext2D::MiterLimitAttrNum, DontDelete, 0, 0 },
       
    58     { "fillStyle", JSCanvasRenderingContext2D::FillStyleAttrNum, DontDelete, 0, 0 }
       
    59 };
       
    60 
       
    61 static const HashTable JSCanvasRenderingContext2DTable = 
       
    62 {
       
    63     2, 15, JSCanvasRenderingContext2DTableEntries, 13
       
    64 };
       
    65 
       
    66 /* Hash table for prototype */
       
    67 
       
    68 static const HashEntry JSCanvasRenderingContext2DPrototypeTableEntries[] =
       
    69 {
       
    70     { "fill", JSCanvasRenderingContext2D::FillFuncNum, DontDelete|Function, 0, 0 },
       
    71     { "lineTo", JSCanvasRenderingContext2D::LineToFuncNum, DontDelete|Function, 2, &JSCanvasRenderingContext2DPrototypeTableEntries[41] },
       
    72     { 0, 0, 0, 0, 0 },
       
    73     { "save", JSCanvasRenderingContext2D::SaveFuncNum, DontDelete|Function, 0, &JSCanvasRenderingContext2DPrototypeTableEntries[36] },
       
    74     { 0, 0, 0, 0, 0 },
       
    75     { "restore", JSCanvasRenderingContext2D::RestoreFuncNum, DontDelete|Function, 0, &JSCanvasRenderingContext2DPrototypeTableEntries[46] },
       
    76     { "drawImageFromRect", JSCanvasRenderingContext2D::DrawImageFromRectFuncNum, DontDelete|Function, 0, 0 },
       
    77     { 0, 0, 0, 0, 0 },
       
    78     { "setLineJoin", JSCanvasRenderingContext2D::SetLineJoinFuncNum, DontDelete|Function, 1, 0 },
       
    79     { 0, 0, 0, 0, 0 },
       
    80     { "createLinearGradient", JSCanvasRenderingContext2D::CreateLinearGradientFuncNum, DontDelete|Function, 4, &JSCanvasRenderingContext2DPrototypeTableEntries[35] },
       
    81     { "setShadow", JSCanvasRenderingContext2D::SetShadowFuncNum, DontDelete|Function, 0, 0 },
       
    82     { 0, 0, 0, 0, 0 },
       
    83     { "clip", JSCanvasRenderingContext2D::ClipFuncNum, DontDelete|Function, 0, &JSCanvasRenderingContext2DPrototypeTableEntries[43] },
       
    84     { "rotate", JSCanvasRenderingContext2D::RotateFuncNum, DontDelete|Function, 1, &JSCanvasRenderingContext2DPrototypeTableEntries[38] },
       
    85     { "setLineWidth", JSCanvasRenderingContext2D::SetLineWidthFuncNum, DontDelete|Function, 1, 0 },
       
    86     { 0, 0, 0, 0, 0 },
       
    87     { "translate", JSCanvasRenderingContext2D::TranslateFuncNum, DontDelete|Function, 2, &JSCanvasRenderingContext2DPrototypeTableEntries[45] },
       
    88     { "setFillColor", JSCanvasRenderingContext2D::SetFillColorFuncNum, DontDelete|Function, 0, 0 },
       
    89     { 0, 0, 0, 0, 0 },
       
    90     { "createPattern", JSCanvasRenderingContext2D::CreatePatternFuncNum, DontDelete|Function, 0, 0 },
       
    91     { "quadraticCurveTo", JSCanvasRenderingContext2D::QuadraticCurveToFuncNum, DontDelete|Function, 4, 0 },
       
    92     { 0, 0, 0, 0, 0 },
       
    93     { "scale", JSCanvasRenderingContext2D::ScaleFuncNum, DontDelete|Function, 2, 0 },
       
    94     { "setCompositeOperation", JSCanvasRenderingContext2D::SetCompositeOperationFuncNum, DontDelete|Function, 1, &JSCanvasRenderingContext2DPrototypeTableEntries[44] },
       
    95     { 0, 0, 0, 0, 0 },
       
    96     { "beginPath", JSCanvasRenderingContext2D::BeginPathFuncNum, DontDelete|Function, 0, 0 },
       
    97     { 0, 0, 0, 0, 0 },
       
    98     { "bezierCurveTo", JSCanvasRenderingContext2D::BezierCurveToFuncNum, DontDelete|Function, 6, 0 },
       
    99     { 0, 0, 0, 0, 0 },
       
   100     { "moveTo", JSCanvasRenderingContext2D::MoveToFuncNum, DontDelete|Function, 2, &JSCanvasRenderingContext2DPrototypeTableEntries[42] },
       
   101     { "clearRect", JSCanvasRenderingContext2D::ClearRectFuncNum, DontDelete|Function, 4, &JSCanvasRenderingContext2DPrototypeTableEntries[40] },
       
   102     { 0, 0, 0, 0, 0 },
       
   103     { "arc", JSCanvasRenderingContext2D::ArcFuncNum, DontDelete|Function, 6, 0 },
       
   104     { "createRadialGradient", JSCanvasRenderingContext2D::CreateRadialGradientFuncNum, DontDelete|Function, 6, 0 },
       
   105     { "fillRect", JSCanvasRenderingContext2D::FillRectFuncNum, DontDelete|Function, 4, &JSCanvasRenderingContext2DPrototypeTableEntries[37] },
       
   106     { "closePath", JSCanvasRenderingContext2D::ClosePathFuncNum, DontDelete|Function, 0, 0 },
       
   107     { "arcTo", JSCanvasRenderingContext2D::ArcToFuncNum, DontDelete|Function, 5, &JSCanvasRenderingContext2DPrototypeTableEntries[39] },
       
   108     { "rect", JSCanvasRenderingContext2D::RectFuncNum, DontDelete|Function, 4, 0 },
       
   109     { "stroke", JSCanvasRenderingContext2D::StrokeFuncNum, DontDelete|Function, 0, 0 },
       
   110     { "setAlpha", JSCanvasRenderingContext2D::SetAlphaFuncNum, DontDelete|Function, 1, 0 },
       
   111     { "setLineCap", JSCanvasRenderingContext2D::SetLineCapFuncNum, DontDelete|Function, 1, 0 },
       
   112     { "setMiterLimit", JSCanvasRenderingContext2D::SetMiterLimitFuncNum, DontDelete|Function, 1, 0 },
       
   113     { "clearShadow", JSCanvasRenderingContext2D::ClearShadowFuncNum, DontDelete|Function, 0, 0 },
       
   114     { "setStrokeColor", JSCanvasRenderingContext2D::SetStrokeColorFuncNum, DontDelete|Function, 0, 0 },
       
   115     { "strokeRect", JSCanvasRenderingContext2D::StrokeRectFuncNum, DontDelete|Function, 0, 0 },
       
   116     { "drawImage", JSCanvasRenderingContext2D::DrawImageFuncNum, DontDelete|Function, 0, 0 }
       
   117 };
       
   118 
       
   119 static const HashTable JSCanvasRenderingContext2DPrototypeTable = 
       
   120 {
       
   121     2, 47, JSCanvasRenderingContext2DPrototypeTableEntries, 35
       
   122 };
       
   123 
       
   124 const ClassInfo JSCanvasRenderingContext2DPrototype::info = { "CanvasRenderingContext2DPrototype", 0, &JSCanvasRenderingContext2DPrototypeTable, 0 };
       
   125 
       
   126 JSObject* JSCanvasRenderingContext2DPrototype::self(ExecState* exec)
       
   127 {
       
   128     return KJS::cacheGlobalObject<JSCanvasRenderingContext2DPrototype>(exec, "[[JSCanvasRenderingContext2D.prototype]]");
       
   129 }
       
   130 
       
   131 bool JSCanvasRenderingContext2DPrototype::getOwnPropertySlot(ExecState* exec, const Identifier& propertyName, PropertySlot& slot)
       
   132 {
       
   133     return getStaticFunctionSlot<JSCanvasRenderingContext2DPrototypeFunction, JSObject>(exec, &JSCanvasRenderingContext2DPrototypeTable, this, propertyName, slot);
       
   134 }
       
   135 
       
   136 const ClassInfo JSCanvasRenderingContext2D::info = { "CanvasRenderingContext2D", 0, &JSCanvasRenderingContext2DTable, 0 };
       
   137 
       
   138 JSCanvasRenderingContext2D::JSCanvasRenderingContext2D(ExecState* exec, CanvasRenderingContext2D* impl)
       
   139     : m_impl(impl)
       
   140 {
       
   141     setPrototype(JSCanvasRenderingContext2DPrototype::self(exec));
       
   142 }
       
   143 
       
   144 JSCanvasRenderingContext2D::~JSCanvasRenderingContext2D()
       
   145 {
       
   146     ScriptInterpreter::forgetDOMObject(m_impl.get());
       
   147 }
       
   148 
       
   149 bool JSCanvasRenderingContext2D::getOwnPropertySlot(ExecState* exec, const Identifier& propertyName, PropertySlot& slot)
       
   150 {
       
   151     return getStaticValueSlot<JSCanvasRenderingContext2D, KJS::DOMObject>(exec, &JSCanvasRenderingContext2DTable, this, propertyName, slot);
       
   152 }
       
   153 
       
   154 JSValue* JSCanvasRenderingContext2D::getValueProperty(ExecState* exec, int token) const
       
   155 {
       
   156     switch (token) {
       
   157     case CanvasAttrNum: {
       
   158         CanvasRenderingContext2D* imp = static_cast<CanvasRenderingContext2D*>(impl());
       
   159 
       
   160         return toJS(exec, WTF::getPtr(imp->canvas()));
       
   161     }
       
   162     case GlobalAlphaAttrNum: {
       
   163         CanvasRenderingContext2D* imp = static_cast<CanvasRenderingContext2D*>(impl());
       
   164 
       
   165         return jsNumber(imp->globalAlpha());
       
   166     }
       
   167     case GlobalCompositeOperationAttrNum: {
       
   168         CanvasRenderingContext2D* imp = static_cast<CanvasRenderingContext2D*>(impl());
       
   169 
       
   170         return jsString(imp->globalCompositeOperation());
       
   171     }
       
   172     case LineWidthAttrNum: {
       
   173         CanvasRenderingContext2D* imp = static_cast<CanvasRenderingContext2D*>(impl());
       
   174 
       
   175         return jsNumber(imp->lineWidth());
       
   176     }
       
   177     case LineCapAttrNum: {
       
   178         CanvasRenderingContext2D* imp = static_cast<CanvasRenderingContext2D*>(impl());
       
   179 
       
   180         return jsString(imp->lineCap());
       
   181     }
       
   182     case LineJoinAttrNum: {
       
   183         CanvasRenderingContext2D* imp = static_cast<CanvasRenderingContext2D*>(impl());
       
   184 
       
   185         return jsString(imp->lineJoin());
       
   186     }
       
   187     case MiterLimitAttrNum: {
       
   188         CanvasRenderingContext2D* imp = static_cast<CanvasRenderingContext2D*>(impl());
       
   189 
       
   190         return jsNumber(imp->miterLimit());
       
   191     }
       
   192     case ShadowOffsetXAttrNum: {
       
   193         CanvasRenderingContext2D* imp = static_cast<CanvasRenderingContext2D*>(impl());
       
   194 
       
   195         return jsNumber(imp->shadowOffsetX());
       
   196     }
       
   197     case ShadowOffsetYAttrNum: {
       
   198         CanvasRenderingContext2D* imp = static_cast<CanvasRenderingContext2D*>(impl());
       
   199 
       
   200         return jsNumber(imp->shadowOffsetY());
       
   201     }
       
   202     case ShadowBlurAttrNum: {
       
   203         CanvasRenderingContext2D* imp = static_cast<CanvasRenderingContext2D*>(impl());
       
   204 
       
   205         return jsNumber(imp->shadowBlur());
       
   206     }
       
   207     case ShadowColorAttrNum: {
       
   208         CanvasRenderingContext2D* imp = static_cast<CanvasRenderingContext2D*>(impl());
       
   209 
       
   210         return jsString(imp->shadowColor());
       
   211     }
       
   212     case StrokeStyleAttrNum: {
       
   213         return strokeStyle(exec);
       
   214     }
       
   215     case FillStyleAttrNum: {
       
   216         return fillStyle(exec);
       
   217     }
       
   218     }
       
   219     return 0;
       
   220 }
       
   221 
       
   222 void JSCanvasRenderingContext2D::put(ExecState* exec, const Identifier& propertyName, JSValue* value, int attr)
       
   223 {
       
   224     lookupPut<JSCanvasRenderingContext2D, KJS::DOMObject>(exec, propertyName, value, attr, &JSCanvasRenderingContext2DTable, this);
       
   225 }
       
   226 
       
   227 void JSCanvasRenderingContext2D::putValueProperty(ExecState* exec, int token, JSValue* value, int /*attr*/)
       
   228 {
       
   229     switch (token) {
       
   230     case GlobalAlphaAttrNum: {
       
   231         CanvasRenderingContext2D* imp = static_cast<CanvasRenderingContext2D*>(impl());
       
   232 
       
   233         imp->setGlobalAlpha(value->toFloat(exec));
       
   234         break;
       
   235     }
       
   236     case GlobalCompositeOperationAttrNum: {
       
   237         CanvasRenderingContext2D* imp = static_cast<CanvasRenderingContext2D*>(impl());
       
   238 
       
   239         imp->setGlobalCompositeOperation(valueToStringWithNullCheck(exec, value));
       
   240         break;
       
   241     }
       
   242     case LineWidthAttrNum: {
       
   243         CanvasRenderingContext2D* imp = static_cast<CanvasRenderingContext2D*>(impl());
       
   244 
       
   245         imp->setLineWidth(value->toFloat(exec));
       
   246         break;
       
   247     }
       
   248     case LineCapAttrNum: {
       
   249         CanvasRenderingContext2D* imp = static_cast<CanvasRenderingContext2D*>(impl());
       
   250 
       
   251         imp->setLineCap(valueToStringWithNullCheck(exec, value));
       
   252         break;
       
   253     }
       
   254     case LineJoinAttrNum: {
       
   255         CanvasRenderingContext2D* imp = static_cast<CanvasRenderingContext2D*>(impl());
       
   256 
       
   257         imp->setLineJoin(valueToStringWithNullCheck(exec, value));
       
   258         break;
       
   259     }
       
   260     case MiterLimitAttrNum: {
       
   261         CanvasRenderingContext2D* imp = static_cast<CanvasRenderingContext2D*>(impl());
       
   262 
       
   263         imp->setMiterLimit(value->toFloat(exec));
       
   264         break;
       
   265     }
       
   266     case ShadowOffsetXAttrNum: {
       
   267         CanvasRenderingContext2D* imp = static_cast<CanvasRenderingContext2D*>(impl());
       
   268 
       
   269         imp->setShadowOffsetX(value->toFloat(exec));
       
   270         break;
       
   271     }
       
   272     case ShadowOffsetYAttrNum: {
       
   273         CanvasRenderingContext2D* imp = static_cast<CanvasRenderingContext2D*>(impl());
       
   274 
       
   275         imp->setShadowOffsetY(value->toFloat(exec));
       
   276         break;
       
   277     }
       
   278     case ShadowBlurAttrNum: {
       
   279         CanvasRenderingContext2D* imp = static_cast<CanvasRenderingContext2D*>(impl());
       
   280 
       
   281         imp->setShadowBlur(value->toFloat(exec));
       
   282         break;
       
   283     }
       
   284     case ShadowColorAttrNum: {
       
   285         CanvasRenderingContext2D* imp = static_cast<CanvasRenderingContext2D*>(impl());
       
   286 
       
   287         imp->setShadowColor(valueToStringWithNullCheck(exec, value));
       
   288         break;
       
   289     }
       
   290     case StrokeStyleAttrNum: {
       
   291         setStrokeStyle(exec, value);
       
   292         break;
       
   293     }
       
   294     case FillStyleAttrNum: {
       
   295         setFillStyle(exec, value);
       
   296         break;
       
   297     }
       
   298     }
       
   299 }
       
   300 
       
   301 JSValue* JSCanvasRenderingContext2DPrototypeFunction::callAsFunction(ExecState* exec, JSObject* thisObj, const List& args)
       
   302 {
       
   303     if (!thisObj->inherits(&JSCanvasRenderingContext2D::info))
       
   304       return throwError(exec, TypeError);
       
   305 
       
   306     CanvasRenderingContext2D* imp = static_cast<CanvasRenderingContext2D*>(static_cast<JSCanvasRenderingContext2D*>(thisObj)->impl());
       
   307 
       
   308     switch (id) {
       
   309     case JSCanvasRenderingContext2D::SaveFuncNum: {
       
   310 
       
   311         imp->save();
       
   312         return jsUndefined();
       
   313     }
       
   314     case JSCanvasRenderingContext2D::RestoreFuncNum: {
       
   315 
       
   316         imp->restore();
       
   317         return jsUndefined();
       
   318     }
       
   319     case JSCanvasRenderingContext2D::ScaleFuncNum: {
       
   320         float sx = args[0]->toFloat(exec);
       
   321         float sy = args[1]->toFloat(exec);
       
   322 
       
   323         imp->scale(sx, sy);
       
   324         return jsUndefined();
       
   325     }
       
   326     case JSCanvasRenderingContext2D::RotateFuncNum: {
       
   327         float angle = args[0]->toFloat(exec);
       
   328 
       
   329         imp->rotate(angle);
       
   330         return jsUndefined();
       
   331     }
       
   332     case JSCanvasRenderingContext2D::TranslateFuncNum: {
       
   333         float tx = args[0]->toFloat(exec);
       
   334         float ty = args[1]->toFloat(exec);
       
   335 
       
   336         imp->translate(tx, ty);
       
   337         return jsUndefined();
       
   338     }
       
   339     case JSCanvasRenderingContext2D::CreateLinearGradientFuncNum: {
       
   340         float x0 = args[0]->toFloat(exec);
       
   341         float y0 = args[1]->toFloat(exec);
       
   342         float x1 = args[2]->toFloat(exec);
       
   343         float y1 = args[3]->toFloat(exec);
       
   344 
       
   345 
       
   346         KJS::JSValue* result = toJS(exec, WTF::getPtr(imp->createLinearGradient(x0, y0, x1, y1)));
       
   347         return result;
       
   348     }
       
   349     case JSCanvasRenderingContext2D::CreateRadialGradientFuncNum: {
       
   350         float x0 = args[0]->toFloat(exec);
       
   351         float y0 = args[1]->toFloat(exec);
       
   352         float r0 = args[2]->toFloat(exec);
       
   353         float x1 = args[3]->toFloat(exec);
       
   354         float y1 = args[4]->toFloat(exec);
       
   355         float r1 = args[5]->toFloat(exec);
       
   356 
       
   357 
       
   358         KJS::JSValue* result = toJS(exec, WTF::getPtr(imp->createRadialGradient(x0, y0, r0, x1, y1, r1)));
       
   359         return result;
       
   360     }
       
   361     case JSCanvasRenderingContext2D::ClearRectFuncNum: {
       
   362         ExceptionCode ec = 0;
       
   363         float x = args[0]->toFloat(exec);
       
   364         float y = args[1]->toFloat(exec);
       
   365         float width = args[2]->toFloat(exec);
       
   366         float height = args[3]->toFloat(exec);
       
   367 
       
   368         imp->clearRect(x, y, width, height, ec);
       
   369         setDOMException(exec, ec);
       
   370         return jsUndefined();
       
   371     }
       
   372     case JSCanvasRenderingContext2D::FillRectFuncNum: {
       
   373         ExceptionCode ec = 0;
       
   374         float x = args[0]->toFloat(exec);
       
   375         float y = args[1]->toFloat(exec);
       
   376         float width = args[2]->toFloat(exec);
       
   377         float height = args[3]->toFloat(exec);
       
   378 
       
   379         imp->fillRect(x, y, width, height, ec);
       
   380         setDOMException(exec, ec);
       
   381         return jsUndefined();
       
   382     }
       
   383     case JSCanvasRenderingContext2D::BeginPathFuncNum: {
       
   384 
       
   385         imp->beginPath();
       
   386         return jsUndefined();
       
   387     }
       
   388     case JSCanvasRenderingContext2D::ClosePathFuncNum: {
       
   389 
       
   390         imp->closePath();
       
   391         return jsUndefined();
       
   392     }
       
   393     case JSCanvasRenderingContext2D::MoveToFuncNum: {
       
   394         float x = args[0]->toFloat(exec);
       
   395         float y = args[1]->toFloat(exec);
       
   396 
       
   397         imp->moveTo(x, y);
       
   398         return jsUndefined();
       
   399     }
       
   400     case JSCanvasRenderingContext2D::LineToFuncNum: {
       
   401         float x = args[0]->toFloat(exec);
       
   402         float y = args[1]->toFloat(exec);
       
   403 
       
   404         imp->lineTo(x, y);
       
   405         return jsUndefined();
       
   406     }
       
   407     case JSCanvasRenderingContext2D::QuadraticCurveToFuncNum: {
       
   408         float cpx = args[0]->toFloat(exec);
       
   409         float cpy = args[1]->toFloat(exec);
       
   410         float x = args[2]->toFloat(exec);
       
   411         float y = args[3]->toFloat(exec);
       
   412 
       
   413         imp->quadraticCurveTo(cpx, cpy, x, y);
       
   414         return jsUndefined();
       
   415     }
       
   416     case JSCanvasRenderingContext2D::BezierCurveToFuncNum: {
       
   417         float cp1x = args[0]->toFloat(exec);
       
   418         float cp1y = args[1]->toFloat(exec);
       
   419         float cp2x = args[2]->toFloat(exec);
       
   420         float cp2y = args[3]->toFloat(exec);
       
   421         float x = args[4]->toFloat(exec);
       
   422         float y = args[5]->toFloat(exec);
       
   423 
       
   424         imp->bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);
       
   425         return jsUndefined();
       
   426     }
       
   427     case JSCanvasRenderingContext2D::ArcToFuncNum: {
       
   428         ExceptionCode ec = 0;
       
   429         float x1 = args[0]->toFloat(exec);
       
   430         float y1 = args[1]->toFloat(exec);
       
   431         float x2 = args[2]->toFloat(exec);
       
   432         float y2 = args[3]->toFloat(exec);
       
   433         float radius = args[4]->toFloat(exec);
       
   434 
       
   435         imp->arcTo(x1, y1, x2, y2, radius, ec);
       
   436         setDOMException(exec, ec);
       
   437         return jsUndefined();
       
   438     }
       
   439     case JSCanvasRenderingContext2D::RectFuncNum: {
       
   440         ExceptionCode ec = 0;
       
   441         float x = args[0]->toFloat(exec);
       
   442         float y = args[1]->toFloat(exec);
       
   443         float width = args[2]->toFloat(exec);
       
   444         float height = args[3]->toFloat(exec);
       
   445 
       
   446         imp->rect(x, y, width, height, ec);
       
   447         setDOMException(exec, ec);
       
   448         return jsUndefined();
       
   449     }
       
   450     case JSCanvasRenderingContext2D::ArcFuncNum: {
       
   451         ExceptionCode ec = 0;
       
   452         float x = args[0]->toFloat(exec);
       
   453         float y = args[1]->toFloat(exec);
       
   454         float radius = args[2]->toFloat(exec);
       
   455         float startAngle = args[3]->toFloat(exec);
       
   456         float endAngle = args[4]->toFloat(exec);
       
   457         bool clockwise = args[5]->toBoolean(exec);
       
   458 
       
   459         imp->arc(x, y, radius, startAngle, endAngle, clockwise, ec);
       
   460         setDOMException(exec, ec);
       
   461         return jsUndefined();
       
   462     }
       
   463     case JSCanvasRenderingContext2D::FillFuncNum: {
       
   464 
       
   465         imp->fill();
       
   466         return jsUndefined();
       
   467     }
       
   468     case JSCanvasRenderingContext2D::StrokeFuncNum: {
       
   469 
       
   470         imp->stroke();
       
   471         return jsUndefined();
       
   472     }
       
   473     case JSCanvasRenderingContext2D::ClipFuncNum: {
       
   474 
       
   475         imp->clip();
       
   476         return jsUndefined();
       
   477     }
       
   478     case JSCanvasRenderingContext2D::SetAlphaFuncNum: {
       
   479         float alpha = args[0]->toFloat(exec);
       
   480 
       
   481         imp->setAlpha(alpha);
       
   482         return jsUndefined();
       
   483     }
       
   484     case JSCanvasRenderingContext2D::SetCompositeOperationFuncNum: {
       
   485         String compositeOperation = args[0]->toString(exec);
       
   486 
       
   487         imp->setCompositeOperation(compositeOperation);
       
   488         return jsUndefined();
       
   489     }
       
   490     case JSCanvasRenderingContext2D::SetLineWidthFuncNum: {
       
   491         float width = args[0]->toFloat(exec);
       
   492 
       
   493         imp->setLineWidth(width);
       
   494         return jsUndefined();
       
   495     }
       
   496     case JSCanvasRenderingContext2D::SetLineCapFuncNum: {
       
   497         String cap = args[0]->toString(exec);
       
   498 
       
   499         imp->setLineCap(cap);
       
   500         return jsUndefined();
       
   501     }
       
   502     case JSCanvasRenderingContext2D::SetLineJoinFuncNum: {
       
   503         String join = args[0]->toString(exec);
       
   504 
       
   505         imp->setLineJoin(join);
       
   506         return jsUndefined();
       
   507     }
       
   508     case JSCanvasRenderingContext2D::SetMiterLimitFuncNum: {
       
   509         float limit = args[0]->toFloat(exec);
       
   510 
       
   511         imp->setMiterLimit(limit);
       
   512         return jsUndefined();
       
   513     }
       
   514     case JSCanvasRenderingContext2D::ClearShadowFuncNum: {
       
   515 
       
   516         imp->clearShadow();
       
   517         return jsUndefined();
       
   518     }
       
   519     case JSCanvasRenderingContext2D::SetStrokeColorFuncNum: {
       
   520         return static_cast<JSCanvasRenderingContext2D*>(thisObj)->setStrokeColor(exec, args);
       
   521     }
       
   522     case JSCanvasRenderingContext2D::SetFillColorFuncNum: {
       
   523         return static_cast<JSCanvasRenderingContext2D*>(thisObj)->setFillColor(exec, args);
       
   524     }
       
   525     case JSCanvasRenderingContext2D::StrokeRectFuncNum: {
       
   526         return static_cast<JSCanvasRenderingContext2D*>(thisObj)->strokeRect(exec, args);
       
   527     }
       
   528     case JSCanvasRenderingContext2D::DrawImageFuncNum: {
       
   529         return static_cast<JSCanvasRenderingContext2D*>(thisObj)->drawImage(exec, args);
       
   530     }
       
   531     case JSCanvasRenderingContext2D::DrawImageFromRectFuncNum: {
       
   532         return static_cast<JSCanvasRenderingContext2D*>(thisObj)->drawImageFromRect(exec, args);
       
   533     }
       
   534     case JSCanvasRenderingContext2D::SetShadowFuncNum: {
       
   535         return static_cast<JSCanvasRenderingContext2D*>(thisObj)->setShadow(exec, args);
       
   536     }
       
   537     case JSCanvasRenderingContext2D::CreatePatternFuncNum: {
       
   538         return static_cast<JSCanvasRenderingContext2D*>(thisObj)->createPattern(exec, args);
       
   539     }
       
   540     }
       
   541     return 0;
       
   542 }
       
   543 KJS::JSValue* toJS(KJS::ExecState* exec, CanvasRenderingContext2D* obj)
       
   544 {
       
   545     return KJS::cacheDOMObject<CanvasRenderingContext2D, JSCanvasRenderingContext2D>(exec, obj);
       
   546 }
       
   547 CanvasRenderingContext2D* toCanvasRenderingContext2D(KJS::JSValue* val)
       
   548 {
       
   549     return val->isObject(&JSCanvasRenderingContext2D::info) ? static_cast<JSCanvasRenderingContext2D*>(val)->impl() : 0;
       
   550 }
       
   551 
       
   552 }