Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(736)

Unified Diff: Source/core/editing/VisibleUnits.cpp

Issue 1311803004: Introduce composed tree version of rightPositionOf() (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: 2015-09-09T17:18:38 Rebase Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/editing/VisibleUnits.h ('k') | Source/core/editing/VisibleUnitsTest.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/editing/VisibleUnits.cpp
diff --git a/Source/core/editing/VisibleUnits.cpp b/Source/core/editing/VisibleUnits.cpp
index ee8bd3f25d5e2b2b2515911a3b7bdcdd10fab245..eeed6b1a28b9424474e0893b98889ad0e87bef02 100644
--- a/Source/core/editing/VisibleUnits.cpp
+++ b/Source/core/editing/VisibleUnits.cpp
@@ -2782,14 +2782,15 @@ VisiblePositionInComposedTree leftPositionOf(const VisiblePositionInComposedTree
return leftPositionOfAlgorithm<EditingInComposedTreeStrategy>(visiblePosition);
}
-static Position rightVisuallyDistinctCandidate(const VisiblePosition& visiblePosition)
+template <typename Strategy>
+static PositionAlgorithm<Strategy> rightVisuallyDistinctCandidate(const VisiblePositionTemplate<Strategy>& visiblePosition)
{
- const Position deepPosition = visiblePosition.deepEquivalent();
- Position p = deepPosition;
+ const PositionAlgorithm<Strategy> deepPosition = visiblePosition.deepEquivalent();
+ PositionAlgorithm<Strategy> p = deepPosition;
if (p.isNull())
- return Position();
+ return PositionAlgorithm<Strategy>();
- Position downstreamStart = mostForwardCaretPosition(p);
+ const PositionAlgorithm<Strategy> downstreamStart = mostForwardCaretPosition(p);
TextDirection primaryDirection = primaryDirectionOf(*p.anchorNode());
const TextAffinity affinity = visiblePosition.affinity();
@@ -2827,13 +2828,13 @@ static Position rightVisuallyDistinctCandidate(const VisiblePosition& visiblePos
// Overshot to the right.
InlineBox* nextBox = box->nextLeafChildIgnoringLineBreak();
if (!nextBox) {
- Position positionOnRight = primaryDirection == LTR ? nextVisuallyDistinctCandidate(deepPosition) : previousVisuallyDistinctCandidate(deepPosition);
+ PositionAlgorithm<Strategy> positionOnRight = primaryDirection == LTR ? nextVisuallyDistinctCandidate(deepPosition) : previousVisuallyDistinctCandidate(deepPosition);
if (positionOnRight.isNull())
- return Position();
+ return PositionAlgorithm<Strategy>();
InlineBox* boxOnRight = computeInlineBoxPosition(positionOnRight, affinity, primaryDirection).inlineBox;
if (boxOnRight && boxOnRight->root() == box->root())
- return Position();
+ return PositionAlgorithm<Strategy>();
return positionOnRight;
}
@@ -2901,8 +2902,7 @@ static Position rightVisuallyDistinctCandidate(const VisiblePosition& visiblePos
continue;
}
} else {
- // Trailing edge of a secondary run. Set to the leading edge of
- // the entire run.
+ // Trailing edge of a secondary run. Set to the leading edge of the entire run.
while (true) {
while (InlineBox* prevBox = box->prevLeafChild()) {
if (prevBox->bidiLevel() < level)
@@ -2927,7 +2927,7 @@ static Position rightVisuallyDistinctCandidate(const VisiblePosition& visiblePos
break;
}
- p = Position::editingPositionOf(layoutObject->node(), offset);
+ p = PositionAlgorithm<Strategy>::editingPositionOf(layoutObject->node(), offset);
if ((isVisuallyEquivalentCandidate(p) && mostForwardCaretPosition(p) != downstreamStart) || p.atStartOfTree() || p.atEndOfTree())
return p;
@@ -2936,19 +2936,30 @@ static Position rightVisuallyDistinctCandidate(const VisiblePosition& visiblePos
}
}
-VisiblePosition rightPositionOf(const VisiblePosition& visiblePosition)
+template <typename Strategy>
+static VisiblePositionTemplate<Strategy> rightPositionOfAlgorithm(const VisiblePositionTemplate<Strategy>& visiblePosition)
{
- const Position pos = rightVisuallyDistinctCandidate(visiblePosition);
- // TODO(yosin) Why can't we move left from the last position in a tree?
+ const PositionAlgorithm<Strategy> pos = rightVisuallyDistinctCandidate(visiblePosition);
+ // FIXME: Why can't we move left from the last position in a tree?
if (pos.atStartOfTree() || pos.atEndOfTree())
- return VisiblePosition();
+ return VisiblePositionTemplate<Strategy>();
- VisiblePosition right = createVisiblePosition(pos);
+ const VisiblePositionTemplate<Strategy> right = createVisiblePosition(pos);
ASSERT(right.deepEquivalent() != visiblePosition.deepEquivalent());
return directionOfEnclosingBlock(right.deepEquivalent()) == LTR ? honorEditingBoundaryAtOrAfter(right, visiblePosition.deepEquivalent()) : honorEditingBoundaryAtOrBefore(right, visiblePosition.deepEquivalent());
}
+VisiblePosition rightPositionOf(const VisiblePosition& visiblePosition)
+{
+ return rightPositionOfAlgorithm<EditingStrategy>(visiblePosition);
+}
+
+VisiblePositionInComposedTree rightPositionOf(const VisiblePositionInComposedTree& visiblePosition)
+{
+ return rightPositionOfAlgorithm<EditingInComposedTreeStrategy>(visiblePosition);
+}
+
template <typename Strategy>
static VisiblePositionTemplate<Strategy> nextPositionOfAlgorithm(const VisiblePositionTemplate<Strategy>& visiblePosition, EditingBoundaryCrossingRule rule)
{
« no previous file with comments | « Source/core/editing/VisibleUnits.h ('k') | Source/core/editing/VisibleUnitsTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698