2 * Copyright 2008 Jacek Caban for CodeWeavers
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
28 #include "wine/debug.h"
30 #include "mshtml_private.h"
32 WINE_DEFAULT_DEBUG_CHANNEL(mshtml
);
37 const IHTMLImgElementVtbl
*lpHTMLImgElementVtbl
;
39 nsIDOMHTMLImageElement
*nsimg
;
42 #define HTMLIMG(x) ((IHTMLImgElement*) &(x)->lpHTMLImgElementVtbl)
44 #define HTMLIMG_THIS(iface) DEFINE_THIS(HTMLImgElement, HTMLImgElement, iface)
46 static HRESULT WINAPI
HTMLImgElement_QueryInterface(IHTMLImgElement
*iface
, REFIID riid
, void **ppv
)
48 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
50 return IHTMLDOMNode_QueryInterface(HTMLDOMNODE(&This
->element
.node
), riid
, ppv
);
53 static ULONG WINAPI
HTMLImgElement_AddRef(IHTMLImgElement
*iface
)
55 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
57 return IHTMLDOMNode_AddRef(HTMLDOMNODE(&This
->element
.node
));
60 static ULONG WINAPI
HTMLImgElement_Release(IHTMLImgElement
*iface
)
62 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
64 return IHTMLDOMNode_Release(HTMLDOMNODE(&This
->element
.node
));
67 static HRESULT WINAPI
HTMLImgElement_GetTypeInfoCount(IHTMLImgElement
*iface
, UINT
*pctinfo
)
69 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
70 return IDispatchEx_GetTypeInfoCount(DISPATCHEX(&This
->element
.node
.dispex
), pctinfo
);
73 static HRESULT WINAPI
HTMLImgElement_GetTypeInfo(IHTMLImgElement
*iface
, UINT iTInfo
,
74 LCID lcid
, ITypeInfo
**ppTInfo
)
76 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
77 return IDispatchEx_GetTypeInfo(DISPATCHEX(&This
->element
.node
.dispex
), iTInfo
, lcid
, ppTInfo
);
80 static HRESULT WINAPI
HTMLImgElement_GetIDsOfNames(IHTMLImgElement
*iface
, REFIID riid
,
81 LPOLESTR
*rgszNames
, UINT cNames
,
82 LCID lcid
, DISPID
*rgDispId
)
84 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
85 return IDispatchEx_GetIDsOfNames(DISPATCHEX(&This
->element
.node
.dispex
), riid
, rgszNames
, cNames
, lcid
, rgDispId
);
88 static HRESULT WINAPI
HTMLImgElement_Invoke(IHTMLImgElement
*iface
, DISPID dispIdMember
,
89 REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
,
90 VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
92 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
93 return IDispatchEx_Invoke(DISPATCHEX(&This
->element
.node
.dispex
), dispIdMember
, riid
, lcid
, wFlags
, pDispParams
,
94 pVarResult
, pExcepInfo
, puArgErr
);
97 static HRESULT WINAPI
HTMLImgElement_put_isMap(IHTMLImgElement
*iface
, VARIANT_BOOL v
)
99 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
100 FIXME("(%p)->(%x)\n", This
, v
);
104 static HRESULT WINAPI
HTMLImgElement_get_isMap(IHTMLImgElement
*iface
, VARIANT_BOOL
*p
)
106 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
107 FIXME("(%p)->(%p)\n", This
, p
);
111 static HRESULT WINAPI
HTMLImgElement_put_useMap(IHTMLImgElement
*iface
, BSTR v
)
113 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
114 FIXME("(%p)->(%s)\n", This
, debugstr_w(v
));
118 static HRESULT WINAPI
HTMLImgElement_get_useMap(IHTMLImgElement
*iface
, BSTR
*p
)
120 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
121 FIXME("(%p)->(%p)\n", This
, p
);
125 static HRESULT WINAPI
HTMLImgElement_get_mimeType(IHTMLImgElement
*iface
, BSTR
*p
)
127 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
128 FIXME("(%p)->(%p)\n", This
, p
);
132 static HRESULT WINAPI
HTMLImgElement_get_fileSize(IHTMLImgElement
*iface
, BSTR
*p
)
134 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
135 FIXME("(%p)->(%p)\n", This
, p
);
139 static HRESULT WINAPI
HTMLImgElement_get_fileCreatedDate(IHTMLImgElement
*iface
, BSTR
*p
)
141 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
142 FIXME("(%p)->(%p)\n", This
, p
);
146 static HRESULT WINAPI
HTMLImgElement_get_fileModifiedDate(IHTMLImgElement
*iface
, BSTR
*p
)
148 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
149 FIXME("(%p)->(%p)\n", This
, p
);
153 static HRESULT WINAPI
HTMLImgElement_get_fileUpdatedDate(IHTMLImgElement
*iface
, BSTR
*p
)
155 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
156 FIXME("(%p)->(%p)\n", This
, p
);
160 static HRESULT WINAPI
HTMLImgElement_get_protocol(IHTMLImgElement
*iface
, BSTR
*p
)
162 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
163 FIXME("(%p)->(%p)\n", This
, p
);
167 static HRESULT WINAPI
HTMLImgElement_get_href(IHTMLImgElement
*iface
, BSTR
*p
)
169 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
170 FIXME("(%p)->(%p)\n", This
, p
);
174 static HRESULT WINAPI
HTMLImgElement_get_nameProp(IHTMLImgElement
*iface
, BSTR
*p
)
176 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
177 FIXME("(%p)->(%p)\n", This
, p
);
181 static HRESULT WINAPI
HTMLImgElement_put_border(IHTMLImgElement
*iface
, VARIANT v
)
183 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
184 FIXME("(%p)->()\n", This
);
188 static HRESULT WINAPI
HTMLImgElement_get_border(IHTMLImgElement
*iface
, VARIANT
*p
)
190 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
191 FIXME("(%p)->(%p)\n", This
, p
);
195 static HRESULT WINAPI
HTMLImgElement_put_vspace(IHTMLImgElement
*iface
, LONG v
)
197 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
198 FIXME("(%p)->(%d)\n", This
, v
);
202 static HRESULT WINAPI
HTMLImgElement_get_vspace(IHTMLImgElement
*iface
, LONG
*p
)
204 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
205 FIXME("(%p)->(%p)\n", This
, p
);
209 static HRESULT WINAPI
HTMLImgElement_put_hspace(IHTMLImgElement
*iface
, LONG v
)
211 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
212 FIXME("(%p)->(%d)\n", This
, v
);
216 static HRESULT WINAPI
HTMLImgElement_get_hspace(IHTMLImgElement
*iface
, LONG
*p
)
218 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
219 FIXME("(%p)->(%p)\n", This
, p
);
223 static HRESULT WINAPI
HTMLImgElement_put_alt(IHTMLImgElement
*iface
, BSTR v
)
225 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
229 TRACE("(%p)->(%s)\n", This
, debugstr_w(v
));
231 nsAString_InitDepend(&alt_str
, v
);
232 nsres
= nsIDOMHTMLImageElement_SetAlt(This
->nsimg
, &alt_str
);
233 nsAString_Finish(&alt_str
);
235 ERR("SetAlt failed: %08x\n", nsres
);
240 static HRESULT WINAPI
HTMLImgElement_get_alt(IHTMLImgElement
*iface
, BSTR
*p
)
242 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
246 TRACE("(%p)->(%p)\n", This
, p
);
248 nsAString_Init(&alt_str
, NULL
);
249 nsres
= nsIDOMHTMLImageElement_GetAlt(This
->nsimg
, &alt_str
);
250 if(NS_SUCCEEDED(nsres
)) {
251 const PRUnichar
*alt
;
253 nsAString_GetData(&alt_str
, &alt
);
254 *p
= *alt
? SysAllocString(alt
) : NULL
;
256 ERR("GetAlt failed: %08x\n", nsres
);
258 nsAString_Finish(&alt_str
);
260 return NS_SUCCEEDED(nsres
) ? S_OK
: E_FAIL
;
263 static HRESULT WINAPI
HTMLImgElement_put_src(IHTMLImgElement
*iface
, BSTR v
)
265 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
269 TRACE("(%p)->(%s)\n", This
, debugstr_w(v
));
271 nsAString_InitDepend(&src_str
, v
);
272 nsres
= nsIDOMHTMLImageElement_SetSrc(This
->nsimg
, &src_str
);
273 nsAString_Finish(&src_str
);
275 ERR("SetSrc failed: %08x\n", nsres
);
280 static HRESULT WINAPI
HTMLImgElement_get_src(IHTMLImgElement
*iface
, BSTR
*p
)
282 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
283 const PRUnichar
*src
;
288 TRACE("(%p)->(%p)\n", This
, p
);
290 nsAString_Init(&src_str
, NULL
);
291 nsres
= nsIDOMHTMLImageElement_GetSrc(This
->nsimg
, &src_str
);
292 if(NS_FAILED(nsres
)) {
293 ERR("GetSrc failed: %08x\n", nsres
);
297 nsAString_GetData(&src_str
, &src
);
298 hres
= nsuri_to_url(src
, TRUE
, p
);
299 nsAString_Finish(&src_str
);
304 static HRESULT WINAPI
HTMLImgElement_put_lowsrc(IHTMLImgElement
*iface
, BSTR v
)
306 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
307 FIXME("(%p)->(%s)\n", This
, debugstr_w(v
));
311 static HRESULT WINAPI
HTMLImgElement_get_lowsrc(IHTMLImgElement
*iface
, BSTR
*p
)
313 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
314 FIXME("(%p)->(%p)\n", This
, p
);
318 static HRESULT WINAPI
HTMLImgElement_put_vrml(IHTMLImgElement
*iface
, BSTR v
)
320 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
321 FIXME("(%p)->(%s)\n", This
, debugstr_w(v
));
325 static HRESULT WINAPI
HTMLImgElement_get_vrml(IHTMLImgElement
*iface
, BSTR
*p
)
327 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
328 FIXME("(%p)->(%p)\n", This
, p
);
332 static HRESULT WINAPI
HTMLImgElement_put_dynsrc(IHTMLImgElement
*iface
, BSTR v
)
334 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
335 FIXME("(%p)->(%s)\n", This
, debugstr_w(v
));
339 static HRESULT WINAPI
HTMLImgElement_get_dynsrc(IHTMLImgElement
*iface
, BSTR
*p
)
341 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
342 FIXME("(%p)->(%p)\n", This
, p
);
346 static HRESULT WINAPI
HTMLImgElement_get_readyState(IHTMLImgElement
*iface
, BSTR
*p
)
348 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
349 FIXME("(%p)->(%p)\n", This
, p
);
353 static HRESULT WINAPI
HTMLImgElement_get_complete(IHTMLImgElement
*iface
, VARIANT_BOOL
*p
)
355 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
356 FIXME("(%p)->(%p)\n", This
, p
);
360 static HRESULT WINAPI
HTMLImgElement_put_loop(IHTMLImgElement
*iface
, VARIANT v
)
362 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
363 FIXME("(%p)->()\n", This
);
367 static HRESULT WINAPI
HTMLImgElement_get_loop(IHTMLImgElement
*iface
, VARIANT
*p
)
369 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
370 FIXME("(%p)->(%p)\n", This
, p
);
374 static HRESULT WINAPI
HTMLImgElement_put_align(IHTMLImgElement
*iface
, BSTR v
)
376 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
377 FIXME("(%p)->(%s)\n", This
, debugstr_w(v
));
381 static HRESULT WINAPI
HTMLImgElement_get_align(IHTMLImgElement
*iface
, BSTR
*p
)
383 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
384 FIXME("(%p)->(%p)\n", This
, p
);
388 static HRESULT WINAPI
HTMLImgElement_put_onload(IHTMLImgElement
*iface
, VARIANT v
)
390 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
391 FIXME("(%p)->()\n", This
);
395 static HRESULT WINAPI
HTMLImgElement_get_onload(IHTMLImgElement
*iface
, VARIANT
*p
)
397 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
398 FIXME("(%p)->(%p)\n", This
, p
);
402 static HRESULT WINAPI
HTMLImgElement_put_onerror(IHTMLImgElement
*iface
, VARIANT v
)
404 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
405 FIXME("(%p)->()\n", This
);
409 static HRESULT WINAPI
HTMLImgElement_get_onerror(IHTMLImgElement
*iface
, VARIANT
*p
)
411 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
412 FIXME("(%p)->(%p)\n", This
, p
);
416 static HRESULT WINAPI
HTMLImgElement_put_onabort(IHTMLImgElement
*iface
, VARIANT v
)
418 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
419 FIXME("(%p)->()\n", This
);
423 static HRESULT WINAPI
HTMLImgElement_get_onabort(IHTMLImgElement
*iface
, VARIANT
*p
)
425 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
426 FIXME("(%p)->(%p)\n", This
, p
);
430 static HRESULT WINAPI
HTMLImgElement_put_name(IHTMLImgElement
*iface
, BSTR v
)
432 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
433 FIXME("(%p)->(%s)\n", This
, debugstr_w(v
));
437 static HRESULT WINAPI
HTMLImgElement_get_name(IHTMLImgElement
*iface
, BSTR
*p
)
439 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
443 TRACE("(%p)->(%p)\n", This
, p
);
445 nsAString_Init(&strName
, NULL
);
446 nsres
= nsIDOMHTMLImageElement_GetName(This
->nsimg
, &strName
);
447 if(NS_SUCCEEDED(nsres
)) {
448 const PRUnichar
*str
;
450 nsAString_GetData(&strName
, &str
);
451 *p
= *str
? SysAllocString(str
) : NULL
;
453 ERR("GetName failed: %08x\n", nsres
);
455 nsAString_Finish(&strName
);
457 return NS_SUCCEEDED(nsres
) ? S_OK
: E_FAIL
;
460 static HRESULT WINAPI
HTMLImgElement_put_width(IHTMLImgElement
*iface
, LONG v
)
462 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
465 TRACE("(%p)->(%d)\n", This
, v
);
467 nsres
= nsIDOMHTMLImageElement_SetWidth(This
->nsimg
, v
);
468 if(NS_FAILED(nsres
)) {
469 ERR("SetWidth failed: %08x\n", nsres
);
476 static HRESULT WINAPI
HTMLImgElement_get_width(IHTMLImgElement
*iface
, LONG
*p
)
478 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
482 TRACE("(%p)->(%p)\n", This
, p
);
484 nsres
= nsIDOMHTMLImageElement_GetWidth(This
->nsimg
, &width
);
485 if(NS_FAILED(nsres
)) {
486 ERR("GetWidth failed: %08x\n", nsres
);
494 static HRESULT WINAPI
HTMLImgElement_put_height(IHTMLImgElement
*iface
, LONG v
)
496 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
499 TRACE("(%p)->(%d)\n", This
, v
);
501 nsres
= nsIDOMHTMLImageElement_SetHeight(This
->nsimg
, v
);
502 if(NS_FAILED(nsres
)) {
503 ERR("SetHeight failed: %08x\n", nsres
);
510 static HRESULT WINAPI
HTMLImgElement_get_height(IHTMLImgElement
*iface
, LONG
*p
)
512 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
516 TRACE("(%p)->(%p)\n", This
, p
);
518 nsres
= nsIDOMHTMLImageElement_GetHeight(This
->nsimg
, &height
);
519 if(NS_FAILED(nsres
)) {
520 ERR("GetHeight failed: %08x\n", nsres
);
528 static HRESULT WINAPI
HTMLImgElement_put_start(IHTMLImgElement
*iface
, BSTR v
)
530 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
531 FIXME("(%p)->()\n", This
);
535 static HRESULT WINAPI
HTMLImgElement_get_start(IHTMLImgElement
*iface
, BSTR
*p
)
537 HTMLImgElement
*This
= HTMLIMG_THIS(iface
);
538 FIXME("(%p)->(%p)\n", This
, p
);
544 static const IHTMLImgElementVtbl HTMLImgElementVtbl
= {
545 HTMLImgElement_QueryInterface
,
546 HTMLImgElement_AddRef
,
547 HTMLImgElement_Release
,
548 HTMLImgElement_GetTypeInfoCount
,
549 HTMLImgElement_GetTypeInfo
,
550 HTMLImgElement_GetIDsOfNames
,
551 HTMLImgElement_Invoke
,
552 HTMLImgElement_put_isMap
,
553 HTMLImgElement_get_isMap
,
554 HTMLImgElement_put_useMap
,
555 HTMLImgElement_get_useMap
,
556 HTMLImgElement_get_mimeType
,
557 HTMLImgElement_get_fileSize
,
558 HTMLImgElement_get_fileCreatedDate
,
559 HTMLImgElement_get_fileModifiedDate
,
560 HTMLImgElement_get_fileUpdatedDate
,
561 HTMLImgElement_get_protocol
,
562 HTMLImgElement_get_href
,
563 HTMLImgElement_get_nameProp
,
564 HTMLImgElement_put_border
,
565 HTMLImgElement_get_border
,
566 HTMLImgElement_put_vspace
,
567 HTMLImgElement_get_vspace
,
568 HTMLImgElement_put_hspace
,
569 HTMLImgElement_get_hspace
,
570 HTMLImgElement_put_alt
,
571 HTMLImgElement_get_alt
,
572 HTMLImgElement_put_src
,
573 HTMLImgElement_get_src
,
574 HTMLImgElement_put_lowsrc
,
575 HTMLImgElement_get_lowsrc
,
576 HTMLImgElement_put_vrml
,
577 HTMLImgElement_get_vrml
,
578 HTMLImgElement_put_dynsrc
,
579 HTMLImgElement_get_dynsrc
,
580 HTMLImgElement_get_readyState
,
581 HTMLImgElement_get_complete
,
582 HTMLImgElement_put_loop
,
583 HTMLImgElement_get_loop
,
584 HTMLImgElement_put_align
,
585 HTMLImgElement_get_align
,
586 HTMLImgElement_put_onload
,
587 HTMLImgElement_get_onload
,
588 HTMLImgElement_put_onerror
,
589 HTMLImgElement_get_onerror
,
590 HTMLImgElement_put_onabort
,
591 HTMLImgElement_get_onabort
,
592 HTMLImgElement_put_name
,
593 HTMLImgElement_get_name
,
594 HTMLImgElement_put_width
,
595 HTMLImgElement_get_width
,
596 HTMLImgElement_put_height
,
597 HTMLImgElement_get_height
,
598 HTMLImgElement_put_start
,
599 HTMLImgElement_get_start
602 #define HTMLIMG_NODE_THIS(iface) DEFINE_THIS2(HTMLImgElement, element.node, iface)
604 static HRESULT
HTMLImgElement_QI(HTMLDOMNode
*iface
, REFIID riid
, void **ppv
)
606 HTMLImgElement
*This
= HTMLIMG_NODE_THIS(iface
);
610 if(IsEqualGUID(&IID_IHTMLImgElement
, riid
)) {
611 TRACE("(%p)->(IID_IHTMLImgElement %p)\n", This
, ppv
);
612 *ppv
= HTMLIMG(This
);
614 return HTMLElement_QI(&This
->element
.node
, riid
, ppv
);
617 IUnknown_AddRef((IUnknown
*)*ppv
);
621 static void HTMLImgElement_destructor(HTMLDOMNode
*iface
)
623 HTMLImgElement
*This
= HTMLIMG_NODE_THIS(iface
);
626 nsIDOMHTMLImageElement_Release(This
->nsimg
);
628 HTMLElement_destructor(&This
->element
.node
);
631 static HRESULT
HTMLImgElement_get_readystate(HTMLDOMNode
*iface
, BSTR
*p
)
633 HTMLImgElement
*This
= HTMLIMG_NODE_THIS(iface
);
635 return IHTMLImgElement_get_readyState(HTMLIMG(This
), p
);
638 #undef HTMLIMG_NODE_THIS
640 static const NodeImplVtbl HTMLImgElementImplVtbl
= {
642 HTMLImgElement_destructor
,
648 HTMLImgElement_get_readystate
651 static const tid_t HTMLImgElement_iface_tids
[] = {
656 static dispex_static_data_t HTMLImgElement_dispex
= {
660 HTMLImgElement_iface_tids
663 HTMLElement
*HTMLImgElement_Create(HTMLDocumentNode
*doc
, nsIDOMHTMLElement
*nselem
)
665 HTMLImgElement
*ret
= heap_alloc_zero(sizeof(HTMLImgElement
));
668 ret
->lpHTMLImgElementVtbl
= &HTMLImgElementVtbl
;
669 ret
->element
.node
.vtbl
= &HTMLImgElementImplVtbl
;
671 nsres
= nsIDOMHTMLElement_QueryInterface(nselem
, &IID_nsIDOMHTMLImageElement
, (void**)&ret
->nsimg
);
673 ERR("Could not get nsIDOMHTMLImageElement: %08x\n", nsres
);
675 HTMLElement_Init(&ret
->element
, doc
, nselem
, &HTMLImgElement_dispex
);
677 return &ret
->element
;
680 #define HTMLIMGFACTORY_THIS(iface) DEFINE_THIS(HTMLImageElementFactory, HTMLImageElementFactory, iface)
682 static HRESULT WINAPI
HTMLImageElementFactory_QueryInterface(IHTMLImageElementFactory
*iface
,
683 REFIID riid
, void **ppv
)
685 HTMLImageElementFactory
*This
= HTMLIMGFACTORY_THIS(iface
);
689 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
690 TRACE("(%p)->(IID_Unknown %p)\n", This
, ppv
);
691 *ppv
= HTMLIMGFACTORY(This
);
692 }else if(IsEqualGUID(&IID_IHTMLImageElementFactory
, riid
)) {
693 TRACE("(%p)->(IID_IHTMLImageElementFactory %p)\n", This
, ppv
);
694 *ppv
= HTMLIMGFACTORY(This
);
695 }else if(dispex_query_interface(&This
->dispex
, riid
, ppv
))
696 return *ppv
? S_OK
: E_NOINTERFACE
;
699 IUnknown_AddRef((IUnknown
*)*ppv
);
703 WARN("(%p)->(%s %p)\n", This
, debugstr_guid(riid
), ppv
);
704 return E_NOINTERFACE
;
707 static ULONG WINAPI
HTMLImageElementFactory_AddRef(IHTMLImageElementFactory
*iface
)
709 HTMLImageElementFactory
*This
= HTMLIMGFACTORY_THIS(iface
);
710 LONG ref
= InterlockedIncrement(&This
->ref
);
712 TRACE("(%p) ref=%d\n", This
, ref
);
717 static ULONG WINAPI
HTMLImageElementFactory_Release(IHTMLImageElementFactory
*iface
)
719 HTMLImageElementFactory
*This
= HTMLIMGFACTORY_THIS(iface
);
720 LONG ref
= InterlockedDecrement(&This
->ref
);
722 TRACE("(%p) ref=%d\n", This
, ref
);
730 static HRESULT WINAPI
HTMLImageElementFactory_GetTypeInfoCount(IHTMLImageElementFactory
*iface
,
733 HTMLImageElementFactory
*This
= HTMLIMGFACTORY_THIS(iface
);
734 FIXME("(%p)->(%p)\n", This
, pctinfo
);
738 static HRESULT WINAPI
HTMLImageElementFactory_GetTypeInfo(IHTMLImageElementFactory
*iface
,
739 UINT iTInfo
, LCID lcid
, ITypeInfo
**ppTInfo
)
741 HTMLImageElementFactory
*This
= HTMLIMGFACTORY_THIS(iface
);
742 FIXME("(%p)->(%u %u %p)\n", This
, iTInfo
, lcid
, ppTInfo
);
746 static HRESULT WINAPI
HTMLImageElementFactory_GetIDsOfNames(IHTMLImageElementFactory
*iface
,
747 REFIID riid
, LPOLESTR
*rgszNames
, UINT cNames
, LCID lcid
,
750 HTMLImageElementFactory
*This
= HTMLIMGFACTORY_THIS(iface
);
751 FIXME("(%p)->(%s %p %u %u %p)\n", This
, debugstr_guid(riid
), rgszNames
,
752 cNames
, lcid
, rgDispId
);
756 static HRESULT WINAPI
HTMLImageElementFactory_Invoke(IHTMLImageElementFactory
*iface
,
757 DISPID dispIdMember
, REFIID riid
, LCID lcid
, WORD wFlags
,
758 DISPPARAMS
*pDispParams
, VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
,
761 HTMLImageElementFactory
*This
= HTMLIMGFACTORY_THIS(iface
);
762 FIXME("(%p)->(%d %s %d %d %p %p %p %p)\n", This
, dispIdMember
, debugstr_guid(riid
),
763 lcid
, wFlags
, pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
767 static LONG
var_to_size(const VARIANT
*v
)
778 hres
= VarI4FromStr(V_BSTR(v
), 0, 0, &ret
);
780 FIXME("VarI4FromStr failed: %08x\n", hres
);
786 FIXME("unsupported size %s\n", debugstr_variant(v
));
791 static HRESULT WINAPI
HTMLImageElementFactory_create(IHTMLImageElementFactory
*iface
,
792 VARIANT width
, VARIANT height
, IHTMLImgElement
**img_elem
)
794 HTMLImageElementFactory
*This
= HTMLIMGFACTORY_THIS(iface
);
795 IHTMLImgElement
*img
;
797 nsIDOMHTMLElement
*nselem
;
801 static const PRUnichar imgW
[] = {'I','M','G',0};
803 TRACE("(%p)->(%s %s %p)\n", This
, debugstr_variant(&width
),
804 debugstr_variant(&height
), img_elem
);
806 if(!This
->window
|| !This
->window
->doc
) {
813 hres
= create_nselem(This
->window
->doc
, imgW
, &nselem
);
817 elem
= HTMLElement_Create(This
->window
->doc
, (nsIDOMNode
*)nselem
, FALSE
);
819 ERR("HTMLElement_Create failed\n");
823 hres
= IHTMLElement_QueryInterface(HTMLELEM(elem
), &IID_IHTMLImgElement
, (void**)&img
);
825 ERR("IHTMLElement_QueryInterface failed: 0x%08x\n", hres
);
829 nsIDOMHTMLElement_Release(nselem
);
831 l
= var_to_size(&width
);
833 IHTMLImgElement_put_width(img
, l
);
834 l
= var_to_size(&height
);
836 IHTMLImgElement_put_height(img
, l
);
842 static HRESULT
HTMLImageElementFactory_value(IUnknown
*iface
, LCID lcid
,
843 WORD flags
, DISPPARAMS
*params
, VARIANT
*res
, EXCEPINFO
*ei
,
844 IServiceProvider
*caller
)
846 HTMLImageElementFactory
*This
= HTMLIMGFACTORY_THIS(iface
);
847 IHTMLImgElement
*img
;
848 VARIANT empty
, *width
, *height
;
850 int argc
= params
->cArgs
- params
->cNamedArgs
;
854 V_VT(&empty
) = VT_EMPTY
;
856 width
= argc
>= 1 ? params
->rgvarg
+ (params
->cArgs
- 1) : &empty
;
857 height
= argc
>= 2 ? params
->rgvarg
+ (params
->cArgs
- 2) : &empty
;
859 hres
= IHTMLImageElementFactory_create(HTMLIMGFACTORY(This
), *width
, *height
, &img
);
863 V_VT(res
) = VT_DISPATCH
;
864 V_DISPATCH(res
) = (IDispatch
*)img
;
869 #undef HTMLIMGFACTORY_THIS
871 static const IHTMLImageElementFactoryVtbl HTMLImageElementFactoryVtbl
= {
872 HTMLImageElementFactory_QueryInterface
,
873 HTMLImageElementFactory_AddRef
,
874 HTMLImageElementFactory_Release
,
875 HTMLImageElementFactory_GetTypeInfoCount
,
876 HTMLImageElementFactory_GetTypeInfo
,
877 HTMLImageElementFactory_GetIDsOfNames
,
878 HTMLImageElementFactory_Invoke
,
879 HTMLImageElementFactory_create
882 static const tid_t HTMLImageElementFactory_iface_tids
[] = {
883 IHTMLImageElementFactory_tid
,
887 static const dispex_static_data_vtbl_t HTMLImageElementFactory_dispex_vtbl
= {
888 HTMLImageElementFactory_value
,
893 static dispex_static_data_t HTMLImageElementFactory_dispex
= {
894 &HTMLImageElementFactory_dispex_vtbl
,
895 IHTMLImageElementFactory_tid
,
897 HTMLImageElementFactory_iface_tids
900 HTMLImageElementFactory
*HTMLImageElementFactory_Create(HTMLWindow
*window
)
902 HTMLImageElementFactory
*ret
;
904 ret
= heap_alloc(sizeof(HTMLImageElementFactory
));
906 ret
->lpHTMLImageElementFactoryVtbl
= &HTMLImageElementFactoryVtbl
;
908 ret
->window
= window
;
910 init_dispex(&ret
->dispex
, (IUnknown
*)HTMLIMGFACTORY(ret
), &HTMLImageElementFactory_dispex
);