diff options
author | Feng Qian <> | 2009-04-10 18:11:29 -0700 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-04-10 18:11:29 -0700 |
commit | 8f72e70a9fd78eec56623b3a62e68f16b7b27e28 (patch) | |
tree | 181bf9a400c30a1bf34ea6d72560e8d00111d549 /WebCore/dom/PositionIterator.cpp | |
parent | 7ed56f225e0ade046e1c2178977f72b2d896f196 (diff) | |
download | external_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.cpp | 22 |
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; |