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"
31 #include "htmlevent.h"
33 WINE_DEFAULT_DEBUG_CHANNEL(mshtml
);
38 IHTMLImgElement IHTMLImgElement_iface
;
40 nsIDOMHTMLImageElement
*nsimg
;
43 static inline HTMLImgElement
*impl_from_IHTMLImgElement(IHTMLImgElement
*iface
)
45 return CONTAINING_RECORD(iface
, HTMLImgElement
, IHTMLImgElement_iface
);
48 static HRESULT WINAPI
HTMLImgElement_QueryInterface(IHTMLImgElement
*iface
, REFIID riid
, void **ppv
)
50 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
52 return IHTMLDOMNode_QueryInterface(&This
->element
.node
.IHTMLDOMNode_iface
, riid
, ppv
);
55 static ULONG WINAPI
HTMLImgElement_AddRef(IHTMLImgElement
*iface
)
57 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
59 return IHTMLDOMNode_AddRef(&This
->element
.node
.IHTMLDOMNode_iface
);
62 static ULONG WINAPI
HTMLImgElement_Release(IHTMLImgElement
*iface
)
64 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
66 return IHTMLDOMNode_Release(&This
->element
.node
.IHTMLDOMNode_iface
);
69 static HRESULT WINAPI
HTMLImgElement_GetTypeInfoCount(IHTMLImgElement
*iface
, UINT
*pctinfo
)
71 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
72 return IDispatchEx_GetTypeInfoCount(&This
->element
.node
.dispex
.IDispatchEx_iface
, pctinfo
);
75 static HRESULT WINAPI
HTMLImgElement_GetTypeInfo(IHTMLImgElement
*iface
, UINT iTInfo
,
76 LCID lcid
, ITypeInfo
**ppTInfo
)
78 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
79 return IDispatchEx_GetTypeInfo(&This
->element
.node
.dispex
.IDispatchEx_iface
, iTInfo
, lcid
,
83 static HRESULT WINAPI
HTMLImgElement_GetIDsOfNames(IHTMLImgElement
*iface
, REFIID riid
,
84 LPOLESTR
*rgszNames
, UINT cNames
,
85 LCID lcid
, DISPID
*rgDispId
)
87 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
88 return IDispatchEx_GetIDsOfNames(&This
->element
.node
.dispex
.IDispatchEx_iface
, riid
, rgszNames
,
89 cNames
, lcid
, rgDispId
);
92 static HRESULT WINAPI
HTMLImgElement_Invoke(IHTMLImgElement
*iface
, DISPID dispIdMember
,
93 REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
,
94 VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
96 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
97 return IDispatchEx_Invoke(&This
->element
.node
.dispex
.IDispatchEx_iface
, dispIdMember
, riid
,
98 lcid
, wFlags
, pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
101 static HRESULT WINAPI
HTMLImgElement_put_isMap(IHTMLImgElement
*iface
, VARIANT_BOOL v
)
103 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
104 FIXME("(%p)->(%x)\n", This
, v
);
108 static HRESULT WINAPI
HTMLImgElement_get_isMap(IHTMLImgElement
*iface
, VARIANT_BOOL
*p
)
110 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
111 FIXME("(%p)->(%p)\n", This
, p
);
115 static HRESULT WINAPI
HTMLImgElement_put_useMap(IHTMLImgElement
*iface
, BSTR v
)
117 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
118 FIXME("(%p)->(%s)\n", This
, debugstr_w(v
));
122 static HRESULT WINAPI
HTMLImgElement_get_useMap(IHTMLImgElement
*iface
, BSTR
*p
)
124 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
125 FIXME("(%p)->(%p)\n", This
, p
);
129 static HRESULT WINAPI
HTMLImgElement_get_mimeType(IHTMLImgElement
*iface
, BSTR
*p
)
131 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
132 FIXME("(%p)->(%p)\n", This
, p
);
136 static HRESULT WINAPI
HTMLImgElement_get_fileSize(IHTMLImgElement
*iface
, BSTR
*p
)
138 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
139 FIXME("(%p)->(%p)\n", This
, p
);
143 static HRESULT WINAPI
HTMLImgElement_get_fileCreatedDate(IHTMLImgElement
*iface
, BSTR
*p
)
145 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
146 FIXME("(%p)->(%p)\n", This
, p
);
150 static HRESULT WINAPI
HTMLImgElement_get_fileModifiedDate(IHTMLImgElement
*iface
, BSTR
*p
)
152 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
153 FIXME("(%p)->(%p)\n", This
, p
);
157 static HRESULT WINAPI
HTMLImgElement_get_fileUpdatedDate(IHTMLImgElement
*iface
, BSTR
*p
)
159 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
160 FIXME("(%p)->(%p)\n", This
, p
);
164 static HRESULT WINAPI
HTMLImgElement_get_protocol(IHTMLImgElement
*iface
, BSTR
*p
)
166 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
167 FIXME("(%p)->(%p)\n", This
, p
);
171 static HRESULT WINAPI
HTMLImgElement_get_href(IHTMLImgElement
*iface
, BSTR
*p
)
173 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
174 FIXME("(%p)->(%p)\n", This
, p
);
178 static HRESULT WINAPI
HTMLImgElement_get_nameProp(IHTMLImgElement
*iface
, BSTR
*p
)
180 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
181 FIXME("(%p)->(%p)\n", This
, p
);
185 static HRESULT WINAPI
HTMLImgElement_put_border(IHTMLImgElement
*iface
, VARIANT v
)
187 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
188 FIXME("(%p)->()\n", This
);
192 static HRESULT WINAPI
HTMLImgElement_get_border(IHTMLImgElement
*iface
, VARIANT
*p
)
194 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
195 FIXME("(%p)->(%p)\n", This
, p
);
199 static HRESULT WINAPI
HTMLImgElement_put_vspace(IHTMLImgElement
*iface
, LONG v
)
201 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
202 FIXME("(%p)->(%d)\n", This
, v
);
206 static HRESULT WINAPI
HTMLImgElement_get_vspace(IHTMLImgElement
*iface
, LONG
*p
)
208 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
209 FIXME("(%p)->(%p)\n", This
, p
);
213 static HRESULT WINAPI
HTMLImgElement_put_hspace(IHTMLImgElement
*iface
, LONG v
)
215 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
216 FIXME("(%p)->(%d)\n", This
, v
);
220 static HRESULT WINAPI
HTMLImgElement_get_hspace(IHTMLImgElement
*iface
, LONG
*p
)
222 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
223 FIXME("(%p)->(%p)\n", This
, p
);
227 static HRESULT WINAPI
HTMLImgElement_put_alt(IHTMLImgElement
*iface
, BSTR v
)
229 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
233 TRACE("(%p)->(%s)\n", This
, debugstr_w(v
));
235 nsAString_InitDepend(&alt_str
, v
);
236 nsres
= nsIDOMHTMLImageElement_SetAlt(This
->nsimg
, &alt_str
);
237 nsAString_Finish(&alt_str
);
239 ERR("SetAlt failed: %08x\n", nsres
);
244 static HRESULT WINAPI
HTMLImgElement_get_alt(IHTMLImgElement
*iface
, BSTR
*p
)
246 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
250 TRACE("(%p)->(%p)\n", This
, p
);
252 nsAString_Init(&alt_str
, NULL
);
253 nsres
= nsIDOMHTMLImageElement_GetAlt(This
->nsimg
, &alt_str
);
254 if(NS_SUCCEEDED(nsres
)) {
255 const PRUnichar
*alt
;
257 nsAString_GetData(&alt_str
, &alt
);
258 *p
= *alt
? SysAllocString(alt
) : NULL
;
260 ERR("GetAlt failed: %08x\n", nsres
);
262 nsAString_Finish(&alt_str
);
264 return NS_SUCCEEDED(nsres
) ? S_OK
: E_FAIL
;
267 static HRESULT WINAPI
HTMLImgElement_put_src(IHTMLImgElement
*iface
, BSTR v
)
269 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
273 TRACE("(%p)->(%s)\n", This
, debugstr_w(v
));
275 nsAString_InitDepend(&src_str
, v
);
276 nsres
= nsIDOMHTMLImageElement_SetSrc(This
->nsimg
, &src_str
);
277 nsAString_Finish(&src_str
);
279 ERR("SetSrc failed: %08x\n", nsres
);
284 static HRESULT WINAPI
HTMLImgElement_get_src(IHTMLImgElement
*iface
, BSTR
*p
)
286 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
287 const PRUnichar
*src
;
292 TRACE("(%p)->(%p)\n", This
, p
);
294 nsAString_Init(&src_str
, NULL
);
295 nsres
= nsIDOMHTMLImageElement_GetSrc(This
->nsimg
, &src_str
);
296 if(NS_FAILED(nsres
)) {
297 ERR("GetSrc failed: %08x\n", nsres
);
301 nsAString_GetData(&src_str
, &src
);
302 hres
= nsuri_to_url(src
, TRUE
, p
);
303 nsAString_Finish(&src_str
);
308 static HRESULT WINAPI
HTMLImgElement_put_lowsrc(IHTMLImgElement
*iface
, BSTR v
)
310 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
311 FIXME("(%p)->(%s)\n", This
, debugstr_w(v
));
315 static HRESULT WINAPI
HTMLImgElement_get_lowsrc(IHTMLImgElement
*iface
, BSTR
*p
)
317 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
318 FIXME("(%p)->(%p)\n", This
, p
);
322 static HRESULT WINAPI
HTMLImgElement_put_vrml(IHTMLImgElement
*iface
, BSTR v
)
324 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
325 FIXME("(%p)->(%s)\n", This
, debugstr_w(v
));
329 static HRESULT WINAPI
HTMLImgElement_get_vrml(IHTMLImgElement
*iface
, BSTR
*p
)
331 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
332 FIXME("(%p)->(%p)\n", This
, p
);
336 static HRESULT WINAPI
HTMLImgElement_put_dynsrc(IHTMLImgElement
*iface
, BSTR v
)
338 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
339 FIXME("(%p)->(%s)\n", This
, debugstr_w(v
));
343 static HRESULT WINAPI
HTMLImgElement_get_dynsrc(IHTMLImgElement
*iface
, BSTR
*p
)
345 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
346 FIXME("(%p)->(%p)\n", This
, p
);
350 static HRESULT WINAPI
HTMLImgElement_get_readyState(IHTMLImgElement
*iface
, BSTR
*p
)
352 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
353 FIXME("(%p)->(%p)\n", This
, p
);
357 static HRESULT WINAPI
HTMLImgElement_get_complete(IHTMLImgElement
*iface
, VARIANT_BOOL
*p
)
359 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
360 FIXME("(%p)->(%p)\n", This
, p
);
364 static HRESULT WINAPI
HTMLImgElement_put_loop(IHTMLImgElement
*iface
, VARIANT v
)
366 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
367 FIXME("(%p)->()\n", This
);
371 static HRESULT WINAPI
HTMLImgElement_get_loop(IHTMLImgElement
*iface
, VARIANT
*p
)
373 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
374 FIXME("(%p)->(%p)\n", This
, p
);
378 static HRESULT WINAPI
HTMLImgElement_put_align(IHTMLImgElement
*iface
, BSTR v
)
380 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
381 FIXME("(%p)->(%s)\n", This
, debugstr_w(v
));
385 static HRESULT WINAPI
HTMLImgElement_get_align(IHTMLImgElement
*iface
, BSTR
*p
)
387 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
388 FIXME("(%p)->(%p)\n", This
, p
);
392 static HRESULT WINAPI
HTMLImgElement_put_onload(IHTMLImgElement
*iface
, VARIANT v
)
394 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
396 TRACE("(%p)->(%s)\n", This
, debugstr_variant(&v
));
398 return set_node_event(&This
->element
.node
, EVENTID_LOAD
, &v
);
401 static HRESULT WINAPI
HTMLImgElement_get_onload(IHTMLImgElement
*iface
, VARIANT
*p
)
403 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
405 TRACE("(%p)->(%p)\n", This
, p
);
407 return get_node_event(&This
->element
.node
, EVENTID_LOAD
, p
);
410 static HRESULT WINAPI
HTMLImgElement_put_onerror(IHTMLImgElement
*iface
, VARIANT v
)
412 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
413 FIXME("(%p)->()\n", This
);
417 static HRESULT WINAPI
HTMLImgElement_get_onerror(IHTMLImgElement
*iface
, VARIANT
*p
)
419 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
420 FIXME("(%p)->(%p)\n", This
, p
);
424 static HRESULT WINAPI
HTMLImgElement_put_onabort(IHTMLImgElement
*iface
, VARIANT v
)
426 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
427 FIXME("(%p)->()\n", This
);
431 static HRESULT WINAPI
HTMLImgElement_get_onabort(IHTMLImgElement
*iface
, VARIANT
*p
)
433 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
434 FIXME("(%p)->(%p)\n", This
, p
);
438 static HRESULT WINAPI
HTMLImgElement_put_name(IHTMLImgElement
*iface
, BSTR v
)
440 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
441 FIXME("(%p)->(%s)\n", This
, debugstr_w(v
));
445 static HRESULT WINAPI
HTMLImgElement_get_name(IHTMLImgElement
*iface
, BSTR
*p
)
447 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
451 TRACE("(%p)->(%p)\n", This
, p
);
453 nsAString_Init(&strName
, NULL
);
454 nsres
= nsIDOMHTMLImageElement_GetName(This
->nsimg
, &strName
);
455 if(NS_SUCCEEDED(nsres
)) {
456 const PRUnichar
*str
;
458 nsAString_GetData(&strName
, &str
);
459 *p
= *str
? SysAllocString(str
) : NULL
;
461 ERR("GetName failed: %08x\n", nsres
);
463 nsAString_Finish(&strName
);
465 return NS_SUCCEEDED(nsres
) ? S_OK
: E_FAIL
;
468 static HRESULT WINAPI
HTMLImgElement_put_width(IHTMLImgElement
*iface
, LONG v
)
470 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
473 TRACE("(%p)->(%d)\n", This
, v
);
475 nsres
= nsIDOMHTMLImageElement_SetWidth(This
->nsimg
, v
);
476 if(NS_FAILED(nsres
)) {
477 ERR("SetWidth failed: %08x\n", nsres
);
484 static HRESULT WINAPI
HTMLImgElement_get_width(IHTMLImgElement
*iface
, LONG
*p
)
486 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
490 TRACE("(%p)->(%p)\n", This
, p
);
492 nsres
= nsIDOMHTMLImageElement_GetWidth(This
->nsimg
, &width
);
493 if(NS_FAILED(nsres
)) {
494 ERR("GetWidth failed: %08x\n", nsres
);
502 static HRESULT WINAPI
HTMLImgElement_put_height(IHTMLImgElement
*iface
, LONG v
)
504 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
507 TRACE("(%p)->(%d)\n", This
, v
);
509 nsres
= nsIDOMHTMLImageElement_SetHeight(This
->nsimg
, v
);
510 if(NS_FAILED(nsres
)) {
511 ERR("SetHeight failed: %08x\n", nsres
);
518 static HRESULT WINAPI
HTMLImgElement_get_height(IHTMLImgElement
*iface
, LONG
*p
)
520 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
524 TRACE("(%p)->(%p)\n", This
, p
);
526 nsres
= nsIDOMHTMLImageElement_GetHeight(This
->nsimg
, &height
);
527 if(NS_FAILED(nsres
)) {
528 ERR("GetHeight failed: %08x\n", nsres
);
536 static HRESULT WINAPI
HTMLImgElement_put_start(IHTMLImgElement
*iface
, BSTR v
)
538 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
539 FIXME("(%p)->()\n", This
);
543 static HRESULT WINAPI
HTMLImgElement_get_start(IHTMLImgElement
*iface
, BSTR
*p
)
545 HTMLImgElement
*This
= impl_from_IHTMLImgElement(iface
);
546 FIXME("(%p)->(%p)\n", This
, p
);
550 static const IHTMLImgElementVtbl HTMLImgElementVtbl
= {
551 HTMLImgElement_QueryInterface
,
552 HTMLImgElement_AddRef
,
553 HTMLImgElement_Release
,
554 HTMLImgElement_GetTypeInfoCount
,
555 HTMLImgElement_GetTypeInfo
,
556 HTMLImgElement_GetIDsOfNames
,
557 HTMLImgElement_Invoke
,
558 HTMLImgElement_put_isMap
,
559 HTMLImgElement_get_isMap
,
560 HTMLImgElement_put_useMap
,
561 HTMLImgElement_get_useMap
,
562 HTMLImgElement_get_mimeType
,
563 HTMLImgElement_get_fileSize
,
564 HTMLImgElement_get_fileCreatedDate
,
565 HTMLImgElement_get_fileModifiedDate
,
566 HTMLImgElement_get_fileUpdatedDate
,
567 HTMLImgElement_get_protocol
,
568 HTMLImgElement_get_href
,
569 HTMLImgElement_get_nameProp
,
570 HTMLImgElement_put_border
,
571 HTMLImgElement_get_border
,
572 HTMLImgElement_put_vspace
,
573 HTMLImgElement_get_vspace
,
574 HTMLImgElement_put_hspace
,
575 HTMLImgElement_get_hspace
,
576 HTMLImgElement_put_alt
,
577 HTMLImgElement_get_alt
,
578 HTMLImgElement_put_src
,
579 HTMLImgElement_get_src
,
580 HTMLImgElement_put_lowsrc
,
581 HTMLImgElement_get_lowsrc
,
582 HTMLImgElement_put_vrml
,
583 HTMLImgElement_get_vrml
,
584 HTMLImgElement_put_dynsrc
,
585 HTMLImgElement_get_dynsrc
,
586 HTMLImgElement_get_readyState
,
587 HTMLImgElement_get_complete
,
588 HTMLImgElement_put_loop
,
589 HTMLImgElement_get_loop
,
590 HTMLImgElement_put_align
,
591 HTMLImgElement_get_align
,
592 HTMLImgElement_put_onload
,
593 HTMLImgElement_get_onload
,
594 HTMLImgElement_put_onerror
,
595 HTMLImgElement_get_onerror
,
596 HTMLImgElement_put_onabort
,
597 HTMLImgElement_get_onabort
,
598 HTMLImgElement_put_name
,
599 HTMLImgElement_get_name
,
600 HTMLImgElement_put_width
,
601 HTMLImgElement_get_width
,
602 HTMLImgElement_put_height
,
603 HTMLImgElement_get_height
,
604 HTMLImgElement_put_start
,
605 HTMLImgElement_get_start
608 static inline HTMLImgElement
*impl_from_HTMLDOMNode(HTMLDOMNode
*iface
)
610 return CONTAINING_RECORD(iface
, HTMLImgElement
, element
.node
);
613 static HRESULT
HTMLImgElement_QI(HTMLDOMNode
*iface
, REFIID riid
, void **ppv
)
615 HTMLImgElement
*This
= impl_from_HTMLDOMNode(iface
);
619 if(IsEqualGUID(&IID_IHTMLImgElement
, riid
)) {
620 TRACE("(%p)->(IID_IHTMLImgElement %p)\n", This
, ppv
);
621 *ppv
= &This
->IHTMLImgElement_iface
;
623 return HTMLElement_QI(&This
->element
.node
, riid
, ppv
);
626 IUnknown_AddRef((IUnknown
*)*ppv
);
630 static void HTMLImgElement_destructor(HTMLDOMNode
*iface
)
632 HTMLImgElement
*This
= impl_from_HTMLDOMNode(iface
);
635 nsIDOMHTMLImageElement_Release(This
->nsimg
);
637 HTMLElement_destructor(&This
->element
.node
);
640 static HRESULT
HTMLImgElement_get_readystate(HTMLDOMNode
*iface
, BSTR
*p
)
642 HTMLImgElement
*This
= impl_from_HTMLDOMNode(iface
);
644 return IHTMLImgElement_get_readyState(&This
->IHTMLImgElement_iface
, p
);
647 static const NodeImplVtbl HTMLImgElementImplVtbl
= {
649 HTMLImgElement_destructor
,
656 HTMLImgElement_get_readystate
659 static const tid_t HTMLImgElement_iface_tids
[] = {
664 static dispex_static_data_t HTMLImgElement_dispex
= {
668 HTMLImgElement_iface_tids
671 HRESULT
HTMLImgElement_Create(HTMLDocumentNode
*doc
, nsIDOMHTMLElement
*nselem
, HTMLElement
**elem
)
676 ret
= heap_alloc_zero(sizeof(HTMLImgElement
));
678 return E_OUTOFMEMORY
;
680 ret
->IHTMLImgElement_iface
.lpVtbl
= &HTMLImgElementVtbl
;
681 ret
->element
.node
.vtbl
= &HTMLImgElementImplVtbl
;
683 nsres
= nsIDOMHTMLElement_QueryInterface(nselem
, &IID_nsIDOMHTMLImageElement
, (void**)&ret
->nsimg
);
684 if(NS_FAILED(nsres
)) {
685 ERR("Could not get nsIDOMHTMLImageElement: %08x\n", nsres
);
690 HTMLElement_Init(&ret
->element
, doc
, nselem
, &HTMLImgElement_dispex
);
692 *elem
= &ret
->element
;
696 static inline HTMLImageElementFactory
*impl_from_IHTMLImageElementFactory(IHTMLImageElementFactory
*iface
)
698 return CONTAINING_RECORD(iface
, HTMLImageElementFactory
, IHTMLImageElementFactory_iface
);
701 static HRESULT WINAPI
HTMLImageElementFactory_QueryInterface(IHTMLImageElementFactory
*iface
,
702 REFIID riid
, void **ppv
)
704 HTMLImageElementFactory
*This
= impl_from_IHTMLImageElementFactory(iface
);
708 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
709 TRACE("(%p)->(IID_Unknown %p)\n", This
, ppv
);
710 *ppv
= &This
->IHTMLImageElementFactory_iface
;
711 }else if(IsEqualGUID(&IID_IHTMLImageElementFactory
, riid
)) {
712 TRACE("(%p)->(IID_IHTMLImageElementFactory %p)\n", This
, ppv
);
713 *ppv
= &This
->IHTMLImageElementFactory_iface
;
714 }else if(dispex_query_interface(&This
->dispex
, riid
, ppv
))
715 return *ppv
? S_OK
: E_NOINTERFACE
;
718 IUnknown_AddRef((IUnknown
*)*ppv
);
722 WARN("(%p)->(%s %p)\n", This
, debugstr_guid(riid
), ppv
);
723 return E_NOINTERFACE
;
726 static ULONG WINAPI
HTMLImageElementFactory_AddRef(IHTMLImageElementFactory
*iface
)
728 HTMLImageElementFactory
*This
= impl_from_IHTMLImageElementFactory(iface
);
729 LONG ref
= InterlockedIncrement(&This
->ref
);
731 TRACE("(%p) ref=%d\n", This
, ref
);
736 static ULONG WINAPI
HTMLImageElementFactory_Release(IHTMLImageElementFactory
*iface
)
738 HTMLImageElementFactory
*This
= impl_from_IHTMLImageElementFactory(iface
);
739 LONG ref
= InterlockedDecrement(&This
->ref
);
741 TRACE("(%p) ref=%d\n", This
, ref
);
749 static HRESULT WINAPI
HTMLImageElementFactory_GetTypeInfoCount(IHTMLImageElementFactory
*iface
,
752 HTMLImageElementFactory
*This
= impl_from_IHTMLImageElementFactory(iface
);
753 FIXME("(%p)->(%p)\n", This
, pctinfo
);
757 static HRESULT WINAPI
HTMLImageElementFactory_GetTypeInfo(IHTMLImageElementFactory
*iface
,
758 UINT iTInfo
, LCID lcid
, ITypeInfo
**ppTInfo
)
760 HTMLImageElementFactory
*This
= impl_from_IHTMLImageElementFactory(iface
);
761 FIXME("(%p)->(%u %u %p)\n", This
, iTInfo
, lcid
, ppTInfo
);
765 static HRESULT WINAPI
HTMLImageElementFactory_GetIDsOfNames(IHTMLImageElementFactory
*iface
,
766 REFIID riid
, LPOLESTR
*rgszNames
, UINT cNames
, LCID lcid
,
769 HTMLImageElementFactory
*This
= impl_from_IHTMLImageElementFactory(iface
);
770 FIXME("(%p)->(%s %p %u %u %p)\n", This
, debugstr_guid(riid
), rgszNames
,
771 cNames
, lcid
, rgDispId
);
775 static HRESULT WINAPI
HTMLImageElementFactory_Invoke(IHTMLImageElementFactory
*iface
,
776 DISPID dispIdMember
, REFIID riid
, LCID lcid
, WORD wFlags
,
777 DISPPARAMS
*pDispParams
, VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
,
780 HTMLImageElementFactory
*This
= impl_from_IHTMLImageElementFactory(iface
);
781 FIXME("(%p)->(%d %s %d %d %p %p %p %p)\n", This
, dispIdMember
, debugstr_guid(riid
),
782 lcid
, wFlags
, pDispParams
, pVarResult
, pExcepInfo
, puArgErr
);
786 static LONG
var_to_size(const VARIANT
*v
)
797 hres
= VarI4FromStr(V_BSTR(v
), 0, 0, &ret
);
799 FIXME("VarI4FromStr failed: %08x\n", hres
);
805 FIXME("unsupported size %s\n", debugstr_variant(v
));
810 static HRESULT WINAPI
HTMLImageElementFactory_create(IHTMLImageElementFactory
*iface
,
811 VARIANT width
, VARIANT height
, IHTMLImgElement
**img_elem
)
813 HTMLImageElementFactory
*This
= impl_from_IHTMLImageElementFactory(iface
);
814 IHTMLImgElement
*img
;
816 nsIDOMHTMLElement
*nselem
;
820 static const PRUnichar imgW
[] = {'I','M','G',0};
822 TRACE("(%p)->(%s %s %p)\n", This
, debugstr_variant(&width
),
823 debugstr_variant(&height
), img_elem
);
825 if(!This
->window
|| !This
->window
->doc
) {
832 hres
= create_nselem(This
->window
->doc
, imgW
, &nselem
);
836 hres
= HTMLElement_Create(This
->window
->doc
, (nsIDOMNode
*)nselem
, FALSE
, &elem
);
837 nsIDOMHTMLElement_Release(nselem
);
839 ERR("HTMLElement_Create failed\n");
843 hres
= IHTMLElement_QueryInterface(&elem
->IHTMLElement_iface
, &IID_IHTMLImgElement
,
846 ERR("IHTMLElement_QueryInterface failed: 0x%08x\n", hres
);
850 l
= var_to_size(&width
);
852 IHTMLImgElement_put_width(img
, l
);
853 l
= var_to_size(&height
);
855 IHTMLImgElement_put_height(img
, l
);
861 static const IHTMLImageElementFactoryVtbl HTMLImageElementFactoryVtbl
= {
862 HTMLImageElementFactory_QueryInterface
,
863 HTMLImageElementFactory_AddRef
,
864 HTMLImageElementFactory_Release
,
865 HTMLImageElementFactory_GetTypeInfoCount
,
866 HTMLImageElementFactory_GetTypeInfo
,
867 HTMLImageElementFactory_GetIDsOfNames
,
868 HTMLImageElementFactory_Invoke
,
869 HTMLImageElementFactory_create
872 static inline HTMLImageElementFactory
*impl_from_DispatchEx(DispatchEx
*iface
)
874 return CONTAINING_RECORD(iface
, HTMLImageElementFactory
, dispex
);
877 static HRESULT
HTMLImageElementFactory_value(DispatchEx
*dispex
, LCID lcid
,
878 WORD flags
, DISPPARAMS
*params
, VARIANT
*res
, EXCEPINFO
*ei
,
879 IServiceProvider
*caller
)
881 HTMLImageElementFactory
*This
= impl_from_DispatchEx(dispex
);
882 IHTMLImgElement
*img
;
883 VARIANT empty
, *width
, *height
;
885 int argc
= params
->cArgs
- params
->cNamedArgs
;
889 V_VT(&empty
) = VT_EMPTY
;
891 width
= argc
>= 1 ? params
->rgvarg
+ (params
->cArgs
- 1) : &empty
;
892 height
= argc
>= 2 ? params
->rgvarg
+ (params
->cArgs
- 2) : &empty
;
894 hres
= IHTMLImageElementFactory_create(&This
->IHTMLImageElementFactory_iface
, *width
, *height
,
899 V_VT(res
) = VT_DISPATCH
;
900 V_DISPATCH(res
) = (IDispatch
*)img
;
905 static const tid_t HTMLImageElementFactory_iface_tids
[] = {
906 IHTMLImageElementFactory_tid
,
910 static const dispex_static_data_vtbl_t HTMLImageElementFactory_dispex_vtbl
= {
911 HTMLImageElementFactory_value
,
916 static dispex_static_data_t HTMLImageElementFactory_dispex
= {
917 &HTMLImageElementFactory_dispex_vtbl
,
918 IHTMLImageElementFactory_tid
,
920 HTMLImageElementFactory_iface_tids
923 HTMLImageElementFactory
*HTMLImageElementFactory_Create(HTMLWindow
*window
)
925 HTMLImageElementFactory
*ret
;
927 ret
= heap_alloc(sizeof(HTMLImageElementFactory
));
929 ret
->IHTMLImageElementFactory_iface
.lpVtbl
= &HTMLImageElementFactoryVtbl
;
931 ret
->window
= window
;
933 init_dispex(&ret
->dispex
, (IUnknown
*)&ret
->IHTMLImageElementFactory_iface
,
934 &HTMLImageElementFactory_dispex
);