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

📄 webcorebridge.cpp

📁 khtml在gtk上的移植版本
💻 CPP
📖 第 1 页 / 共 3 页
字号:
            int x, y;            if (r->absolutePosition(x, y)) {                QRect rect(x, y, r->contentWidth(), r->contentHeight());                element->imageRect.x = rect.x(); element->imageRect.y = rect.y();                element->imageRect.width = rect.width(); element->imageRect.height = rect.height();            }                        DOM::ElementImpl *i = static_cast<DOM::ElementImpl*>(node);                // FIXME: Code copied from RenderImage::updateFromElement; should share.            DOM::DOMString attr;            if (idFromNode(i) == ID_OBJECT) {                attr = i->getAttribute(ATTR_DATA);            } else {                attr = i->getAttribute(ATTR_SRC);            }            if (!attr.isEmpty()) {                QString URLString = parseURL(attr).string();                element->imageURL = g_strdup(_part->xmlDocImpl()->completeURL(URLString).utf8());            }                        // FIXME: Code copied from RenderImage::updateFromElement; should share.            DOM::DOMString alt;            if (idFromNode(i) == ID_INPUT)                alt = static_cast<DOM::HTMLInputElementImpl *>(i)->altText();            else if (idFromNode(i) == ID_IMG)                alt = static_cast<DOM::HTMLImageElementImpl *>(i)->altText();            if (!alt.isNull()) {                QString altText = alt.string();                altText.replace('\\', _part->backslashAsCurrencySymbol());                element->imageAltText = g_strdup(altText.utf8());            }        }    }}bool WebCoreBridge::searchFor(const gchar *string, bool forward, bool caseFlag, bool wrapFlag){    return _part->findString(string, forward, caseFlag, wrapFlag);}void WebCoreBridge::jumpToSelection(){    _part->jumpToSelection();}void WebCoreBridge::setTextSizeMultiplier(float multiplier){    int newZoomFactor = (int)(multiplier * 100);    if (_part->zoomFactor() == newZoomFactor) {        return;    }    _part->setZoomFactor(newZoomFactor);    // setZoomFactor will trigger a timed layout, but we want to do the layout before    // we do any drawing. This takes care of that. Without this we redraw twice.    setNeedsLayout();}const gchar* WebCoreBridge::textEncoding(){    assignToString(&_encoding, _part->encoding().utf8());    return _encoding;}GtkWidget *WebCoreBridge::nextKeyView(){    DocumentImpl *doc = _part->xmlDocImpl();    if (!doc) {        return 0;    }    return _part->nextKeyView(doc->focusNode(), KWQSelectingNext);}GtkWidget *WebCoreBridge::previousKeyView(){    DocumentImpl *doc = _part->xmlDocImpl();    if (!doc) {        return 0;    }    return _part->nextKeyView(doc->focusNode(), KWQSelectingPrevious);}GtkWidget *WebCoreBridge::nextKeyViewInsideWebFrameViews(){    return _part->nextKeyViewInFrameHierarchy(0, KWQSelectingNext);}GtkWidget *WebCoreBridge::previousKeyViewInsideWebFrameViews(){    return _part->nextKeyViewInFrameHierarchy(0, KWQSelectingPrevious);}const gchar * WebCoreBridge::stringByEvaluatingJavaScriptFromString(const gchar* string){    _part->createEmptyDocument();    assignToString(&_jsEvalString, _part->executeScript(QString::fromUtf8(string), true).asString().utf8());    return _jsEvalString;}#if 0- (id<WebDOMDocument>)DOMDocument{    return [WebCoreDOMDocument documentWithImpl:_part->xmlDocImpl()];}- (void)setSelectionFrom:(id<WebDOMNode>)start startOffset:(int)startOffset to:(id<WebDOMNode>)end endOffset:(int) endOffset{    WebCoreDOMNode *startNode = start;    WebCoreDOMNode *endNode = end;    _part->xmlDocImpl()->setSelection([startNode impl], startOffset, [endNode impl], endOffset);}- (NSAttributedString *)selectedAttributedString{    return _part->attributedString(_part->selectionStart(), _part->selectionStartOffset(), _part->selectionEnd(), _part->selectionEndOffset());}- (NSAttributedString *)attributedStringFrom:(id<WebDOMNode>)start startOffset:(int)startOffset to:(id<WebDOMNode>)end endOffset:(int)endOffset{    WebCoreDOMNode *startNode = start;    WebCoreDOMNode *endNode = end;    return _part->attributedString([startNode impl], startOffset, [endNode impl], endOffset);}- (id<WebDOMNode>)selectionStart{    return [WebCoreDOMNode nodeWithImpl:_part->selectionStart()];}- (int)selectionStartOffset{    return _part->selectionStartOffset();}- (id<WebDOMNode>)selectionEnd{    return [WebCoreDOMNode nodeWithImpl:_part->selectionEnd()];}- (int)selectionEndOffset{    return _part->selectionEndOffset();}- (NSRect)selectionRect{    return _part->selectionRect(); }- (NSRect)visibleSelectionRect{    KHTMLView *view = _part->view();    if (!view) {        return NSZeroRect;    }    NSView *documentView = view->getDocumentView();    if (!documentView) {        return NSZeroRect;    }    return NSIntersectionRect(_part->selectionRect(), [documentView visibleRect]); }- (NSImage *)selectionImage{    NSView *view = _part->view()->getDocumentView();    if (!view) {        return nil;    }    NSRect rect = [self visibleSelectionRect];    NSRect bounds = [view bounds];    NSImage *selectionImage = [[[NSImage alloc] initWithSize:rect.size] autorelease];    [selectionImage setFlipped:YES];    [selectionImage lockFocus];    [NSGraphicsContext saveGraphicsState];    CGContextTranslateCTM((CGContext *)[[NSGraphicsContext currentContext] graphicsPort],                          -(NSMinX(rect) - NSMinX(bounds)), -(NSMinY(rect) - NSMinY(bounds)));    _drawSelectionOnly = YES;    [view drawRect:rect];    _drawSelectionOnly = NO;    [NSGraphicsContext restoreGraphicsState];            [selectionImage unlockFocus];    [selectionImage setFlipped:NO];    return selectionImage;}#endifvoid WebCoreBridge::setName(const gchar* name){    _part->setName(QString::fromUtf8(name));}const gchar* WebCoreBridge::name(){    assignToString(&_name, _part->name().utf8());    return _name;}const gchar* WebCoreBridge::URL(){    assignToString(&_url, _part->url().url().utf8());    return _url;}const gchar* WebCoreBridge::referrer(){    // Do not allow file URLs to be used as referrers as that is potentially a security issue    QString referrer = _part->referrer();    bool isFileURL = referrer.lower().find("file:",0,false);    assignToString(&_referrer, isFileURL ? 0 : referrer.utf8() );    return _referrer;}#if 0+ (NSString *)stringWithData:(NSData *)data textEncoding:(CFStringEncoding)textEncoding{    if (textEncoding == kCFStringEncodingInvalidId || textEncoding == kCFStringEncodingISOLatin1) {        textEncoding = kCFStringEncodingWindowsLatin1;    }    return QTextCodec(textEncoding).toUnicode((const char*)[data bytes], [data length]).getNSString();}+ (NSString *)stringWithData:(NSData *)data textEncodingName:(NSString *)textEncodingName{    CFStringEncoding textEncoding = KWQCFStringEncodingFromIANACharsetName([textEncodingName lossyCString]);    return [WebCoreBridge stringWithData:data textEncoding:textEncoding];}#endifvoid updateAllViews(){    for (QPtrListIterator<KWQKHTMLPart> it(KWQKHTMLPart::instances()); it.current(); ++it) {        KWQKHTMLPart *part = it.current();        part->bridge()->setNeedsReapplyStyles();    }}bool WebCoreBridge::needsLayout(){    RenderObject *renderer = _part->renderer();    return renderer ? renderer->needsLayout() : false;}void WebCoreBridge::setNeedsLayout(){    RenderObject *renderer = _part->renderer();    if (renderer)        renderer->setNeedsLayout(true);}#if 0- (BOOL)interceptKeyEvent:(NSEvent *)event toView:(NSView *)view{    return _part->keyEvent(event);}#endifconst gchar* WebCoreBridge::renderTreeAsExternalRepresentation(){    assignToString(&_renderTree, externalRepresentation(_part->renderer()).utf8());    return _renderTree;}void WebCoreBridge::setUsesInactiveTextBackgroundColor(bool uses){    _part->setUsesInactiveTextBackgroundColor(uses);}bool WebCoreBridge::usesInactiveTextBackgroundColor(){    return _part->usesInactiveTextBackgroundColor();}bool WebCoreBridge::interceptKeyEvent(GdkEventKey *_event, bool autoRepeat){    QKeyEvent event(_event, autoRepeat);    return _part->keyEvent(&event);}void WebCoreBridge::setShouldCreateRenderers(bool f){    _shouldCreateRenderers = f;}bool WebCoreBridge::shouldCreateRenderers(){    return _shouldCreateRenderers;}int WebCoreBridge::numPendingOrLoadingRequests(){    DocumentImpl *doc = _part->xmlDocImpl();        if (doc)        return KWQNumberOfPendingOrLoadingRequests (doc->docLoader());    return 0;}void WebCoreBridge::bodyBackgroundColor(GdkColor* outColor){    _part->bodyBackgroundColor().getGdkColor(outColor);}void WebCoreBridge::adjustViewSize(){    KHTMLView *view = _part->view();    if (view)        view->adjustViewSize();}bool WebCoreBridge::hasStaticBackground(){    KHTMLView *view = _part->view();    if (view) 	return view->hasStaticBackground();    return false;}WebCoreElementInfo::WebCoreElementInfo()    : isSelected(false), linkTitle(0), linkLabel(0), linkURL(0), linkTarget(0), imageURL(0),imageAltText(0) {    imageRect.x = imageRect.y = imageRect.width = imageRect.height = -1;}#if 0// MOUSE EVENT STUFFstatic intget_qt_button_state( GdkModifierType state ){    int qstate = Qt::NoButton;        if (state & GDK_BUTTON1_MASK)	qstate|=Qt::LeftButton;    if (state & GDK_BUTTON2_MASK)	qstate|=Qt::MidButton;    if (state & GDK_BUTTON3_MASK)		qstate|=Qt::RightButton;        if (state & GDK_SHIFT_MASK)	qstate|=Qt::ShiftButton;    if (state & GDK_CONTROL_MASK)	qstate|=Qt::ControlButton;    if (state & GDK_MOD1_MASK) 	qstate|=Qt::AltButton;    return qstate;}static int get_qt_button_state_num( int button){    if (button == 1)	return Qt::LeftButton;    if (button == 2)	return Qt::MidButton;    if (button == 3)	return Qt::RightButton;    // unknown button    return Qt::NoButton;}    static GdkEventType last_event = GDK_BUTTON_RELEASE;    static int click_count = 1;    BridgeImpl *bridge = static_cast<BridgeImpl*>(data);    assert(bridge);    GdkModifierType state = (GdkModifierType) event->state;    int x,y;    x = (int) event->x;    y = (int) event->y;    _map_to_parent_window(widget->window, event->window, x, y);#if DEBUG    g_printerr(" sending : (%d;%d)\n", x,y);#endif    switch (event->type) {     case GDK_3BUTTON_PRESS:	++click_count;	/* fall through */    case GDK_2BUTTON_PRESS:	++click_count;	/* fall through */    case GDK_BUTTON_PRESS:    {	bridge->mouseDown(event); 	break;    }    case GDK_BUTTON_RELEASE:    {	bridge->mouseUp(event); 	click_count = 1;	break;    }    default:	break;	    }	    last_event = event->type;    switch (event->type) {     case GDK_3BUTTON_PRESS:	++click_count;	/* fall through */    case GDK_2BUTTON_PRESS:	++click_count;	/* fall through */    case GDK_BUTTON_PRESS:    {	QMouseEvent qmm(QEvent::MouseButtonPress, QPoint(x,y), get_qt_button_state(state) | get_qt_button_state_num(event->button), click_count);	break;    }    case GDK_BUTTON_RELEASE:    {	QMouseEvent qmm(QEvent::MouseButtonRelease, QPoint(x,y), get_qt_button_state(state) | get_qt_button_state_num(event->button), click_count);	click_count = 1;	break;    }    default:	break;	    }#endif 

⌨️ 快捷键说明

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