Commit f6189a00 authored by Yoshifumi Inoue's avatar Yoshifumi Inoue Committed by Commit Bot

Introduce TextAffinity::kUpstreamIfPossible

This patch introduces |TextAffinity::kUpstreamIfPossible| as replacement of
|VP_UPSTREAM_IF_POSSIBLE| to avoid including "VisiblePositoin.h" for improving
compilation speed.

This patch also gets rid of redundant include directive of "VisiblePositoin.h"
from "LayoutSVGInlineText.cpp".

Bug: 657237
Change-Id: I685c49a0adc4b2827929447ca8f3e6a5c518c113
Reviewed-on: https://chromium-review.googlesource.com/701958Reviewed-by: default avatarKoji Ishii <kojii@chromium.org>
Commit-Queue: Koji Ishii <kojii@chromium.org>
Cr-Commit-Position: refs/heads/master@{#506869}
parent 65d9fe13
...@@ -607,7 +607,7 @@ void FrameSelection::SelectFrameElementInParentIfFullySelected() { ...@@ -607,7 +607,7 @@ void FrameSelection::SelectFrameElementInParentIfFullySelected() {
Position(owner_element_parent, owner_element_node_index)); Position(owner_element_parent, owner_element_node_index));
VisiblePosition after_owner_element = CreateVisiblePosition( VisiblePosition after_owner_element = CreateVisiblePosition(
Position(owner_element_parent, owner_element_node_index + 1), Position(owner_element_parent, owner_element_node_index + 1),
VP_UPSTREAM_IF_POSSIBLE); TextAffinity::kUpstreamIfPossible);
SelectionInDOMTree::Builder builder; SelectionInDOMTree::Builder builder;
builder builder
......
...@@ -31,7 +31,16 @@ ...@@ -31,7 +31,16 @@
namespace blink { namespace blink {
enum class TextAffinity { kUpstream, kDownstream }; enum class TextAffinity {
kUpstream,
kDownstream,
// Callers who do not know where on the line the position is, but would like
// kUpstream if at a line break or kDownstream otherwise, need a clear way to
// specify that. The constructors auto-correct kUpstream to kDownstream if the
// position is not at a line break.
kUpstreamIfPossible = kUpstream,
};
CORE_EXPORT std::ostream& operator<<(std::ostream&, TextAffinity); CORE_EXPORT std::ostream& operator<<(std::ostream&, TextAffinity);
......
...@@ -40,13 +40,6 @@ namespace blink { ...@@ -40,13 +40,6 @@ namespace blink {
// is cheaper than UPSTREAM // is cheaper than UPSTREAM
#define VP_DEFAULT_AFFINITY TextAffinity::kDownstream #define VP_DEFAULT_AFFINITY TextAffinity::kDownstream
// Callers who do not know where on the line the position is,
// but would like UPSTREAM if at a line break or DOWNSTREAM
// otherwise, need a clear way to specify that. The
// constructors auto-correct UPSTREAM to DOWNSTREAM if the
// position is not at a line break.
#define VP_UPSTREAM_IF_POSSIBLE TextAffinity::kUpstream
// |VisiblePosition| is an immutable object representing "canonical position" // |VisiblePosition| is an immutable object representing "canonical position"
// with affinity. // with affinity.
// //
......
...@@ -428,7 +428,7 @@ static VisiblePositionTemplate<Strategy> EndPositionForLine( ...@@ -428,7 +428,7 @@ static VisiblePositionTemplate<Strategy> EndPositionForLine(
if (IsHTMLBRElement(*end_node)) { if (IsHTMLBRElement(*end_node)) {
return CreateVisiblePosition( return CreateVisiblePosition(
PositionTemplate<Strategy>::BeforeNode(*end_node), PositionTemplate<Strategy>::BeforeNode(*end_node),
VP_UPSTREAM_IF_POSSIBLE); TextAffinity::kUpstreamIfPossible);
} }
if (end_box->IsInlineTextBox() && end_node->IsTextNode()) { if (end_box->IsInlineTextBox() && end_node->IsTextNode()) {
InlineTextBox* end_text_box = ToInlineTextBox(end_box); InlineTextBox* end_text_box = ToInlineTextBox(end_box);
...@@ -437,10 +437,10 @@ static VisiblePositionTemplate<Strategy> EndPositionForLine( ...@@ -437,10 +437,10 @@ static VisiblePositionTemplate<Strategy> EndPositionForLine(
end_offset += end_text_box->Len(); end_offset += end_text_box->Len();
return CreateVisiblePosition( return CreateVisiblePosition(
PositionTemplate<Strategy>(ToText(end_node), end_offset), PositionTemplate<Strategy>(ToText(end_node), end_offset),
VP_UPSTREAM_IF_POSSIBLE); TextAffinity::kUpstreamIfPossible);
} }
return CreateVisiblePosition(PositionTemplate<Strategy>::AfterNode(*end_node), return CreateVisiblePosition(PositionTemplate<Strategy>::AfterNode(*end_node),
VP_UPSTREAM_IF_POSSIBLE); TextAffinity::kUpstreamIfPossible);
} }
// TODO(yosin) Rename this function to reflect the fact it ignores bidi levels. // TODO(yosin) Rename this function to reflect the fact it ignores bidi levels.
......
...@@ -87,7 +87,7 @@ static VisiblePositionTemplate<Strategy> EndOfSentenceAlgorithm( ...@@ -87,7 +87,7 @@ static VisiblePositionTemplate<Strategy> EndOfSentenceAlgorithm(
const VisiblePositionTemplate<Strategy>& c) { const VisiblePositionTemplate<Strategy>& c) {
DCHECK(c.IsValid()) << c; DCHECK(c.IsValid()) << c;
return CreateVisiblePosition(NextBoundary(c, EndSentenceBoundary), return CreateVisiblePosition(NextBoundary(c, EndSentenceBoundary),
VP_UPSTREAM_IF_POSSIBLE); TextAffinity::kUpstreamIfPossible);
} }
template <typename Strategy> template <typename Strategy>
...@@ -142,8 +142,9 @@ EphemeralRange ExpandRangeToSentenceBoundary(const EphemeralRange& range) { ...@@ -142,8 +142,9 @@ EphemeralRange ExpandRangeToSentenceBoundary(const EphemeralRange& range) {
VisiblePosition NextSentencePosition(const VisiblePosition& c) { VisiblePosition NextSentencePosition(const VisiblePosition& c) {
DCHECK(c.IsValid()) << c; DCHECK(c.IsValid()) << c;
VisiblePosition next = CreateVisiblePosition( VisiblePosition next =
NextBoundary(c, NextSentencePositionBoundary), VP_UPSTREAM_IF_POSSIBLE); CreateVisiblePosition(NextBoundary(c, NextSentencePositionBoundary),
TextAffinity::kUpstreamIfPossible);
return HonorEditingBoundaryAtOrAfter(next, c.DeepEquivalent()); return HonorEditingBoundaryAtOrAfter(next, c.DeepEquivalent());
} }
......
...@@ -155,7 +155,7 @@ Position EndOfWordPosition(const VisiblePosition& position, EWordSide side) { ...@@ -155,7 +155,7 @@ Position EndOfWordPosition(const VisiblePosition& position, EWordSide side) {
VisiblePosition EndOfWord(const VisiblePosition& position, EWordSide side) { VisiblePosition EndOfWord(const VisiblePosition& position, EWordSide side) {
return CreateVisiblePosition(EndOfWordPosition(position, side), return CreateVisiblePosition(EndOfWordPosition(position, side),
VP_UPSTREAM_IF_POSSIBLE); TextAffinity::kUpstreamIfPossible);
} }
PositionInFlatTree EndOfWordPosition(const VisiblePositionInFlatTree& position, PositionInFlatTree EndOfWordPosition(const VisiblePositionInFlatTree& position,
...@@ -166,13 +166,14 @@ PositionInFlatTree EndOfWordPosition(const VisiblePositionInFlatTree& position, ...@@ -166,13 +166,14 @@ PositionInFlatTree EndOfWordPosition(const VisiblePositionInFlatTree& position,
VisiblePositionInFlatTree EndOfWord(const VisiblePositionInFlatTree& position, VisiblePositionInFlatTree EndOfWord(const VisiblePositionInFlatTree& position,
EWordSide side) { EWordSide side) {
return CreateVisiblePosition(EndOfWordPosition(position, side), return CreateVisiblePosition(EndOfWordPosition(position, side),
VP_UPSTREAM_IF_POSSIBLE); TextAffinity::kUpstreamIfPossible);
} }
VisiblePosition NextWordPosition(const VisiblePosition& c) { VisiblePosition NextWordPosition(const VisiblePosition& c) {
DCHECK(c.IsValid()) << c; DCHECK(c.IsValid()) << c;
VisiblePosition next = CreateVisiblePosition( VisiblePosition next =
NextBoundary(c, NextWordPositionBoundary), VP_UPSTREAM_IF_POSSIBLE); CreateVisiblePosition(NextBoundary(c, NextWordPositionBoundary),
TextAffinity::kUpstreamIfPossible);
return HonorEditingBoundaryAtOrAfter(next, c.DeepEquivalent()); return HonorEditingBoundaryAtOrAfter(next, c.DeepEquivalent());
} }
......
...@@ -532,11 +532,12 @@ static PositionWithAffinity CreatePositionWithAffinityForBox( ...@@ -532,11 +532,12 @@ static PositionWithAffinity CreatePositionWithAffinityForBox(
affinity = TextAffinity::kDownstream; affinity = TextAffinity::kDownstream;
break; break;
case kAlwaysUpstream: case kAlwaysUpstream:
affinity = VP_UPSTREAM_IF_POSSIBLE; affinity = TextAffinity::kUpstreamIfPossible;
break; break;
case kUpstreamIfPositionIsNotAtStart: case kUpstreamIfPositionIsNotAtStart:
affinity = offset > box->CaretMinOffset() ? VP_UPSTREAM_IF_POSSIBLE affinity = offset > box->CaretMinOffset()
: TextAffinity::kDownstream; ? TextAffinity::kUpstreamIfPossible
: TextAffinity::kDownstream;
break; break;
} }
int text_start_offset = int text_start_offset =
......
...@@ -27,7 +27,6 @@ ...@@ -27,7 +27,6 @@
#include "core/css/FontSize.h" #include "core/css/FontSize.h"
#include "core/css/StyleEngine.h" #include "core/css/StyleEngine.h"
#include "core/editing/TextAffinity.h" #include "core/editing/TextAffinity.h"
#include "core/editing/VisiblePosition.h"
#include "core/frame/LocalFrameView.h" #include "core/frame/LocalFrameView.h"
#include "core/layout/svg/LayoutSVGText.h" #include "core/layout/svg/LayoutSVGText.h"
#include "core/layout/svg/SVGLayoutSupport.h" #include "core/layout/svg/SVGLayoutSupport.h"
...@@ -203,9 +202,10 @@ PositionWithAffinity LayoutSVGInlineText::PositionForPoint( ...@@ -203,9 +202,10 @@ PositionWithAffinity LayoutSVGInlineText::PositionForPoint(
int offset = closest_distance_box->OffsetForPositionInFragment( int offset = closest_distance_box->OffsetForPositionInFragment(
*closest_distance_fragment, *closest_distance_fragment,
LayoutUnit(absolute_point.X() - closest_distance_position), true); LayoutUnit(absolute_point.X() - closest_distance_position), true);
return CreatePositionWithAffinity( return CreatePositionWithAffinity(offset + closest_distance_box->Start(),
offset + closest_distance_box->Start(), offset > 0
offset > 0 ? VP_UPSTREAM_IF_POSSIBLE : TextAffinity::kDownstream); ? TextAffinity::kUpstreamIfPossible
: TextAffinity::kDownstream);
} }
namespace { namespace {
......
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