71c8070fb1f9d9d612571606a8c64d2e67fdaf44
[WebKit-https.git] / WebCore / bindings / js / JSImageConstructor.cpp
1 /*
2  *  Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
3  *  Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
4  *
5  *  This library is free software; you can redistribute it and/or
6  *  modify it under the terms of the GNU Lesser 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  *  Lesser General Public License for more details.
14  *
15  *  You should have received a copy of the GNU Lesser General Public
16  *  License along with this library; if not, write to the Free Software
17  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
18  */
19
20 #include "config.h"
21 #include "JSImageConstructor.h"
22
23 #include "Document.h"
24 #include "HTMLImageElement.h"
25 #include "JSNode.h"
26
27 using namespace KJS;
28
29 namespace WebCore {
30
31 const ClassInfo JSImageConstructor::s_info = { "ImageConstructor", 0, 0, 0 };
32
33 JSImageConstructor::JSImageConstructor(ExecState* exec, Document* document)
34     : DOMObject(exec->lexicalGlobalObject()->objectPrototype())
35     , m_document(document)
36 {
37 }
38
39 static JSObject* constructImage(ExecState* exec, JSObject* constructor, const ArgList& args)
40 {
41     bool widthSet = false;
42     bool heightSet = false;
43     int width = 0;
44     int height = 0;
45     if (args.size() > 0) {
46         widthSet = true;
47         width = args[0]->toInt32(exec);
48     }
49     if (args.size() > 1) {
50         heightSet = true;
51         height = args[1]->toInt32(exec);
52     }
53
54     Document* document = static_cast<JSImageConstructor*>(constructor)->document();
55
56     // Calling toJS on the document causes the JS document wrapper to be
57     // added to the window object. This is done to ensure that JSDocument::mark
58     // will be called (which will cause the image element to be marked if necessary).
59     toJS(exec, document);
60
61     RefPtr<HTMLImageElement> image = new HTMLImageElement(document);
62     if (widthSet)
63         image->setWidth(width);
64     if (heightSet)
65         image->setHeight(height);
66     return static_cast<JSObject*>(toJS(exec, image.release()));
67 }
68
69 ConstructType JSImageConstructor::getConstructData(ConstructData& constructData)
70 {
71     constructData.native.function = constructImage;
72     return ConstructTypeNative;
73 }
74
75 } // namespace WebCore