summaryrefslogtreecommitdiffstats
path: root/WebCore/dom/PositionIterator.cpp
diff options
context:
space:
mode:
authorFeng Qian <>2009-04-10 18:11:29 -0700
committerThe Android Open Source Project <initial-contribution@android.com>2009-04-10 18:11:29 -0700
commit8f72e70a9fd78eec56623b3a62e68f16b7b27e28 (patch)
tree181bf9a400c30a1bf34ea6d72560e8d00111d549 /WebCore/dom/PositionIterator.cpp
parent7ed56f225e0ade046e1c2178977f72b2d896f196 (diff)
downloadexternal_webkit-8f72e70a9fd78eec56623b3a62e68f16b7b27e28.zip
external_webkit-8f72e70a9fd78eec56623b3a62e68f16b7b27e28.tar.gz
external_webkit-8f72e70a9fd78eec56623b3a62e68f16b7b27e28.tar.bz2
AI 145796: Land the WebKit merge @r42026.
Automated import of CL 145796
Diffstat (limited to 'WebCore/dom/PositionIterator.cpp')
-rw-r--r--WebCore/dom/PositionIterator.cpp22
1 files changed, 14 insertions, 8 deletions
diff --git a/WebCore/dom/PositionIterator.cpp b/WebCore/dom/PositionIterator.cpp
index 06e1e32..781d352 100644
--- a/WebCore/dom/PositionIterator.cpp
+++ b/WebCore/dom/PositionIterator.cpp
@@ -36,7 +36,13 @@ using namespace HTMLNames;
PositionIterator::operator Position() const
{
- return Position(m_parent, m_child ? m_child->nodeIndex() : (m_parent->hasChildNodes() ? maxDeepOffset(m_parent) : m_offset));
+ if (m_child) {
+ ASSERT(m_child->parentNode() == m_parent);
+ return positionBeforeNode(m_child);
+ }
+ if (m_parent->hasChildNodes())
+ return lastDeepEditingPositionForNode(m_parent);
+ return Position(m_parent, m_offset);
}
void PositionIterator::increment()
@@ -51,7 +57,7 @@ void PositionIterator::increment()
return;
}
- if (!m_parent->hasChildNodes() && m_offset < maxDeepOffset(m_parent))
+ if (!m_parent->hasChildNodes() && m_offset < lastOffsetForEditing(m_parent))
m_offset = Position::uncheckedNextOffset(m_parent, m_offset);
else {
m_child = m_parent;
@@ -70,7 +76,7 @@ void PositionIterator::decrement()
m_parent = m_child->previousSibling();
if (m_parent) {
m_child = 0;
- m_offset = m_parent->hasChildNodes() ? 0 : maxDeepOffset(m_parent);
+ m_offset = m_parent->hasChildNodes() ? 0 : lastOffsetForEditing(m_parent);
} else {
m_child = m_child->parentNode();
m_parent = m_child->parentNode();
@@ -85,7 +91,7 @@ void PositionIterator::decrement()
if (m_parent->hasChildNodes()) {
m_parent = m_parent->lastChild();
if (!m_parent->hasChildNodes())
- m_offset = maxDeepOffset(m_parent);
+ m_offset = lastOffsetForEditing(m_parent);
} else {
m_child = m_parent;
m_parent = m_parent->parentNode();
@@ -99,7 +105,7 @@ bool PositionIterator::atStart() const
return true;
if (m_parent->parentNode())
return false;
- return !m_parent->hasChildNodes() && !m_offset || m_child && !m_child->previousSibling();
+ return (!m_parent->hasChildNodes() && !m_offset) || (m_child && !m_child->previousSibling());
}
bool PositionIterator::atEnd() const
@@ -108,7 +114,7 @@ bool PositionIterator::atEnd() const
return true;
if (m_child)
return false;
- return !m_parent->parentNode() && (m_parent->hasChildNodes() || m_offset >= maxDeepOffset(m_parent));
+ return !m_parent->parentNode() && (m_parent->hasChildNodes() || m_offset >= lastOffsetForEditing(m_parent));
}
bool PositionIterator::atStartOfNode() const
@@ -126,7 +132,7 @@ bool PositionIterator::atEndOfNode() const
return true;
if (m_child)
return false;
- return m_parent->hasChildNodes() || m_offset >= maxDeepOffset(m_parent);
+ return m_parent->hasChildNodes() || m_offset >= lastOffsetForEditing(m_parent);
}
bool PositionIterator::isCandidate() const
@@ -151,7 +157,7 @@ bool PositionIterator::isCandidate() const
return (atStartOfNode() || atEndOfNode()) && !Position::nodeIsUserSelectNone(m_parent->parent());
if (!m_parent->hasTagName(htmlTag) && renderer->isBlockFlow() && !Position::hasRenderedNonAnonymousDescendantsWithHeight(renderer) &&
- (static_cast<RenderBlock*>(renderer)->height() || m_parent->hasTagName(bodyTag)))
+ (toRenderBlock(renderer)->height() || m_parent->hasTagName(bodyTag)))
return atStartOfNode() && !Position::nodeIsUserSelectNone(m_parent);
return false;