diff options
author | Steve Block <steveblock@google.com> | 2010-04-27 16:31:00 +0100 |
---|---|---|
committer | Steve Block <steveblock@google.com> | 2010-05-11 14:42:12 +0100 |
commit | dcc8cf2e65d1aa555cce12431a16547e66b469ee (patch) | |
tree | 92a8d65cd5383bca9749f5327fb5e440563926e6 /WebCore/dom/Position.cpp | |
parent | ccac38a6b48843126402088a309597e682f40fe6 (diff) | |
download | external_webkit-dcc8cf2e65d1aa555cce12431a16547e66b469ee.zip external_webkit-dcc8cf2e65d1aa555cce12431a16547e66b469ee.tar.gz external_webkit-dcc8cf2e65d1aa555cce12431a16547e66b469ee.tar.bz2 |
Merge webkit.org at r58033 : Initial merge by git
Change-Id: If006c38561af287c50cd578d251629b51e4d8cd1
Diffstat (limited to 'WebCore/dom/Position.cpp')
-rw-r--r-- | WebCore/dom/Position.cpp | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/WebCore/dom/Position.cpp b/WebCore/dom/Position.cpp index c0f6fa3..fa994e3 100644 --- a/WebCore/dom/Position.cpp +++ b/WebCore/dom/Position.cpp @@ -27,7 +27,6 @@ #include "Position.h" #include "CSSComputedStyleDeclaration.h" -#include "CString.h" #include "CharacterNames.h" #include "Logging.h" #include "PositionIterator.h" @@ -38,6 +37,7 @@ #include "htmlediting.h" #include "visible_units.h" #include <stdio.h> +#include <wtf/text/CString.h> namespace WebCore { @@ -946,14 +946,7 @@ Position Position::trailingWhitespacePosition(EAffinity, bool considerNonCollaps void Position::getInlineBoxAndOffset(EAffinity affinity, InlineBox*& inlineBox, int& caretOffset) const { - TextDirection primaryDirection = LTR; - for (RenderObject* r = node()->renderer(); r; r = r->parent()) { - if (r->isBlockFlow()) { - primaryDirection = r->style()->direction(); - break; - } - } - getInlineBoxAndOffset(affinity, primaryDirection, inlineBox, caretOffset); + getInlineBoxAndOffset(affinity, primaryDirection(), inlineBox, caretOffset); } static bool isNonTextLeafChild(RenderObject* object) @@ -1018,7 +1011,7 @@ void Position::getInlineBoxAndOffset(EAffinity affinity, TextDirection primaryDi inlineBox = toRenderBox(renderer)->inlineBoxWrapper(); if (!inlineBox || (caretOffset > inlineBox->caretMinOffset() && caretOffset < inlineBox->caretMaxOffset())) return; - } else if (node()->isContentEditable()) { + } else if (!node()->isLink() && node()->isContentEditable()) { Position pos = positionInParentBeforeNode(node()).upstream(); pos.getInlineBoxAndOffset(DOWNSTREAM, primaryDirection, inlineBox, caretOffset); return; @@ -1041,7 +1034,8 @@ void Position::getInlineBoxAndOffset(EAffinity affinity, TextDirection primaryDi return; } - if ((caretOffset == caretMinOffset) ^ (affinity == UPSTREAM)) + if (((caretOffset == caretMaxOffset) ^ (affinity == DOWNSTREAM)) + || ((caretOffset == caretMinOffset) ^ (affinity == UPSTREAM))) break; candidate = box; @@ -1146,6 +1140,20 @@ void Position::getInlineBoxAndOffset(EAffinity affinity, TextDirection primaryDi } } +TextDirection Position::primaryDirection() const +{ + TextDirection primaryDirection = LTR; + for (const RenderObject* r = m_anchorNode->renderer(); r; r = r->parent()) { + if (r->isBlockFlow()) { + primaryDirection = r->style()->direction(); + break; + } + } + + return primaryDirection; +} + + void Position::debugPosition(const char* msg) const { if (isNull()) |