Chromium Code Reviews| Index: third_party/WebKit/Source/core/editing/VisibleUnits.cpp |
| diff --git a/third_party/WebKit/Source/core/editing/VisibleUnits.cpp b/third_party/WebKit/Source/core/editing/VisibleUnits.cpp |
| index 6ab9347e7956955e656efcf9ca7369271f385b7e..59f2fb836c6e708d81ac73d78fbf43b24563cb95 100644 |
| --- a/third_party/WebKit/Source/core/editing/VisibleUnits.cpp |
| +++ b/third_party/WebKit/Source/core/editing/VisibleUnits.cpp |
| @@ -3391,9 +3391,8 @@ VisiblePositionInFlatTree rightPositionOf(const VisiblePositionInFlatTree& visib |
| template <typename Strategy> |
| static VisiblePositionTemplate<Strategy> nextPositionOfAlgorithm(const VisiblePositionTemplate<Strategy>& visiblePosition, EditingBoundaryCrossingRule rule) |
| { |
| - // TODO(xiaochengh): Ensure that this function is called with a valid |
| - // |visiblePosition|, and add |DCHECK(visiblePosition.isValid())|; |
| - const VisiblePositionTemplate<Strategy> next = createVisiblePositionDeprecated(nextVisuallyDistinctCandidate(visiblePosition.deepEquivalent()), visiblePosition.affinity()); |
| + DCHECK(visiblePosition.isValid()) << visiblePosition; |
| + const VisiblePositionTemplate<Strategy> next = createVisiblePosition(nextVisuallyDistinctCandidate(visiblePosition.deepEquivalent()), visiblePosition.affinity()); |
| switch (rule) { |
| case CanCrossEditingBoundary: |
| @@ -3418,6 +3417,33 @@ VisiblePositionInFlatTree nextPositionOf(const VisiblePositionInFlatTree& visibl |
| } |
| template <typename Strategy> |
| +static VisiblePositionTemplate<Strategy> nextPositionOfAlgorithmDeprecated(const VisiblePositionTemplate<Strategy>& visiblePosition, EditingBoundaryCrossingRule rule) |
|
yosin_UTC9
2016/09/27 10:05:39
How about making nextPositionOfAlgorithm to take P
Xiaocheng
2016/09/27 12:27:08
Good idea. Done.
|
| +{ |
| + const VisiblePositionTemplate<Strategy> next = createVisiblePositionDeprecated(nextVisuallyDistinctCandidate(visiblePosition.deepEquivalent()), visiblePosition.affinity()); |
| + |
| + switch (rule) { |
| + case CanCrossEditingBoundary: |
| + return next; |
| + case CannotCrossEditingBoundary: |
| + return honorEditingBoundaryAtOrAfter(next, visiblePosition.deepEquivalent()); |
| + case CanSkipOverEditingBoundary: |
| + return skipToEndOfEditingBoundary(next, visiblePosition.deepEquivalent()); |
| + } |
| + NOTREACHED(); |
| + return honorEditingBoundaryAtOrAfter(next, visiblePosition.deepEquivalent()); |
| +} |
| + |
| +VisiblePosition nextPositionOfDeprecated(const VisiblePosition& visiblePosition, EditingBoundaryCrossingRule rule) |
| +{ |
| + return nextPositionOfAlgorithmDeprecated<EditingStrategy>(visiblePosition, rule); |
| +} |
| + |
| +VisiblePositionInFlatTree nextPositionOfDeprecated(const VisiblePositionInFlatTree& visiblePosition, EditingBoundaryCrossingRule rule) |
| +{ |
| + return nextPositionOfAlgorithmDeprecated<EditingInFlatTreeStrategy>(visiblePosition, rule); |
| +} |
| + |
| +template <typename Strategy> |
| static VisiblePositionTemplate<Strategy> skipToStartOfEditingBoundary(const VisiblePositionTemplate<Strategy>& pos, const PositionTemplate<Strategy>& anchor) |
| { |
| DCHECK(pos.isValid()) << pos; |
| @@ -3445,8 +3471,7 @@ static VisiblePositionTemplate<Strategy> skipToStartOfEditingBoundary(const Visi |
| template <typename Strategy> |
| static VisiblePositionTemplate<Strategy> previousPositionOfAlgorithm(const VisiblePositionTemplate<Strategy>& visiblePosition, EditingBoundaryCrossingRule rule) |
| { |
| - // TODO(xiaochengh): Ensure that this function is called with a valid |
| - // |visiblePosition|, and add |DCHECK(visiblePosition.isValid())|; |
| + DCHECK(visiblePosition.isValid()) << visiblePosition; |
| const PositionTemplate<Strategy> pos = previousVisuallyDistinctCandidate(visiblePosition.deepEquivalent()); |
| // return null visible position if there is no previous visible position |
| @@ -3457,7 +3482,7 @@ static VisiblePositionTemplate<Strategy> previousPositionOfAlgorithm(const Visib |
| // because going previous from an |TextAffinity::Upstream| position can |
| // never yield another |TextAffinity::Upstream position| (unless line wrap |
| // length is 0!). |
| - const VisiblePositionTemplate<Strategy> prev = createVisiblePositionDeprecated(pos); |
| + const VisiblePositionTemplate<Strategy> prev = createVisiblePosition(pos); |
| if (prev.deepEquivalent() == visiblePosition.deepEquivalent()) |
| return VisiblePositionTemplate<Strategy>(); |
| @@ -3484,4 +3509,44 @@ VisiblePositionInFlatTree previousPositionOf(const VisiblePositionInFlatTree& vi |
| return previousPositionOfAlgorithm<EditingInFlatTreeStrategy>(visiblePosition, rule); |
| } |
| +template <typename Strategy> |
| +static VisiblePositionTemplate<Strategy> previousPositionOfAlgorithmDeprecated(const VisiblePositionTemplate<Strategy>& visiblePosition, EditingBoundaryCrossingRule rule) |
|
yosin_UTC9
2016/09/27 10:05:39
Ditto as nextPositionOfAlgorithm.
Xiaocheng
2016/09/27 12:27:08
Done.
|
| +{ |
| + const PositionTemplate<Strategy> pos = previousVisuallyDistinctCandidate(visiblePosition.deepEquivalent()); |
| + |
| + // return null visible position if there is no previous visible position |
| + if (pos.atStartOfTree()) |
| + return VisiblePositionTemplate<Strategy>(); |
| + |
| + // we should always be able to make the affinity |TextAffinity::Downstream|, |
| + // because going previous from an |TextAffinity::Upstream| position can |
| + // never yield another |TextAffinity::Upstream position| (unless line wrap |
| + // length is 0!). |
| + const VisiblePositionTemplate<Strategy> prev = createVisiblePositionDeprecated(pos); |
| + if (prev.deepEquivalent() == visiblePosition.deepEquivalent()) |
| + return VisiblePositionTemplate<Strategy>(); |
| + |
| + switch (rule) { |
| + case CanCrossEditingBoundary: |
| + return prev; |
| + case CannotCrossEditingBoundary: |
| + return honorEditingBoundaryAtOrBefore(prev, visiblePosition.deepEquivalent()); |
| + case CanSkipOverEditingBoundary: |
| + return skipToStartOfEditingBoundary(prev, visiblePosition.deepEquivalent()); |
| + } |
| + |
| + NOTREACHED(); |
| + return honorEditingBoundaryAtOrBefore(prev, visiblePosition.deepEquivalent()); |
| +} |
| + |
| +VisiblePosition previousPositionOfDeprecated(const VisiblePosition& visiblePosition, EditingBoundaryCrossingRule rule) |
| +{ |
| + return previousPositionOfAlgorithmDeprecated<EditingStrategy>(visiblePosition, rule); |
| +} |
| + |
| +VisiblePositionInFlatTree previousPositionOfDeprecated(const VisiblePositionInFlatTree& visiblePosition, EditingBoundaryCrossingRule rule) |
| +{ |
| + return previousPositionOfAlgorithmDeprecated<EditingInFlatTreeStrategy>(visiblePosition, rule); |
| +} |
| + |
| } // namespace blink |