summaryrefslogtreecommitdiffstats
path: root/WebCore/dom/Position.cpp
diff options
context:
space:
mode:
authorSteve Block <steveblock@google.com>2010-04-27 16:31:00 +0100
committerSteve Block <steveblock@google.com>2010-05-11 14:42:12 +0100
commitdcc8cf2e65d1aa555cce12431a16547e66b469ee (patch)
tree92a8d65cd5383bca9749f5327fb5e440563926e6 /WebCore/dom/Position.cpp
parentccac38a6b48843126402088a309597e682f40fe6 (diff)
downloadexternal_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.cpp30
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())