static void init_svg_element(SVGElement *svg_element, HTMLDocumentNode *doc, nsIDOMSVGElement *nselem) { if(!svg_element->element.node.vtbl) svg_element->element.node.vtbl = &SVGElementImplVtbl; svg_element->ISVGElement_iface.lpVtbl = &SVGElementVtbl; HTMLElement_Init(&svg_element->element, doc, (nsIDOMElement*)nselem, NULL); }
void HTMLTextContainer_Init(HTMLTextContainer *This, HTMLDocumentNode *doc, nsIDOMHTMLElement *nselem, dispex_static_data_t *dispex_data) { This->IHTMLTextContainer_iface.lpVtbl = &HTMLTextContainerVtbl; HTMLElement_Init(&This->element, doc, nselem, dispex_data); }
HRESULT HTMLSelectElement_Create(HTMLDocumentNode *doc, nsIDOMHTMLElement *nselem, HTMLElement **elem) { HTMLSelectElement *ret; nsresult nsres; ret = heap_alloc_zero(sizeof(HTMLSelectElement)); if(!ret) return E_OUTOFMEMORY; ret->IHTMLSelectElement_iface.lpVtbl = &HTMLSelectElementVtbl; ret->element.node.vtbl = &HTMLSelectElementImplVtbl; nsres = nsIDOMHTMLElement_QueryInterface(nselem, &IID_nsIDOMHTMLSelectElement, (void**)&ret->nsselect); if(NS_FAILED(nsres)) { ERR("Could not get nsIDOMHTMLSelectElement interfce: %08x\n", nsres); heap_free(ret); return E_FAIL; } HTMLElement_Init(&ret->element, doc, nselem, &HTMLSelectElement_dispex); *elem = &ret->element; return S_OK; }
HRESULT HTMLTable_Create(HTMLDocumentNode *doc, nsIDOMHTMLElement *nselem, HTMLElement **elem) { HTMLTable *ret; nsresult nsres; ret = heap_alloc_zero(sizeof(HTMLTable)); if(!ret) return E_OUTOFMEMORY; ret->element.node.vtbl = &HTMLTableImplVtbl; ret->IHTMLTable_iface.lpVtbl = &HTMLTableVtbl; ret->IHTMLTable2_iface.lpVtbl = &HTMLTable2Vtbl; ret->IHTMLTable3_iface.lpVtbl = &HTMLTable3Vtbl; HTMLElement_Init(&ret->element, doc, nselem, &HTMLTable_dispex); nsres = nsIDOMHTMLElement_QueryInterface(nselem, &IID_nsIDOMHTMLTableElement, (void**)&ret->nstable); /* Share the reference with nsnode */ assert(nsres == NS_OK && (nsIDOMNode*)ret->nstable == ret->element.node.nsnode); nsIDOMNode_Release(ret->element.node.nsnode); *elem = &ret->element; return S_OK; }
void HTMLTextContainer_Init(HTMLTextContainer *This) { HTMLElement_Init(&This->element); This->lpHTMLTextContainerVtbl = &HTMLTextContainerVtbl; ConnectionPoint_Init(&This->cp, &This->element.cp_container, &DIID_HTMLTextContainerEvents); }
void HTMLTextContainer_Init(HTMLTextContainer *This, HTMLDocumentNode *doc, nsIDOMHTMLElement *nselem, dispex_static_data_t *dispex_data) { This->lpHTMLTextContainerVtbl = &HTMLTextContainerVtbl; HTMLElement_Init(&This->element, doc, nselem, dispex_data); ConnectionPoint_Init(&This->cp, &This->element.cp_container, &DIID_HTMLTextContainerEvents, NULL); }
HTMLElement *HTMLObjectElement_Create(HTMLDocumentNode *doc, nsIDOMHTMLElement *nselem) { HTMLObjectElement *ret = heap_alloc_zero(sizeof(*ret)); ret->lpIHTMLObjectElementVtbl = &HTMLObjectElementVtbl; ret->element.node.vtbl = &HTMLObjectElementImplVtbl; HTMLElement_Init(&ret->element, doc, nselem, &HTMLObjectElement_dispex); return &ret->element; }
HTMLElement *HTMLCommentElement_Create(HTMLDocument *doc, nsIDOMNode *nsnode) { HTMLCommentElement *ret = heap_alloc_zero(sizeof(*ret)); ret->element.node.vtbl = &HTMLCommentElementImplVtbl; ret->lpIHTMLCommentElementVtbl = &HTMLCommentElementVtbl; init_dispex(&ret->element.node.dispex, (IUnknown*)HTMLCOMMENT(ret), &HTMLCommentElement_dispex); HTMLElement_Init(&ret->element); HTMLDOMNode_Init(doc, &ret->element.node, nsnode); return &ret->element; }
HTMLElement *HTMLTable_Create(nsIDOMHTMLElement *nselem) { HTMLTable *ret = heap_alloc_zero(sizeof(HTMLTable)); HTMLElement_Init(&ret->element); ret->element.node.vtbl = &HTMLTableImplVtbl; ret->lpHTMLTableVtbl = &HTMLTableVtbl; ConnectionPoint_Init(&ret->cp, &ret->element.cp_container, &DIID_HTMLTableEvents); return &ret->element; }
HRESULT HTMLEmbedElement_Create(HTMLDocumentNode *doc, nsIDOMHTMLElement *nselem, HTMLElement **elem) { HTMLEmbedElement *ret; ret = heap_alloc_zero(sizeof(*ret)); if(!ret) return E_OUTOFMEMORY; ret->IHTMLEmbedElement_iface.lpVtbl = &HTMLEmbedElementVtbl; ret->element.node.vtbl = &HTMLEmbedElementImplVtbl; HTMLElement_Init(&ret->element, doc, nselem, &HTMLEmbedElement_dispex); *elem = &ret->element; return S_OK; }
HTMLElement *HTMLFormElement_Create(HTMLDocumentNode *doc, nsIDOMHTMLElement *nselem) { HTMLFormElement *ret = heap_alloc_zero(sizeof(HTMLFormElement)); nsresult nsres; ret->lpHTMLFormElementVtbl = &HTMLFormElementVtbl; ret->element.node.vtbl = &HTMLFormElementImplVtbl; HTMLElement_Init(&ret->element, doc, nselem, &HTMLFormElement_dispex); nsres = nsIDOMHTMLElement_QueryInterface(nselem, &IID_nsIDOMHTMLFormElement, (void**)&ret->nsform); if(NS_FAILED(nsres)) ERR("Could not get nsIDOMHTMLFormElement interface: %08x\n", nsres); return &ret->element; }
HTMLElement *HTMLImgElement_Create(nsIDOMHTMLElement *nselem) { HTMLImgElement *ret = heap_alloc_zero(sizeof(HTMLImgElement)); nsresult nsres; ret->lpHTMLImgElementVtbl = &HTMLImgElementVtbl; ret->element.node.vtbl = &HTMLImgElementImplVtbl; nsres = nsIDOMHTMLElement_QueryInterface(nselem, &IID_nsIDOMHTMLImageElement, (void**)&ret->nsimg); if(NS_FAILED(nsres)) ERR("Could not get nsIDOMHTMLImageElement: %08x\n", nsres); init_dispex(&ret->element.node.dispex, (IUnknown*)HTMLIMG(ret), &HTMLImgElement_dispex); HTMLElement_Init(&ret->element); return &ret->element; }
void HTMLFrameBase_Init(HTMLFrameBase *This, HTMLDocumentNode *doc, nsIDOMHTMLElement *nselem, dispex_static_data_t *dispex_data) { nsresult nsres; This->IHTMLFrameBase_iface.lpVtbl = &HTMLFrameBaseVtbl; This->IHTMLFrameBase2_iface.lpVtbl = &HTMLFrameBase2Vtbl; HTMLElement_Init(&This->element, doc, nselem, dispex_data); nsres = nsIDOMHTMLElement_QueryInterface(nselem, &IID_nsIDOMHTMLFrameElement, (void**)&This->nsframe); if(NS_FAILED(nsres)) { nsres = nsIDOMHTMLElement_QueryInterface(nselem, &IID_nsIDOMHTMLIFrameElement, (void**)&This->nsiframe); if(NS_FAILED(nsres)) ERR("Could not get nsIDOMHTML[I]Frame interface\n"); }else This->nsiframe = NULL; }
HRESULT HTMLStyleElement_Create(HTMLDocumentNode *doc, nsIDOMHTMLElement *nselem, HTMLElement **elem) { HTMLStyleElement *ret; nsresult nsres; ret = heap_alloc_zero(sizeof(*ret)); if(!ret) return E_OUTOFMEMORY; ret->IHTMLStyleElement_iface.lpVtbl = &HTMLStyleElementVtbl; ret->element.node.vtbl = &HTMLStyleElementImplVtbl; HTMLElement_Init(&ret->element, doc, nselem, &HTMLStyleElement_dispex); nsres = nsIDOMHTMLElement_QueryInterface(nselem, &IID_nsIDOMHTMLStyleElement, (void**)&ret->nsstyle); assert(nsres == NS_OK); *elem = &ret->element; return S_OK; }
void HTMLFrameBase_Init(HTMLFrameBase *This, HTMLDocumentNode *doc, nsIDOMHTMLElement *nselem, dispex_static_data_t *dispex_data) { nsresult nsres; This->IHTMLFrameBase_iface.lpVtbl = &HTMLFrameBaseVtbl; This->IHTMLFrameBase2_iface.lpVtbl = &HTMLFrameBase2Vtbl; HTMLElement_Init(&This->element, doc, nselem, dispex_data); nsres = nsIDOMHTMLElement_QueryInterface(nselem, &IID_nsIDOMHTMLFrameElement, (void**)&This->nsframe); if(NS_FAILED(nsres)) { This->nsframe = NULL; nsres = nsIDOMHTMLElement_QueryInterface(nselem, &IID_nsIDOMHTMLIFrameElement, (void**)&This->nsiframe); assert(nsres == NS_OK && (nsIDOMNode*)This->nsiframe == This->element.node.nsnode); }else { assert((nsIDOMNode*)This->nsframe == This->element.node.nsnode); This->nsiframe = NULL; } /* Share the reference with nsnode */ nsIDOMNode_Release(This->element.node.nsnode); }
HRESULT HTMLObjectElement_Create(HTMLDocumentNode *doc, nsIDOMHTMLElement *nselem, HTMLElement **elem) { HTMLObjectElement *ret; nsresult nsres; ret = heap_alloc_zero(sizeof(*ret)); if(!ret) return E_OUTOFMEMORY; ret->IHTMLObjectElement_iface.lpVtbl = &HTMLObjectElementVtbl; ret->IHTMLObjectElement2_iface.lpVtbl = &HTMLObjectElement2Vtbl; ret->plugin_container.element.node.vtbl = &HTMLObjectElementImplVtbl; HTMLElement_Init(&ret->plugin_container.element, doc, nselem, &HTMLObjectElement_dispex); nsres = nsIDOMHTMLElement_QueryInterface(nselem, &IID_nsIDOMHTMLObjectElement, (void**)&ret->nsobject); /* Share nsobject reference with nsnode */ assert(nsres == NS_OK && (nsIDOMNode*)ret->nsobject == ret->plugin_container.element.node.nsnode); nsIDOMNode_Release(ret->plugin_container.element.node.nsnode); *elem = &ret->plugin_container.element; return S_OK; }