📄 domcoreclasses.cpp
字号:
default: { DOMNode* newNode = new DOMNode(n); hr = newNode->QueryInterface(IID_IDOMNode, (void**)&domNode); } break; } if (FAILED(hr)) return 0; return domNode;}// DOMNodeList - IUnknown -----------------------------------------------------HRESULT STDMETHODCALLTYPE DOMNodeList::QueryInterface(REFIID riid, void** ppvObject){ *ppvObject = 0; if (IsEqualGUID(riid, IID_IDOMNodeList)) *ppvObject = static_cast<IDOMNodeList*>(this); else return DOMObject::QueryInterface(riid, ppvObject); AddRef(); return S_OK;}// IDOMNodeList ---------------------------------------------------------------HRESULT STDMETHODCALLTYPE DOMNodeList::item( /* [in] */ UINT index, /* [retval][out] */ IDOMNode **result){ *result = 0; if (!m_nodeList) return E_FAIL; WebCore::Node* itemNode = m_nodeList->item(index); if (!itemNode) return E_FAIL; *result = DOMNode::createInstance(itemNode); return *result ? S_OK : E_FAIL;}HRESULT STDMETHODCALLTYPE DOMNodeList::length( /* [retval][out] */ UINT *result){ *result = 0; if (!m_nodeList) return E_FAIL; *result = m_nodeList->length(); return S_OK;}// DOMNodeList - DOMNodeList --------------------------------------------------DOMNodeList::DOMNodeList(WebCore::NodeList* l): m_nodeList(0){ if (l) l->ref(); m_nodeList = l;}DOMNodeList::~DOMNodeList(){ if (m_nodeList) m_nodeList->deref();}IDOMNodeList* DOMNodeList::createInstance(WebCore::NodeList* l){ if (!l) return 0; IDOMNodeList* domNodeList = 0; DOMNodeList* newNodeList = new DOMNodeList(l); if (FAILED(newNodeList->QueryInterface(IID_IDOMNodeList, (void**)&domNodeList))) return 0; return domNodeList;}// DOMDocument - IUnknown -----------------------------------------------------HRESULT STDMETHODCALLTYPE DOMDocument::QueryInterface(REFIID riid, void** ppvObject){ *ppvObject = 0; if (IsEqualGUID(riid, IID_IDOMDocument)) *ppvObject = static_cast<IDOMDocument*>(this); else if (IsEqualGUID(riid, IID_IDOMViewCSS)) *ppvObject = static_cast<IDOMViewCSS*>(this); else if (IsEqualGUID(riid, IID_IDOMDocumentEvent)) *ppvObject = static_cast<IDOMDocumentEvent*>(this); else return DOMNode::QueryInterface(riid, ppvObject); AddRef(); return S_OK;}// DOMDocument ----------------------------------------------------------------HRESULT STDMETHODCALLTYPE DOMDocument::doctype( /* [retval][out] */ IDOMDocumentType** /*result*/){ ASSERT_NOT_REACHED(); return E_NOTIMPL;}HRESULT STDMETHODCALLTYPE DOMDocument::implementation( /* [retval][out] */ IDOMImplementation** /*result*/){ ASSERT_NOT_REACHED(); return E_NOTIMPL;}HRESULT STDMETHODCALLTYPE DOMDocument::documentElement( /* [retval][out] */ IDOMElement** result){ *result = DOMElement::createInstance(m_document->documentElement()); return *result ? S_OK : E_FAIL;}HRESULT STDMETHODCALLTYPE DOMDocument::createElement( /* [in] */ BSTR tagName, /* [retval][out] */ IDOMElement** result){ if (!m_document) return E_FAIL; String tagNameString(tagName); ExceptionCode ec; *result = DOMElement::createInstance(m_document->createElement(tagNameString, ec).get()); return *result ? S_OK : E_FAIL;}HRESULT STDMETHODCALLTYPE DOMDocument::createDocumentFragment( /* [retval][out] */ IDOMDocumentFragment** /*result*/){ ASSERT_NOT_REACHED(); return E_NOTIMPL;}HRESULT STDMETHODCALLTYPE DOMDocument::createTextNode( /* [in] */ BSTR /*data*/, /* [retval][out] */ IDOMText** /*result*/){ ASSERT_NOT_REACHED(); return E_NOTIMPL;}HRESULT STDMETHODCALLTYPE DOMDocument::createComment( /* [in] */ BSTR /*data*/, /* [retval][out] */ IDOMComment** /*result*/){ ASSERT_NOT_REACHED(); return E_NOTIMPL;}HRESULT STDMETHODCALLTYPE DOMDocument::createCDATASection( /* [in] */ BSTR /*data*/, /* [retval][out] */ IDOMCDATASection** /*result*/){ ASSERT_NOT_REACHED(); return E_NOTIMPL;}HRESULT STDMETHODCALLTYPE DOMDocument::createProcessingInstruction( /* [in] */ BSTR /*target*/, /* [in] */ BSTR /*data*/, /* [retval][out] */ IDOMProcessingInstruction** /*result*/){ ASSERT_NOT_REACHED(); return E_NOTIMPL;}HRESULT STDMETHODCALLTYPE DOMDocument::createAttribute( /* [in] */ BSTR /*name*/, /* [retval][out] */ IDOMAttr** /*result*/){ ASSERT_NOT_REACHED(); return E_NOTIMPL;}HRESULT STDMETHODCALLTYPE DOMDocument::createEntityReference( /* [in] */ BSTR /*name*/, /* [retval][out] */ IDOMEntityReference** /*result*/){ ASSERT_NOT_REACHED(); return E_NOTIMPL;}HRESULT STDMETHODCALLTYPE DOMDocument::getElementsByTagName( /* [in] */ BSTR tagName, /* [retval][out] */ IDOMNodeList** result){ if (!m_document) return E_FAIL; String tagNameString(tagName); *result = DOMNodeList::createInstance(m_document->getElementsByTagName(tagNameString).get()); return *result ? S_OK : E_FAIL;}HRESULT STDMETHODCALLTYPE DOMDocument::importNode( /* [in] */ IDOMNode* /*importedNode*/, /* [in] */ BOOL /*deep*/, /* [retval][out] */ IDOMNode** /*result*/){ ASSERT_NOT_REACHED(); return E_NOTIMPL;}HRESULT STDMETHODCALLTYPE DOMDocument::createElementNS( /* [in] */ BSTR /*namespaceURI*/, /* [in] */ BSTR /*qualifiedName*/, /* [retval][out] */ IDOMElement** /*result*/){ ASSERT_NOT_REACHED(); return E_NOTIMPL;}HRESULT STDMETHODCALLTYPE DOMDocument::createAttributeNS( /* [in] */ BSTR /*namespaceURI*/, /* [in] */ BSTR /*qualifiedName*/, /* [retval][out] */ IDOMAttr** /*result*/){ ASSERT_NOT_REACHED(); return E_NOTIMPL;}HRESULT STDMETHODCALLTYPE DOMDocument::getElementsByTagNameNS( /* [in] */ BSTR namespaceURI, /* [in] */ BSTR localName, /* [retval][out] */ IDOMNodeList** result){ if (!m_document) return E_FAIL; String namespaceURIString(namespaceURI); String localNameString(localName); *result = DOMNodeList::createInstance(m_document->getElementsByTagNameNS(namespaceURIString, localNameString).get()); return *result ? S_OK : E_FAIL;}HRESULT STDMETHODCALLTYPE DOMDocument::getElementById( /* [in] */ BSTR elementId, /* [retval][out] */ IDOMElement** result){ if (!m_document) return E_FAIL; String idString(elementId); *result = DOMElement::createInstance(m_document->getElementById(idString)); return *result ? S_OK : E_FAIL;}// DOMDocument - IDOMViewCSS --------------------------------------------------HRESULT STDMETHODCALLTYPE DOMDocument::getComputedStyle( /* [in] */ IDOMElement* elt, /* [in] */ BSTR pseudoElt, /* [retval][out] */ IDOMCSSStyleDeclaration** result){ if (!elt || !result) return E_POINTER; COMPtr<DOMElement> domEle; HRESULT hr = elt->QueryInterface(IID_DOMElement, (void**)&domEle); if (FAILED(hr)) return hr; Element* element = domEle->element(); WebCore::DOMWindow* dv = m_document->defaultView(); String pseudoEltString(pseudoElt); if (!dv) return E_FAIL; *result = DOMCSSStyleDeclaration::createInstance(dv->getComputedStyle(element, pseudoEltString.impl()).get()); return *result ? S_OK : E_FAIL;}// DOMDocument - IDOMDocumentEvent --------------------------------------------HRESULT STDMETHODCALLTYPE DOMDocument::createEvent( /* [in] */ BSTR eventType, /* [retval][out] */ IDOMEvent **result){ String eventTypeString(eventType, SysStringLen(eventType)); WebCore::ExceptionCode ec = 0; *result = DOMEvent::createInstance(m_document->createEvent(eventTypeString, ec)); return *result ? S_OK : E_FAIL;}// DOMDocument - DOMDocument --------------------------------------------------DOMDocument::DOMDocument(WebCore::Document* d): DOMNode(d), m_document(d){}DOMDocument::~DOMDocument(){}IDOMDocument* DOMDocument::createInstance(WebCore::Document* d){ if (!d) return 0; HRESULT hr; IDOMDocument* domDocument = 0; if (d->isHTMLDocument()) { DOMHTMLDocument* newDocument = new DOMHTMLDocument(d); hr = newDocument->QueryInterface(IID_IDOMDocument, (void**)&domDocument); } else { DOMDocument* newDocument = new DOMDocument(d); hr = newDocument->QueryInterface(IID_IDOMDocument, (void**)&domDocument); } if (FAILED(hr)) return 0; return domDocument;}// DOMElement - IUnknown ------------------------------------------------------HRESULT STDMETHODCALLTYPE DOMElement::QueryInterface(REFIID riid, void** ppvObject){ *ppvObject = 0; if (IsEqualGUID(riid, IID_IDOMElement)) *ppvObject = static_cast<IDOMElement*>(this); else if (IsEqualGUID(riid, IID_DOMElement)) *ppvObject = static_cast<DOMElement*>(this); else if (IsEqualGUID(riid, IID_IDOMElementPrivate)) *ppvObject = static_cast<IDOMElementPrivate*>(this); else if (IsEqualGUID(riid, IID_IDOMNodeExtensions)) *ppvObject = static_cast<IDOMNodeExtensions*>(this); else if (IsEqualGUID(riid, IID_IDOMElementCSSInlineStyle)) *ppvObject = static_cast<IDOMElementCSSInlineStyle*>(this); else if (IsEqualGUID(riid, IID_IDOMElementExtensions)) *ppvObject = static_cast<IDOMElementExtensions*>(this); else return DOMNode::QueryInterface(riid, ppvObject); AddRef(); return S_OK;}// DOMElement - IDOMNodeExtensions---------------------------------------------HRESULT STDMETHODCALLTYPE DOMElement::boundingBox( /* [retval][out] */ LPRECT rect){ ::SetRectEmpty(rect); if (!m_element) return E_FAIL; WebCore::RenderObject *renderer = m_element->renderer(); if (renderer) { IntRect boundsIntRect = renderer->absoluteBoundingBoxRect(); rect->left = boundsIntRect.x(); rect->top = boundsIntRect.y(); rect->right = boundsIntRect.x() + boundsIntRect.width(); rect->bottom = boundsIntRect.y() + boundsIntRect.height(); } return S_OK;}HRESULT STDMETHODCALLTYPE DOMElement::lineBoxRects( /* [size_is][in] */ RECT* /*rects*/, /* [in] */ int /*cRects*/){ return E_NOTIMPL;}// IDOMElement ----------------------------------------------------------------HRESULT STDMETHODCALLTYPE DOMElement::tagName( /* [retval][out] */ BSTR* /*result*/){ ASSERT_NOT_REACHED(); return E_NOTIMPL;} HRESULT STDMETHODCALLTYPE DOMElement::getAttribute( /* [in] */ BSTR name, /* [retval][out] */ BSTR* result){ if (!m_element) return E_FAIL; WebCore::String nameString(name, SysStringLen(name)); WebCore::String& attrValueString = (WebCore::String&) m_element->getAttribute(nameString); *result = SysAllocStringLen(attrValueString.characters(), attrValueString.length()); if (attrValueString.length() && !*result) return E_OUTOFMEMORY; return S_OK;} HRESULT STDMETHODCALLTYPE DOMElement::setAttribute( /* [in] */ BSTR name, /* [in] */ BSTR value){ if (!m_element) return E_FAIL; WebCore::String nameString(name, SysStringLen(name)); WebCore::String valueString(value, SysStringLen(value)); WebCore::ExceptionCode ec = 0; m_element->setAttribute(nameString, valueString, ec); return ec ? E_FAIL : S_OK;} HRESULT STDMETHODCALLTYPE DOMElement::removeAttribute( /* [in] */ BSTR /*name*/){ ASSERT_NOT_REACHED(); return E_NOTIMPL;} HRESULT STDMETHODCALLTYPE DOMElement::getAttributeNode( /* [in] */ BSTR /*name*/, /* [retval][out] */ IDOMAttr** /*result*/){ ASSERT_NOT_REACHED();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -