Commit ff62446d authored by Xiaocheng Hu's avatar Xiaocheng Hu Committed by Commit Bot

Stop using canonical versions of Previous/NextWordPosition() in SelectionModifier

This patch changes SelectionModifier to use non-canonical versions of
Previous/NextWordPosition() to reduce usage of VisiblePosition().

Now that the canonical versions are no longer used, they are also
removed by this patch.

Bug: 657237
Change-Id: Ifa908bfb6bda948e78d4afc8171be55343eaa0ea
Reviewed-on: https://chromium-review.googlesource.com/c/1315930Reviewed-by: default avatarYoshifumi Inoue <yosin@chromium.org>
Commit-Queue: Xiaocheng Hu <xiaochengh@chromium.org>
Cr-Commit-Position: refs/heads/master@{#605249}
parent 2b3a9771
...@@ -253,15 +253,15 @@ VisiblePosition SelectionModifier::EndForPlatform() const { ...@@ -253,15 +253,15 @@ VisiblePosition SelectionModifier::EndForPlatform() const {
return PositionForPlatform(false); return PositionForPlatform(false);
} }
VisiblePosition SelectionModifier::NextWordPositionForPlatform( Position SelectionModifier::NextWordPositionForPlatform(
const VisiblePosition& original_position) { const Position& original_position) {
VisiblePosition position_after_current_word = // Next word position can't be upstream.
NextWordPosition(original_position); const Position position_after_current_word =
NextWordPosition(original_position).GetPosition();
if (!GetFrame().GetEditor().Behavior().ShouldSkipSpaceWhenMovingRight()) if (!GetFrame().GetEditor().Behavior().ShouldSkipSpaceWhenMovingRight())
return position_after_current_word; return position_after_current_word;
return CreateVisiblePosition( return SkipWhitespace(position_after_current_word);
SkipWhitespace(position_after_current_word.DeepEquivalent()));
} }
static VisiblePosition AdjustForwardPositionForUserSelectAll( static VisiblePosition AdjustForwardPositionForUserSelectAll(
...@@ -302,9 +302,11 @@ VisiblePosition SelectionModifier::ModifyExtendingRightInternal( ...@@ -302,9 +302,11 @@ VisiblePosition SelectionModifier::ModifyExtendingRightInternal(
kCanSkipOverEditingBoundary); kCanSkipOverEditingBoundary);
case TextGranularity::kWord: case TextGranularity::kWord:
if (DirectionOfEnclosingBlock() == TextDirection::kLtr) { if (DirectionOfEnclosingBlock() == TextDirection::kLtr) {
return NextWordPositionForPlatform(ComputeVisibleExtent(selection_)); return CreateVisiblePosition(NextWordPositionForPlatform(
ComputeVisibleExtent(selection_).DeepEquivalent()));
} }
return PreviousWordPosition(ComputeVisibleExtent(selection_)); return CreateVisiblePosition(PreviousWordPosition(
ComputeVisibleExtent(selection_).DeepEquivalent()));
case TextGranularity::kLineBoundary: case TextGranularity::kLineBoundary:
if (DirectionOfEnclosingBlock() == TextDirection::kLtr) if (DirectionOfEnclosingBlock() == TextDirection::kLtr)
return ModifyExtendingForwardInternal(granularity); return ModifyExtendingForwardInternal(granularity);
...@@ -337,7 +339,8 @@ VisiblePosition SelectionModifier::ModifyExtendingForwardInternal( ...@@ -337,7 +339,8 @@ VisiblePosition SelectionModifier::ModifyExtendingForwardInternal(
return NextPositionOf(ComputeVisibleExtent(selection_), return NextPositionOf(ComputeVisibleExtent(selection_),
kCanSkipOverEditingBoundary); kCanSkipOverEditingBoundary);
case TextGranularity::kWord: case TextGranularity::kWord:
return NextWordPositionForPlatform(ComputeVisibleExtent(selection_)); return CreateVisiblePosition(NextWordPositionForPlatform(
ComputeVisibleExtent(selection_).DeepEquivalent()));
case TextGranularity::kSentence: case TextGranularity::kSentence:
return NextSentencePosition(ComputeVisibleExtent(selection_)); return NextSentencePosition(ComputeVisibleExtent(selection_));
case TextGranularity::kLine: case TextGranularity::kLine:
...@@ -417,7 +420,8 @@ VisiblePosition SelectionModifier::ModifyMovingForward( ...@@ -417,7 +420,8 @@ VisiblePosition SelectionModifier::ModifyMovingForward(
return NextPositionOf(ComputeVisibleExtent(selection_), return NextPositionOf(ComputeVisibleExtent(selection_),
kCanSkipOverEditingBoundary); kCanSkipOverEditingBoundary);
case TextGranularity::kWord: case TextGranularity::kWord:
return NextWordPositionForPlatform(ComputeVisibleExtent(selection_)); return CreateVisiblePosition(NextWordPositionForPlatform(
ComputeVisibleExtent(selection_).DeepEquivalent()));
case TextGranularity::kSentence: case TextGranularity::kSentence:
return NextSentencePosition(ComputeVisibleExtent(selection_)); return NextSentencePosition(ComputeVisibleExtent(selection_));
case TextGranularity::kLine: { case TextGranularity::kLine: {
...@@ -470,9 +474,11 @@ VisiblePosition SelectionModifier::ModifyExtendingLeftInternal( ...@@ -470,9 +474,11 @@ VisiblePosition SelectionModifier::ModifyExtendingLeftInternal(
kCanSkipOverEditingBoundary); kCanSkipOverEditingBoundary);
case TextGranularity::kWord: case TextGranularity::kWord:
if (DirectionOfEnclosingBlock() == TextDirection::kLtr) { if (DirectionOfEnclosingBlock() == TextDirection::kLtr) {
return PreviousWordPosition(ComputeVisibleExtent(selection_)); return CreateVisiblePosition(PreviousWordPosition(
ComputeVisibleExtent(selection_).DeepEquivalent()));
} }
return NextWordPositionForPlatform(ComputeVisibleExtent(selection_)); return CreateVisiblePosition(NextWordPositionForPlatform(
ComputeVisibleExtent(selection_).DeepEquivalent()));
case TextGranularity::kLineBoundary: case TextGranularity::kLineBoundary:
if (DirectionOfEnclosingBlock() == TextDirection::kLtr) if (DirectionOfEnclosingBlock() == TextDirection::kLtr)
return ModifyExtendingBackwardInternal(granularity); return ModifyExtendingBackwardInternal(granularity);
...@@ -508,7 +514,8 @@ VisiblePosition SelectionModifier::ModifyExtendingBackwardInternal( ...@@ -508,7 +514,8 @@ VisiblePosition SelectionModifier::ModifyExtendingBackwardInternal(
return PreviousPositionOf(ComputeVisibleExtent(selection_), return PreviousPositionOf(ComputeVisibleExtent(selection_),
kCanSkipOverEditingBoundary); kCanSkipOverEditingBoundary);
case TextGranularity::kWord: case TextGranularity::kWord:
return PreviousWordPosition(ComputeVisibleExtent(selection_)); return CreateVisiblePosition(PreviousWordPosition(
ComputeVisibleExtent(selection_).DeepEquivalent()));
case TextGranularity::kSentence: case TextGranularity::kSentence:
return PreviousSentencePosition(ComputeVisibleExtent(selection_)); return PreviousSentencePosition(ComputeVisibleExtent(selection_));
case TextGranularity::kLine: case TextGranularity::kLine:
...@@ -589,7 +596,8 @@ VisiblePosition SelectionModifier::ModifyMovingBackward( ...@@ -589,7 +596,8 @@ VisiblePosition SelectionModifier::ModifyMovingBackward(
} }
break; break;
case TextGranularity::kWord: case TextGranularity::kWord:
pos = PreviousWordPosition(ComputeVisibleExtent(selection_)); pos = CreateVisiblePosition(PreviousWordPosition(
ComputeVisibleExtent(selection_).DeepEquivalent()));
break; break;
case TextGranularity::kSentence: case TextGranularity::kSentence:
pos = PreviousSentencePosition(ComputeVisibleExtent(selection_)); pos = PreviousSentencePosition(ComputeVisibleExtent(selection_));
......
...@@ -98,7 +98,7 @@ class CORE_EXPORT SelectionModifier { ...@@ -98,7 +98,7 @@ class CORE_EXPORT SelectionModifier {
VisiblePosition ModifyExtendingBackwardInternal(TextGranularity); VisiblePosition ModifyExtendingBackwardInternal(TextGranularity);
VisiblePosition ModifyMovingLeft(TextGranularity); VisiblePosition ModifyMovingLeft(TextGranularity);
VisiblePosition ModifyMovingBackward(TextGranularity); VisiblePosition ModifyMovingBackward(TextGranularity);
VisiblePosition NextWordPositionForPlatform(const VisiblePosition&); Position NextWordPositionForPlatform(const Position&);
// TODO(editing-dev): We should handle |skips_spaces_when_moving_right| in // TODO(editing-dev): We should handle |skips_spaces_when_moving_right| in
// another way, e.g. pass |EditingBehavior()|. // another way, e.g. pass |EditingBehavior()|.
......
...@@ -134,11 +134,8 @@ CORE_EXPORT PositionInFlatTree ...@@ -134,11 +134,8 @@ CORE_EXPORT PositionInFlatTree
EndOfWordPosition(const PositionInFlatTree&, EWordSide = kNextWordIfOnBoundary); EndOfWordPosition(const PositionInFlatTree&, EWordSide = kNextWordIfOnBoundary);
CORE_EXPORT VisiblePositionInFlatTree CORE_EXPORT VisiblePositionInFlatTree
EndOfWord(const VisiblePositionInFlatTree&, EWordSide = kNextWordIfOnBoundary); EndOfWord(const VisiblePositionInFlatTree&, EWordSide = kNextWordIfOnBoundary);
// TODO(crbug.com/657237): Change all callers to use non-canonical versions.
CORE_EXPORT PositionWithAffinity PreviousWordPosition(const Position&); CORE_EXPORT PositionWithAffinity PreviousWordPosition(const Position&);
CORE_EXPORT VisiblePosition PreviousWordPosition(const VisiblePosition&);
CORE_EXPORT PositionWithAffinity NextWordPosition(const Position&); CORE_EXPORT PositionWithAffinity NextWordPosition(const Position&);
CORE_EXPORT VisiblePosition NextWordPosition(const VisiblePosition&);
// sentences // sentences
CORE_EXPORT VisiblePosition StartOfSentence(const VisiblePosition&); CORE_EXPORT VisiblePosition StartOfSentence(const VisiblePosition&);
......
...@@ -223,13 +223,6 @@ PositionWithAffinity NextWordPosition(const Position& start) { ...@@ -223,13 +223,6 @@ PositionWithAffinity NextWordPosition(const Position& start) {
return ToPositionInDOMTreeWithAffinity(next); return ToPositionInDOMTreeWithAffinity(next);
} }
// TODO(yosin): This function will be removed by replacing call sites to use
// |Position| version. since there are only two call sites, one is in test.
VisiblePosition NextWordPosition(const VisiblePosition& c) {
DCHECK(c.IsValid()) << c;
return CreateVisiblePosition(NextWordPosition(c.DeepEquivalent()));
}
PositionInFlatTreeWithAffinity PreviousWordPosition( PositionInFlatTreeWithAffinity PreviousWordPosition(
const PositionInFlatTree& start) { const PositionInFlatTree& start) {
const PositionInFlatTree prev = PreviousWordPositionInternal(start); const PositionInFlatTree prev = PreviousWordPositionInternal(start);
...@@ -243,13 +236,6 @@ PositionWithAffinity PreviousWordPosition(const Position& start) { ...@@ -243,13 +236,6 @@ PositionWithAffinity PreviousWordPosition(const Position& start) {
return ToPositionInDOMTreeWithAffinity(prev); return ToPositionInDOMTreeWithAffinity(prev);
} }
// TODO(xiaochengh): Remove this function. Change callers to use the
// Position version as it doesn't need canonical input position.
VisiblePosition PreviousWordPosition(const VisiblePosition& c) {
DCHECK(c.IsValid()) << c;
return CreateVisiblePosition(PreviousWordPosition(c.DeepEquivalent()));
}
Position StartOfWordPosition(const VisiblePosition& position, EWordSide side) { Position StartOfWordPosition(const VisiblePosition& position, EWordSide side) {
return StartOfWordAlgorithm<EditingStrategy>(position, side); return StartOfWordAlgorithm<EditingStrategy>(position, side);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment