| Index: Source/core/editing/VisiblePosition.cpp
|
| diff --git a/Source/core/editing/VisiblePosition.cpp b/Source/core/editing/VisiblePosition.cpp
|
| index f265f6e61e1da690cf93bb7606d06a48beff756b..cb21338f0154b64ef559e8e89aad4647a06f5d6c 100644
|
| --- a/Source/core/editing/VisiblePosition.cpp
|
| +++ b/Source/core/editing/VisiblePosition.cpp
|
| @@ -60,42 +60,48 @@ VisiblePositionTemplate<Strategy>::VisiblePositionTemplate(const PositionWithAff
|
| {
|
| }
|
|
|
| -template <typename Strategy>
|
| -VisiblePositionTemplate<Strategy> VisiblePositionTemplate<Strategy>::createWithoutCanonicalization(const PositionWithAffinityTemplate<Strategy>& canonicalized)
|
| -{
|
| - return VisiblePositionTemplate<Strategy>(canonicalized);
|
| -}
|
| -
|
| template<typename Strategy>
|
| -static PositionWithAffinityTemplate<Strategy> createVisiblePositionAlgorithm(const PositionAlgorithm<Strategy>& position, TextAffinity affinity)
|
| +VisiblePositionTemplate<Strategy> VisiblePositionTemplate<Strategy>::create(const PositionWithAffinityTemplate<Strategy>& positionWithAffinity)
|
| {
|
| - const PositionAlgorithm<Strategy> deepPosition = canonicalPositionOf(position);
|
| + const PositionAlgorithm<Strategy> deepPosition = canonicalPositionOf(positionWithAffinity.position());
|
| if (deepPosition.isNull())
|
| - return PositionWithAffinityTemplate<Strategy>();
|
| - if (affinity == TextAffinity::Downstream)
|
| - return PositionWithAffinityTemplate<Strategy>(deepPosition);
|
| + return VisiblePositionTemplate<Strategy>();
|
| + const PositionWithAffinityTemplate<Strategy> downstreamPosition(deepPosition);
|
| + if (positionWithAffinity.affinity() == TextAffinity::Downstream)
|
| + return VisiblePositionTemplate<Strategy>(downstreamPosition);
|
|
|
| // When not at a line wrap, make sure to end up with
|
| // |TextAffinity::Downstream| affinity.
|
| - if (inSameLine(PositionWithAffinityTemplate<Strategy>(deepPosition), PositionWithAffinityTemplate<Strategy>(deepPosition, TextAffinity::Upstream)))
|
| - return PositionWithAffinityTemplate<Strategy>(deepPosition);
|
| - return PositionWithAffinityTemplate<Strategy>(deepPosition, TextAffinity::Upstream);
|
| + const PositionWithAffinityTemplate<Strategy> upstreamPosition(deepPosition, TextAffinity::Upstream);
|
| + if (inSameLine(downstreamPosition, upstreamPosition))
|
| + return VisiblePositionTemplate<Strategy>(downstreamPosition);
|
| + return VisiblePositionTemplate<Strategy>(upstreamPosition);
|
| }
|
|
|
| VisiblePosition createVisiblePosition(const Position& position, TextAffinity affinity)
|
| {
|
| - return VisiblePosition::createWithoutCanonicalization(createVisiblePositionAlgorithm<EditingStrategy>(position, affinity));
|
| + return createVisiblePosition(PositionWithAffinity(position, affinity));
|
| }
|
|
|
| VisiblePosition createVisiblePosition(const PositionWithAffinity& positionWithAffinity)
|
| {
|
| - return createVisiblePosition(positionWithAffinity.position(), positionWithAffinity.affinity());
|
| + return VisiblePosition::create(positionWithAffinity);
|
| +}
|
| +
|
| +VisiblePositionInComposedTree createVisiblePosition(const PositionInComposedTree& position, TextAffinity affinity)
|
| +{
|
| + return VisiblePositionInComposedTree::create(PositionInComposedTreeWithAffinity(position, affinity));
|
| +}
|
| +
|
| +VisiblePosition createVisiblePositionInDOMTree(const Position& position, TextAffinity affinity)
|
| +{
|
| + return createVisiblePosition(position, affinity);
|
| }
|
|
|
| -VisiblePosition createVisiblePosition(const PositionInComposedTree& position, TextAffinity affinity)
|
| +VisiblePosition createVisiblePositionInDOMTree(const PositionInComposedTree& position, TextAffinity affinity)
|
| {
|
| - PositionInComposedTreeWithAffinity canonicalized = createVisiblePositionAlgorithm<EditingInComposedTreeStrategy>(position, affinity);
|
| - return VisiblePosition::createWithoutCanonicalization(PositionWithAffinity(toPositionInDOMTree(canonicalized.position()), canonicalized.affinity()));
|
| + const VisiblePositionInComposedTree visiblePosition = createVisiblePosition(position);
|
| + return createVisiblePosition(toPositionInDOMTree(visiblePosition.deepEquivalent()), affinity);
|
| }
|
|
|
| #ifndef NDEBUG
|
| @@ -125,6 +131,7 @@ void VisiblePositionTemplate<Strategy>::showTreeForThis() const
|
| #endif
|
|
|
| template class CORE_TEMPLATE_EXPORT VisiblePositionTemplate<EditingStrategy>;
|
| +template class CORE_TEMPLATE_EXPORT VisiblePositionTemplate<EditingInComposedTreeStrategy>;
|
|
|
| } // namespace blink
|
|
|
|
|