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

📄 webcorebridge.cpp

📁 khtml在gtk上的移植版本
💻 CPP
📖 第 1 页 / 共 3 页
字号:
    return QString();}void WebCoreBridge::reapplyStylesForDeviceType(WebCoreDeviceType deviceType){    _part->setMediaType(deviceType == WebCoreDeviceScreen ? "screen" : "print");    DocumentImpl *doc = _part->xmlDocImpl();    if (doc) {        static QPaintDevice screen;        static QPrinter printer;    	doc->setPaintDevice(deviceType == WebCoreDeviceScreen ? &screen : &printer);        if (deviceType != WebCoreDeviceScreen) {            doc->setPrintStyleSheet(styleSheetForPrinting(_part));        }    }    _part->reparseConfiguration();}static bool nowPrinting(WebCoreBridge *self){    DocumentImpl *doc = self->part()->xmlDocImpl();    return doc && doc->paintDevice() && doc->paintDevice()->devType() == QInternal::Printer;}// Set or unset the printing mode in the view.  We only toy with this if we're printing.void WebCoreBridge::_setupRootForPrinting(bool onOrOff){    if (nowPrinting(this)) {        RenderCanvas *root = static_cast<khtml::RenderCanvas *>(_part->xmlDocImpl()->renderer());        if (root) {            root->setPrintingMode(onOrOff);        }    }}void WebCoreBridge::forceLayoutAdjustingViewSize(bool flag){    _setupRootForPrinting(true);    _part->forceLayout();    if (flag) {	adjustViewSize();    }    _setupRootForPrinting(false);}void WebCoreBridge::forceLayoutWithMinimumPageWidth(float minPageWidth, float maximumPageWidth, float maxPageWidth, bool flag){    _setupRootForPrinting(true);    _part->forceLayoutWithPageWidthRange(minPageWidth, maxPageWidth);    if (flag) {	adjustViewSize();    }    _setupRootForPrinting(false);}void WebCoreBridge::sendResizeEvent(){    _part->sendResizeEvent();}void WebCoreBridge::drawRect(GdkRectangle * _rect, QPainter *p){    QRect rect(_rect);    _setupRootForPrinting(true);    _part->paint(p, rect);    _setupRootForPrinting(false);}void WebCoreBridge::drawRect(GdkRectangle * rect, CGContextRef gc){    QPainter painter(nowPrinting(this));    painter.setContext(gc);    painter.setUsesInactiveTextBackgroundColor(_part->usesInactiveTextBackgroundColor());#if 0    painter.setDrawsFocusRing(_part->showsFirstResponder());#endif    drawRect(rect, &painter);}#if 0// Used by pagination code called from AppKit when a standalone web page is printed.-(NSArray*)computePageRectsWithPrintWidth:(float)printWidth printHeight:(float)printHeight{    [self _setupRootForPrinting:YES];    NSMutableArray* pages = [NSMutableArray arrayWithCapacity:5];	if (printWidth == 0 || printHeight == 0) {		return pages;	}	    KHTMLView* view = _part->view();    NSView* documentView = view->getDocumentView();    if (!documentView)        return pages;	    float currPageHeight = printHeight;    float docHeight = NSHeight([documentView bounds]);    float docWidth = NSWidth([documentView bounds]);        // We need to give the part the opportunity to adjust the page height at each step.    for (float i = 0; i < docHeight; i += currPageHeight) {        float proposedBottom = kMin(docHeight, i + printHeight);        _part->adjustPageHeight(&proposedBottom, i, proposedBottom, i);        currPageHeight = kMax(1.0f, proposedBottom - i);        for (float j = 0; j < docWidth; j += printWidth) {            NSValue* val = [NSValue valueWithRect: NSMakeRect(j, i, printWidth, currPageHeight)];            [pages addObject: val];        }    }    [self _setupRootForPrinting:NO];        return pages;}#endif// This is to support the case where a webview is embedded in the view that's being printedvoid WebCoreBridge::adjustPageHeightNew(float *newBottom,float oldTop, float oldBottom, float bottomLimit){    _setupRootForPrinting(true);    _part->adjustPageHeight(newBottom, oldTop, oldBottom, bottomLimit);    _setupRootForPrinting(false);}#if 0 // dom api not implemented- (NSObject *)copyDOMNode:(NodeImpl *)node copier:(id <WebCoreDOMTreeCopier>)copier{    NSMutableArray *children = [[NSMutableArray alloc] init];    for (NodeImpl *child = node->firstChild(); child; child = child->nextSibling()) {        [children addObject:[self copyDOMNode:child copier:copier]];    }    NSObject *copiedNode = [copier nodeWithName:node->nodeName().string().getNSString()                                          value:node->nodeValue().string().getNSString()                                         source:node->recursive_toHTML(1).getNSString()                                       children:children];    [children release];    return copiedNode;}- (NSObject *)copyDOMTree:(id <WebCoreDOMTreeCopier>)copier{    DocumentImpl *doc = _part->xmlDocImpl();    if (!doc) {        return nil;    }    return [self copyDOMNode:doc copier:copier];}- (NSObject *)copyRenderNode:(RenderObject *)node copier:(id <WebCoreRenderTreeCopier>)copier{    NSMutableArray *children = [[NSMutableArray alloc] init];    for (RenderObject *child = node->firstChild(); child; child = child->nextSibling()) {        [children addObject:[self copyRenderNode:child copier:copier]];    }              NSString *name = [[NSString alloc] initWithUTF8String:node->renderName()];        RenderPart *nodeRenderPart = dynamic_cast<RenderPart *>(node);    QWidget *widget = nodeRenderPart ? nodeRenderPart->widget() : 0;    NSView *view = widget ? widget->getView() : nil;        int nx, ny;    node->absolutePosition(nx,ny);    NSObject *copiedNode = [copier nodeWithName:name                                       position:NSMakePoint(nx,ny)                                           rect:NSMakeRect(node->xPos(), node->yPos(), node->width(), node->height())                                           view:view                                       children:children];        [name release];    [children release];        return copiedNode;}- (NSObject *)copyRenderTree:(id <WebCoreRenderTreeCopier>)copier{    RenderObject *renderer = _part->renderer();    if (!renderer) {        return nil;    }    return [self copyRenderNode:renderer copier:copier];}#endifvoid WebCoreBridge::removeFromFrame(){    LOG(KwiqLog, "this: %x, part:%x", this,part());    _part->setView(0);}void WebCoreBridge::installInFrame(GtkWidget *widget){    // If this isn't the main frame, it must have a render _part set, or it    // won't ever get installed in the view hierarchy.    ASSERT(this == mainFrame() || _renderPart != NULL);        _part->view()->setGtkWidget(widget);    if (_renderPart) {        _renderPart->setWidget(_part->view());        // Now the render part owns the view, so we don't any more.    }    _part->view()->initScrollBars();}void WebCoreBridge::mouseDown(GdkEvent *_event){    QMouseEvent event(QEvent::MouseButtonPress, _event);    _part->mouseDown(&event);}void WebCoreBridge::mouseUp(GdkEvent *_event){    QMouseEvent event(QEvent::MouseButtonRelease, _event);    _part->mouseUp(&event);}void WebCoreBridge::mouseDragged(GdkEventMotion *_event){    QMouseEvent event( _event);    _part->mouseDragged(&event);}void WebCoreBridge::mouseMoved(GdkEventMotion *_event){    QMouseEvent event(_event);    _part->mouseMoved(&event);}#if 0- (BOOL)sendContextMenuEvent:(NSEvent *)event{    return _part->sendContextMenuEvent(event);}- (id <WebDOMElement>)elementForView:(NSView *)view{    // FIXME: implemented currently for only a subset of the KWQ widgets    if ([view conformsToProtocol:@protocol(KWQWidgetHolder)]) {        NSView <KWQWidgetHolder> *widgetHolder = view;        QWidget *widget = [widgetHolder widget];        if (widget != nil) {            NodeImpl *node = static_cast<const RenderWidget *>(widget->eventFilterObject())->element();            return [WebCoreDOMElement elementWithImpl:static_cast<ElementImpl *>(node)];        }    }    return nil;}static NSView *viewForElement(DOM::ElementImpl *elementImpl){    RenderObject *renderer = elementImpl->renderer();    if (renderer && renderer->isWidget()) {        QWidget *widget = static_cast<const RenderWidget *>(renderer)->widget();        if (widget) {            return widget->getView();        }    }    return nil;}static HTMLInputElementImpl *inputElementFromDOMElement(id <WebDOMElement>element){    ASSERT([(NSObject *)element isKindOfClass:[WebCoreDOMElement class]]);    DOM::ElementImpl *domElement = [(WebCoreDOMElement *)element elementImpl];    if (domElement && idFromNode(domElement) == ID_INPUT) {        return static_cast<HTMLInputElementImpl *>(domElement);    }    return nil;}static HTMLFormElementImpl *formElementFromDOMElement(id <WebDOMElement>element){    ASSERT([(NSObject *)element isKindOfClass:[WebCoreDOMElement class]]);    DOM::ElementImpl *domElement = [(WebCoreDOMElement *)element elementImpl];    if (domElement && idFromNode(domElement) == ID_FORM) {        return static_cast<HTMLFormElementImpl *>(domElement);    }    return nil;}- (id <WebDOMElement>)elementWithName:(NSString *)name inForm:(id <WebDOMElement>)form{    HTMLFormElementImpl *formElement = formElementFromDOMElement(form);    if (formElement) {        QPtrList<HTMLGenericFormElementImpl> elements = formElement->formElements;        QString targetName = QString::fromNSString(name);        for (unsigned int i = 0; i < elements.count(); i++) {            HTMLGenericFormElementImpl *elt = elements.at(i);            // Skip option elements, other duds            if (elt->name() == targetName) {                return [WebCoreDOMElement elementWithImpl:elt];            }        }    }    return nil;}- (BOOL)elementDoesAutoComplete:(id <WebDOMElement>)element{    HTMLInputElementImpl *inputElement = inputElementFromDOMElement(element);    return inputElement != nil        && inputElement->inputType() == HTMLInputElementImpl::TEXT        && inputElement->autoComplete();}- (BOOL)elementIsPassword:(id <WebDOMElement>)element{    HTMLInputElementImpl *inputElement = inputElementFromDOMElement(element);    return inputElement != nil        && inputElement->inputType() == HTMLInputElementImpl::PASSWORD;}- (id <WebDOMElement>)formForElement:(id <WebDOMElement>)element;{    HTMLInputElementImpl *inputElement = inputElementFromDOMElement(element);    if (inputElement) {        HTMLFormElementImpl *formElement = inputElement->form();        if (formElement) {            return [WebCoreDOMElement elementWithImpl:formElement];        }    }    return nil;}- (id <WebDOMElement>)currentForm{    HTMLFormElementImpl *formElement = _part->currentForm();    return formElement ? [WebCoreDOMElement elementWithImpl:formElement] : nil;}- (NSArray *)controlsInForm:(id <WebDOMElement>)form{    NSMutableArray *results = nil;    HTMLFormElementImpl *formElement = formElementFromDOMElement(form);    if (formElement) {        QPtrList<HTMLGenericFormElementImpl> elements = formElement->formElements;        for (unsigned int i = 0; i < elements.count(); i++) {            if (elements.at(i)->isEnumeratable()) {		// Skip option elements, other duds                NSView *view = viewForElement(elements.at(i));                if (view) {                    if (!results) {                        results = [NSMutableArray arrayWithObject:view];                    } else {                        [results addObject:view];                    }                }            }        }    }    return results;}- (NSString *)searchForLabels:(NSArray *)labels beforeElement:(id <WebDOMElement>)element{    ASSERT([(NSObject *)element isKindOfClass:[WebCoreDOMElement class]]);    return _part->searchForLabelsBeforeElement(labels, [(WebCoreDOMElement *)element elementImpl]);}- (NSString *)matchLabels:(NSArray *)labels againstElement:(id <WebDOMElement>)element{    ASSERT([(NSObject *)element isKindOfClass:[WebCoreDOMElement class]]);    return _part->matchLabelsAgainstElement(labels, [(WebCoreDOMElement *)element elementImpl]);}#endifvoid WebCoreBridge::elementAtPoint(int x, int y, WebCoreElementInfo* element){    QPoint point(x,y);    RenderObject *renderer = _part->renderer();    if (!renderer) {        return;    }    RenderObject::NodeInfo nodeInfo(true, true);    renderer->layer()->nodeAtPoint(nodeInfo, (int)point.x(), (int)point.y());        bool issel = _part->isPointInsideSelection((int)point.x(), (int)point.y())? true : false;    element->isSelected = issel;                    // Find the title in the nearest enclosing DOM node.    // For <area> tags in image maps, walk the tree for the <area>, not the <img> using it.    for (NodeImpl *titleNode = nodeInfo.innerNode(); titleNode; titleNode = titleNode->parentNode()) {        if (titleNode->isElementNode()) {            const DOM::DOMString title = static_cast<DOM::ElementImpl *>(titleNode)->getAttribute(ATTR_TITLE);            if (!title.isNull()) {                // We found a node with a title.                QString titleText(title.string());                titleText.replace('\\', _part->backslashAsCurrencySymbol());		                element->linkTitle = g_strdup(titleText.utf8());                break;            }        }    }    NodeImpl *URLNode = nodeInfo.URLElement();    if (URLNode) {        DOM::ElementImpl *e = static_cast<DOM::ElementImpl *>(URLNode);                DOM::DOMString title = e->getAttribute(ATTR_TITLE);        if (!title.isEmpty()) {            QString titleText(title.string());            titleText.replace('\\', _part->backslashAsCurrencySymbol());            element->linkTitle = g_strdup(titleText.utf8());        }                DOM::DOMString link = e->getAttribute(ATTR_HREF);        if (!link.isNull()) {            if (e->firstChild()) {                DOM::Range r(_part->document());                r.setStartBefore(e->firstChild());                r.setEndAfter(e->lastChild());                QString t(_part->text(r));                if (!t.isEmpty()) {                    element->linkLabel = g_strdup(t.utf8());                }             }            element->linkURL = g_strdup(_part->xmlDocImpl()->completeURL(parseURL(link).string()).utf8());        }                DOM::DOMString target = e->getAttribute(ATTR_TARGET);        if (target.isEmpty() && _part->xmlDocImpl()) {            target = _part->xmlDocImpl()->baseTarget();        }        if (!target.isEmpty()) {            element->linkTarget = g_strdup(target.string().utf8());        }    }    NodeImpl *node = nodeInfo.innerNonSharedNode();    if (node && node->renderer() && node->renderer()->isImage()) {        RenderImage *r = static_cast<RenderImage *>(node->renderer());#if 0        NSImage *image = r->pixmap().image();#endif        // Only return image information if there is an image.        if (!r->pixmap().isNull() /* && !isDisplayingError(&r->pixmap().image())*/) {#if 0            element->qpixmap = r->pixmap();#endif            

⌨️ 快捷键说明

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