diff options
| author | Iain Merrick <husky@google.com> | 2010-09-13 16:35:48 +0100 |
|---|---|---|
| committer | Iain Merrick <husky@google.com> | 2010-09-16 12:10:42 +0100 |
| commit | 5abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306 (patch) | |
| tree | ddce1aa5e3b6967a69691892e500897558ff8ab6 /WebCore/editing/mac | |
| parent | 12bec63ec71e46baba27f0bd9bd9d8067683690a (diff) | |
| download | external_webkit-5abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306.zip external_webkit-5abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306.tar.gz external_webkit-5abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306.tar.bz2 | |
Merge WebKit at r67178 : Initial merge by git.
Change-Id: I57e01163b6866cb029cdadf405a0394a3918bc18
Diffstat (limited to 'WebCore/editing/mac')
| -rw-r--r-- | WebCore/editing/mac/EditorMac.mm | 105 |
1 files changed, 103 insertions, 2 deletions
diff --git a/WebCore/editing/mac/EditorMac.mm b/WebCore/editing/mac/EditorMac.mm index 2c5a602..ac658c8 100644 --- a/WebCore/editing/mac/EditorMac.mm +++ b/WebCore/editing/mac/EditorMac.mm @@ -26,10 +26,12 @@ #import "config.h" #import "Editor.h" +#import "ColorMac.h" #import "ClipboardMac.h" -#import "DocLoader.h" +#import "CachedResourceLoader.h" #import "Frame.h" #import "FrameView.h" +#import "RenderBlock.h" namespace WebCore { @@ -63,10 +65,109 @@ void Editor::paste() FrameView* view = m_frame->view(); if (!view) return; - DocLoader* loader = m_frame->document()->docLoader(); + CachedResourceLoader* loader = m_frame->document()->cachedResourceLoader(); loader->setAllowStaleResources(true); [view->documentView() tryToPerform:@selector(paste:) with:nil]; loader->setAllowStaleResources(false); } +NSDictionary* Editor::fontAttributesForSelectionStart() const +{ + Node* nodeToRemove; + RenderStyle* style = styleForSelectionStart(nodeToRemove); + if (!style) + return nil; + + NSMutableDictionary* result = [NSMutableDictionary dictionary]; + + if (style->visitedDependentColor(CSSPropertyBackgroundColor).isValid() && style->visitedDependentColor(CSSPropertyBackgroundColor).alpha() != 0) + [result setObject:nsColor(style->visitedDependentColor(CSSPropertyBackgroundColor)) forKey:NSBackgroundColorAttributeName]; + + if (style->font().primaryFont()->getNSFont()) + [result setObject:style->font().primaryFont()->getNSFont() forKey:NSFontAttributeName]; + + if (style->visitedDependentColor(CSSPropertyColor).isValid() && style->visitedDependentColor(CSSPropertyColor) != Color::black) + [result setObject:nsColor(style->visitedDependentColor(CSSPropertyColor)) forKey:NSForegroundColorAttributeName]; + + const ShadowData* shadow = style->textShadow(); + if (shadow) { + NSShadow* s = [[NSShadow alloc] init]; + [s setShadowOffset:NSMakeSize(shadow->x(), shadow->y())]; + [s setShadowBlurRadius:shadow->blur()]; + [s setShadowColor:nsColor(shadow->color())]; + [result setObject:s forKey:NSShadowAttributeName]; + } + + int decoration = style->textDecorationsInEffect(); + if (decoration & LINE_THROUGH) + [result setObject:[NSNumber numberWithInt:NSUnderlineStyleSingle] forKey:NSStrikethroughStyleAttributeName]; + + int superscriptInt = 0; + switch (style->verticalAlign()) { + case BASELINE: + case BOTTOM: + case BASELINE_MIDDLE: + case LENGTH: + case MIDDLE: + case TEXT_BOTTOM: + case TEXT_TOP: + case TOP: + break; + case SUB: + superscriptInt = -1; + break; + case SUPER: + superscriptInt = 1; + break; + } + if (superscriptInt) + [result setObject:[NSNumber numberWithInt:superscriptInt] forKey:NSSuperscriptAttributeName]; + + if (decoration & UNDERLINE) + [result setObject:[NSNumber numberWithInt:NSUnderlineStyleSingle] forKey:NSUnderlineStyleAttributeName]; + + if (nodeToRemove) { + ExceptionCode ec = 0; + nodeToRemove->remove(ec); + ASSERT(ec == 0); + } + + return result; +} + +NSWritingDirection Editor::baseWritingDirectionForSelectionStart() const +{ + NSWritingDirection result = NSWritingDirectionLeftToRight; + + Position pos = m_frame->selection()->selection().visibleStart().deepEquivalent(); + Node* node = pos.node(); + if (!node) + return result; + + RenderObject* renderer = node->renderer(); + if (!renderer) + return result; + + if (!renderer->isBlockFlow()) { + renderer = renderer->containingBlock(); + if (!renderer) + return result; + } + + RenderStyle* style = renderer->style(); + if (!style) + return result; + + switch (style->direction()) { + case LTR: + result = NSWritingDirectionLeftToRight; + break; + case RTL: + result = NSWritingDirectionRightToLeft; + break; + } + + return result; +} + } // namespace WebCore |
