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

📄 webcorebridge.cpp

📁 手机浏览器源码程序,功能强大
💻 CPP
📖 第 1 页 / 共 5 页
字号:
}

- (NSRect)selectionRect
{
    return iPart->selectionRect();
}

- (NSRect)visibleSelectionRect
{
    return iPart->visibleSelectionRect();
}

- (NSImage *)selectionImage
{
    return iPart->selectionImage();
}

*/
EXPORT_C
void CWebCoreBridge::SetName(const TDesC& aName)
{
    iPart->KHTMLPart::setName(QString::FromDes(aName));
}

EXPORT_C
TPtrC CWebCoreBridge::Name() const
{
    return iPart->name().Des();
}

EXPORT_C
TPtrC CWebCoreBridge::URL() const
{
    return iPart->url().Des();
}

EXPORT_C
TPtrC CWebCoreBridge::Referrer() const
{
    return iPart->referrer().Des();
}

EXPORT_C
TPtrC CWebCoreBridge::Domain() const
{
    DocumentImpl *doc = iPart->xmlDocImpl();
    if (doc && doc->isHTMLDocument()) {
        return doc->domain().string().Des();
    }
    return KNullDesC();
}

// ### NOT IMPLEMENTED text encoding
/*
+ (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];
}
*/

EXPORT_C
void CWebCoreBridge::UpdateAllViews()
{
    for (QPtrListIterator<KWQKHTMLPart> it(KWQKHTMLPart::instances()); it.current(); ++it) {
        KWQKHTMLPart *part = it.current();
        part->bridge()->Client().SetNeedsReapplyStyles();
    }
}

EXPORT_C
TBool CWebCoreBridge::NeedsLayout() const
{
    RenderObject *renderer = iPart->renderer();
    return renderer ? renderer->needsLayout() : false;
}

EXPORT_C
void CWebCoreBridge::SetNeedsLayout()
{
    RenderObject *renderer = iPart->renderer();
    if (renderer)
        renderer->setNeedsLayout(true);
}

EXPORT_C
TBool CWebCoreBridge::KeyEvent(TKeyEvent aEvent, TBool aUpEvent)
{
    return iPart->KeyEvent(aEvent, aUpEvent);
}

EXPORT_C
void CWebCoreBridge::ActivateEvent(TPoint &aPoint)
{
    iPart->activateNodeAtPoint(QPoint(aPoint.iX,aPoint.iY));
}

EXPORT_C
void CWebCoreBridge::DeActivateEvent(TBool aAcceptChanges)
{
  iPart->deActivateEvent(aAcceptChanges);
  iPart->xmlDocImpl()->setFocusNode( 0 );
}


EXPORT_C
void CWebCoreBridge::RemoveFileName( TPoint& aPoint )
{
    RenderObject::NodeInfo renderInfo(true, false);
    iPart->renderer()->layer()->hitTest(renderInfo, aPoint.iX, aPoint.iY);

    NodeImpl *node = renderInfo.innerNode();

    // is element node
    if( node && node->isElementNode() && idFromNode(node) ==  ID_INPUT)
    {
        // the is a file
        HTMLInputElementImpl* inputElement = static_cast<HTMLInputElementImpl *>(node);

        if(inputElement->inputType() == HTMLInputElementImpl::FILE &&
            inputElement->value().length())
        {

            //Check if the render object is valid and is a widget
            if (node->renderer() && node->renderer()->isWidget())
            {
                QWidget *widget = static_cast<RenderWidget *>(node->renderer())->widget();
                if(widget )
                {
                    static_cast<KWQFileButton*>(widget)->setFilename("");
                }
            }
        }
    }
}

EXPORT_C
void CWebCoreBridge::PointerEvent(TPointerEvent aEvent)
{
    switch (aEvent.iType)
    {
        case TPointerEvent::EButton1Down:
        case TPointerEvent::EButton2Down:
        case TPointerEvent::EButton3Down:
            iPart->MouseDown(aEvent);
            break;
        case TPointerEvent::EButton1Up:
        case TPointerEvent::EButton2Up:
        case TPointerEvent::EButton3Up:
            iPart->MouseUp(aEvent);
            break;
        case TPointerEvent::EMove:
            iPart->MouseMoved(aEvent);
            break;
         case TPointerEvent::EDrag:
            iPart->MouseDragged(aEvent);
            break;
        default: ;
    }
}

// ### NOT IMPLEMENTED events
/*
- (BOOL)interceptKeyEvent:(NSEvent *)event toView:(NSView *)view
{
    return iPart->keyEvent(event);
}
*/

// ### NOT IMPLEMENTED debug
/*
- (NSString *)renderTreeAsExternalRepresentation
{
    return externalRepresentation(iPart->renderer()).getNSString();
}
*/


/*EXPORT_C
void CWebCoreBridge::SetUsesInactiveTextBackgroundColor(TBool aUses)
{
    iPart->setUsesInactiveTextBackgroundColor(aUses);
}

EXPORT_C
TBool CWebCoreBridge::UsesInactiveTextBackgroundColor()
{
    return iPart->usesInactiveTextBackgroundColor();
}*/

// ### NOT IMPLEMENTED ??
/*
- (void)setShowsFirstResponder:(BOOL)flag
{
    iPart->setShowsFirstResponder(flag);
}
*/

EXPORT_C
void CWebCoreBridge::SetShouldCreateRenderers(TBool aCreateRenderers)
{
    iShouldCreateRenderers = aCreateRenderers;
}

EXPORT_C
TBool CWebCoreBridge::ShouldCreateRenderers()
{
    return iShouldCreateRenderers;
}

EXPORT_C
TInt CWebCoreBridge::NumPendingOrLoadingRequests()
{
    DocumentImpl *doc = iPart->xmlDocImpl();

    if (doc)
        return KWQNumberOfPendingOrLoadingRequests (doc->docLoader());
    return 0;
}

EXPORT_C
TRgb CWebCoreBridge::BodyBackgroundColor()
{
    return iPart->BodyBackgroundColor();
}

EXPORT_C
TRgb CWebCoreBridge::SelectionColor()
{
    RenderCanvas* root = static_cast<khtml::RenderCanvas *>(iPart->xmlDocImpl()->renderer());
    if (root) {
        RenderStyle *pseudoStyle = root->getPseudoStyle(RenderStyle::SELECTION);
        if (pseudoStyle && pseudoStyle->backgroundColor().isValid()) {
            return pseudoStyle->backgroundColor().Rgb();
        }
    }
    return TRgb(0xff,0,0);

// ### NOT IMPLEMENTED selection colors
    //return iPart->usesInactiveTextBackgroundColor() ? [NSColor secondarySelectedControlColor] : [NSColor selectedTextBackgroundColor];
}

EXPORT_C
void CWebCoreBridge::AdjustViewSize()
{
    KHTMLView *view = iPart->view();
    if (view)
        view->adjustViewSize();
}

EXPORT_C void CWebCoreBridge::ExecuteScript(const TDesC& aScriptText)
{
  NodeImpl* node = iPart->xmlDocImpl()->focusNode();
  if (iPart && node)
     iPart->executeScript(node,QString::FromDes(aScriptText));
}


// ### NOT IMPLEMENTED accessibility
/*
-(id)accessibilityTree
{
    KWQAccObjectCache::enableAccessibility();
    if (!iPart || !iPart->xmlDocImpl()) return nil;
    RenderCanvas* root = static_cast<khtml::RenderCanvas *>(iPart->xmlDocImpl()->renderer());
    if (!root) return nil;
    return iPart->xmlDocImpl()->getOrCreateAccObjectCache()->accObject(root);
}
*/


EXPORT_C
void CWebCoreBridge::SetDrawsBackground(TBool aDrawsBackground)
{
    if (iPart && iPart->view())
        iPart->view()->setTransparent(!aDrawsBackground);
}

EXPORT_C HBufC* CWebCoreBridge::ResolveUrlL(const TDesC &aBaseUrl, const TDesC &aResUrl)
{
    QString resource = QString::FromDes(aResUrl);
    KURL baseUrl(aBaseUrl);
    KURL url(baseUrl,resource,NULL);
    QString completeUrl = url.url();
    HBufC* newUrl = HBufC::NewL(completeUrl.length() + 1);
    TPtr newUrlPtr = newUrl->Des();
    newUrlPtr.Copy(completeUrl.Des());
    return newUrl;
}

// ### NOT IMPLEMENTED editing & dom interface
/*
- (void)undoEditing:(id)arg
{
    ASSERT([arg isKindOfClass:[KWQEditCommand class]]);

    EditCommand cmd([arg impl]);
    cmd.unapply();
}

- (void)redoEditing:(id)arg
{
    ASSERT([arg isKindOfClass:[KWQEditCommand class]]);

    EditCommand cmd([arg impl]);
    cmd.reapply();
}

- (DOMRange *)selectedDOMRangeWithGranularity:(WebSelectionGranularity)granularity
{
    if (!iPart)
        return nil;

    // NOTE: The enums *must* match the very similar ones declared in ktml_selection.h
    Selection selection(iPart->selection());
    selection.expandUsingGranularity(static_cast<Selection::ETextGranularity>(granularity));
    return [DOMRange _rangeWithImpl:selection.toRange().handle()];
}

- (DOMRange *)rangeByAlteringCurrentSelection:(WebSelectionAlteration)alteration direction:(WebSelectionDirection)direction granularity:(WebSelectionGranularity)granularity
{
    if (!iPart)
        return nil;

    // NOTE: The enums *must* match the very similar ones declared in ktml_selection.h
    Selection selection(iPart->selection());
    selection.modify(static_cast<Selection::EAlter>(alteration),
                     static_cast<Selection::EDirection>(direction),
                     static_cast<Selection::ETextGranularity>(granularity));
    return [DOMRange _rangeWithImpl:selection.toRange().handle()];
}

- (void)alterCurrentSelection:(WebSelectionAlteration)alteration direction:(WebSelectionDirection)direction granularity:(WebSelectionGranularity)granularity
{
    if (!iPart)
        return;

    // NOTE: The enums *must* match the very similar ones declared in dom_selection.h
    Selection selection(iPart->selection());
    selection.modify(static_cast<Selection::EAlter>(alteration),
                     static_cast<Selection::EDirection>(direction),
                     static_cast<Selection::ETextGranularity>(granularity));

    // save vertical navigation x position if necessary
    int xPos = KHTMLPart::NoXPosForVerticalArrowNavigation;
    if (granularity == WebSelectByLine)
        xPos = iPart->xPosForVerticalArrowNavigation();

    // setting the selection always clears saved vertical navigation x position
    iPart->setSelection(selection);

    // restore vertical navigation x position if necessary
    if (xPos != KHTMLPart::NoXPosForVerticalArrowNavigation)
        iPart->setXPosForVerticalArrowNavigation(xPos);

    [self ensureCaretVisible];
}

- (void)setSelectedDOMRange:(DOMRange *)range affinity:(NSSelectionAffinity)selectionAffinity
{
    NodeImpl *startContainer = [[range startContainer] _nodeImpl];
    NodeImpl *endContainer = [[range endContainer] _nodeImpl];
    ASSERT(startContainer);
    ASSERT(endContainer);
    ASSERT(startContainer->getDocument());
    ASSERT(startContainer->getDocument() == endContainer->getDocument());

    DocumentImpl *doc = startContainer->getDocument();
    doc->updateLayout();
    Selection selection(Position(startContainer, [range startOffset]), Position(endContainer, [range endOffset]));
    selection.setAffinity(static_cast<Selection::EAffinity>(selectionAffinity));
    iPart->setSelection(selection);
}

- (DOMRange *)selectedDOMRange
{
    return [DOMRange _rangeWithImpl:iPart->selection().toRange().handle()];
}

- (NSSelectionAffinity)selectionAffinity
{
    return static_cast<NSSelectionAffinity>(iPart->selection().affinity());
}

- (DOMDocumentFragment *)documentFragmentWithMarkupString:(NSString *)markupString baseURLString:(NSString *)baseURLString
{
    DOM::DocumentImpl *document = iPart->xmlDocImpl();
    DOM::DocumentFragmentImpl *fragment = static_cast<HTMLElementImpl *>(document->documentElement())->createContextualFragment(markupString);
    ASSERT(fragment);

    if ([baseURLString length] > 0) {
        DOM::DOMString baseURL = baseURLString;
        if (baseURL != document->baseURL()) {
            fragment->recursive_completeURLs(baseURL.string());
        }
    }
    return [DOMDocumentFragment _documentFragmentWithImpl:fragment];
}

- (DOMDocumentFragment *)documentFragmentWithText:(NSString *)text
{
    DOMDocument *document = [self DOMDocument];
    DOMDocumentFragment *fragment = [document createDocumentFragment];
    [fragment appendChild:[document createTextNode:text]];
    return fragment;
}

- (void)replaceSelectionWithFragment:(DOMDocumentFragment *)fragment selectReplacement:(BOOL)selectReplacement
{
    if (!iPart || !iPart->xmlDocImpl() || !fragment)
        return;

    ReplaceSelectionCommand cmd(iPart->xmlDocImpl(), [fragment _fragmentImpl], selectReplacement);
    cmd.apply();
    [self ensureCaretVisible];
}

- (void)replaceSelectionWithNode:(DOMNode *)node selectReplacement:(BOOL)selectReplacement
{
    DOMDocumentFragment *fragment = [[self DOMDocument] createDocumentFragment];

⌨️ 快捷键说明

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