⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dom.mm

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 MM
📖 第 1 页 / 共 2 页
字号:
            break;        case WebCore::Node::CDATA_SECTION_NODE:            wrapperClass = [DOMCDATASection class];            break;        case WebCore::Node::ENTITY_REFERENCE_NODE:            wrapperClass = [DOMEntityReference class];            break;        case WebCore::Node::ENTITY_NODE:            wrapperClass = [DOMEntity class];            break;        case WebCore::Node::PROCESSING_INSTRUCTION_NODE:            wrapperClass = [DOMProcessingInstruction class];            break;        case WebCore::Node::COMMENT_NODE:            wrapperClass = [DOMComment class];            break;        case WebCore::Node::DOCUMENT_NODE:            if (static_cast<WebCore::Document*>(impl)->isHTMLDocument())                wrapperClass = [DOMHTMLDocument class];#if ENABLE(SVG)            else if (static_cast<WebCore::Document*>(impl)->isSVGDocument())                wrapperClass = [DOMSVGDocument class];#endif            else                wrapperClass = [DOMDocument class];            break;        case WebCore::Node::DOCUMENT_TYPE_NODE:            wrapperClass = [DOMDocumentType class];            break;        case WebCore::Node::DOCUMENT_FRAGMENT_NODE:            wrapperClass = [DOMDocumentFragment class];            break;        case WebCore::Node::NOTATION_NODE:            wrapperClass = [DOMNotation class];            break;        case WebCore::Node::XPATH_NAMESPACE_NODE:            // FIXME: Create an XPath objective C wrapper            // See http://bugs.webkit.org/show_bug.cgi?id=8755            return nil;    }    return [[[wrapperClass alloc] _initWithNode:impl] autorelease];}+ (id <DOMEventTarget>)_wrapEventTarget:(WebCore::EventTarget *)eventTarget{    if (!eventTarget)        return nil;    // We don't have an ObjC binding for XMLHttpRequest    return [DOMNode _wrapNode:eventTarget->toNode()];}- (WebCore::Node *)_node{    return reinterpret_cast<WebCore::Node*>(_internal);}- (JSC::Bindings::RootObject*)_rootObject{    if (WebCore::Node *n = [self _node]) {        if (WebCore::Frame* frame = n->document()->frame())            return frame->script()->bindingRootObject();    }    return 0;}@end@implementation DOMNode (DOMNodeExtensions)// FIXME: This should be implemented in Node so we don't have to fetch the renderer.// If it was, we could even autogenerate.- (NSRect)boundingBox{    [self _node]->document()->updateLayoutIgnorePendingStylesheets();    WebCore::RenderObject *renderer = [self _node]->renderer();    if (renderer)        return renderer->absoluteBoundingBoxRect();    return NSZeroRect;}// FIXME: This should be implemented in Node so we don't have to fetch the renderer.// If it was, we could even autogenerate.- (NSArray *)lineBoxRects{    [self _node]->document()->updateLayoutIgnorePendingStylesheets();    WebCore::RenderObject *renderer = [self _node]->renderer();    if (renderer) {        Vector<WebCore::IntRect> rects;        renderer->absoluteRectsForRange(rects);        return kit(rects);    }    return nil;}@end#if ENABLE(SVG)@implementation DOMSVGElementInstance (WebCoreInternal)- (id)_initWithSVGElementInstance:(WebCore::SVGElementInstance *)impl{    ASSERT(impl);    [super _init];    _internal = reinterpret_cast<DOMObjectInternal*>(impl);    impl->ref();    WebCore::addDOMWrapper(self, impl);    return self;}+ (DOMSVGElementInstance *)_wrapSVGElementInstance:(WebCore::SVGElementInstance *)impl{    if (!impl)        return nil;        id cachedInstance;    cachedInstance = WebCore::getDOMWrapper(impl);    if (cachedInstance)        return [[cachedInstance retain] autorelease];        return [[[self alloc] _initWithSVGElementInstance:impl] autorelease];}+ (id <DOMEventTarget>)_wrapEventTarget:(WebCore::EventTarget *)eventTarget{    if (!eventTarget)        return nil;    return [DOMSVGElementInstance _wrapSVGElementInstance:eventTarget->toSVGElementInstance()];}- (WebCore::SVGElementInstance *)_SVGElementInstance{    return reinterpret_cast<WebCore::SVGElementInstance*>(_internal);}@end#endif@implementation DOMNode (DOMNodeExtensionsPendingPublic)- (NSImage *)renderedImage{    if (WebCore::Node *node = [self _node])        if (WebCore::Frame* frame = node->document()->frame())            return frame->nodeImage(node);    return nil;}@end@implementation DOMRange (DOMRangeExtensions)- (NSRect)boundingBox{    [self _range]->ownerDocument()->updateLayoutIgnorePendingStylesheets();    return [self _range]->boundingBox();}- (NSArray *)lineBoxRects{    Vector<WebCore::IntRect> rects;    [self _range]->ownerDocument()->updateLayoutIgnorePendingStylesheets();    [self _range]->addLineBoxRects(rects);    return kit(rects);}@end//------------------------------------------------------------------------------------------// DOMElement// FIXME: this should be auto-generated in DOMElement.mm@implementation DOMElement (DOMElementAppKitExtensions)// FIXME: this should be implemented in the implementation- (NSImage*)image{    WebCore::RenderObject* renderer = [self _element]->renderer();    if (renderer && renderer->isImage()) {        WebCore::RenderImage* img = static_cast<WebCore::RenderImage*>(renderer);        if (img->cachedImage() && !img->cachedImage()->errorOccurred())            return img->cachedImage()->image()->getNSImage();    }    return nil;}@end@implementation DOMElement (WebPrivate)// FIXME: this should be implemented in the implementation- (NSFont *)_font{    WebCore::RenderObject* renderer = [self _element]->renderer();    if (renderer)        return renderer->style()->font().primaryFont()->getNSFont();    return nil;}// FIXME: this should be implemented in the implementation- (NSData *)_imageTIFFRepresentation{    WebCore::RenderObject* renderer = [self _element]->renderer();    if (renderer && renderer->isImage()) {        WebCore::RenderImage* img = static_cast<WebCore::RenderImage*>(renderer);        if (img->cachedImage() && !img->cachedImage()->errorOccurred())            return (NSData*)(img->cachedImage()->image()->getTIFFRepresentation());    }    return nil;}// FIXME: this should be implemented in the implementation- (NSURL *)_getURLAttribute:(NSString *)name{    ASSERT(name);    WebCore::Element* element = [self _element];    ASSERT(element);    return element->document()->completeURL(parseURL(element->getAttribute(name)));}// FIXME: this should be implemented in the implementation- (BOOL)isFocused{    WebCore::Element* impl = [self _element];    if (impl->document()->focusedNode() == impl)        return YES;    return NO;}@end//------------------------------------------------------------------------------------------// DOMRange@implementation DOMRange (WebPrivate)- (NSString *)description{    if (!_internal)        return @"<DOMRange: null>";    return [NSString stringWithFormat:@"<DOMRange: %@ %d %@ %d>",               [self startContainer], [self startOffset], [self endContainer], [self endOffset]];}// FIXME: this should be removed as soon as all internal Apple uses of it have been replaced with// calls to the public method - (NSString *)text.- (NSString *)_text{    return [self text];}@end//------------------------------------------------------------------------------------------// DOMNodeFilter// FIXME: This implementation should be in it's own file.@implementation DOMNodeFilter- (id)_initWithNodeFilter:(WebCore::NodeFilter *)impl{    ASSERT(impl);    [super _init];    _internal = reinterpret_cast<DOMObjectInternal*>(impl);    impl->ref();    WebCore::addDOMWrapper(self, impl);    return self;}+ (DOMNodeFilter *)_wrapNodeFilter:(WebCore::NodeFilter *)impl{    if (!impl)        return nil;    id cachedInstance;    cachedInstance = WebCore::getDOMWrapper(impl);    if (cachedInstance)        return [[cachedInstance retain] autorelease];    return [[[self alloc] _initWithNodeFilter:impl] autorelease];}- (WebCore::NodeFilter *)_nodeFilter{    return reinterpret_cast<WebCore::NodeFilter*>(_internal);}- (void)dealloc{    if (_internal)        reinterpret_cast<WebCore::NodeFilter*>(_internal)->deref();    [super dealloc];}- (void)finalize{    if (_internal)        reinterpret_cast<WebCore::NodeFilter*>(_internal)->deref();    [super finalize];}- (short)acceptNode:(DOMNode *)node{    return [self _nodeFilter]->acceptNode([node _node]);}@end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -