📄 webcorebridge.cpp
字号:
}
- (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 + -