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

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

Issue 1314433011: Introduce visiblePositionOf() for Position and PositionInComposedTree (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: 2015-08-31T16:32:26 Created 5 years, 4 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/VisiblePosition.h ('k') | Source/core/editing/VisiblePositionTest.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/editing/VisiblePosition.cpp
diff --git a/Source/core/editing/VisiblePosition.cpp b/Source/core/editing/VisiblePosition.cpp
index d8c97ee1dff8087dbb5aca12a256c3d156845bd3..c51b05d14528637869e604f0ac68ffe2c0f7b2f3 100644
--- a/Source/core/editing/VisiblePosition.cpp
+++ b/Source/core/editing/VisiblePosition.cpp
@@ -49,19 +49,24 @@ namespace blink {
using namespace HTMLNames;
-VisiblePosition::VisiblePosition(const Position &pos, TextAffinity affinity)
+VisiblePosition::VisiblePosition(const Position& position, TextAffinity affinity)
{
- init(pos, affinity);
+ // TODO(yosin) We should make |VisiblePosition| private and make this
+ // constructor to populate member variables by using |visiblePositionOf()|.
+ *this = visiblePositionOf(position, affinity);
}
-VisiblePosition::VisiblePosition(const PositionInComposedTree& pos, TextAffinity affinity)
+VisiblePosition::VisiblePosition(const PositionWithAffinity& positionWithAffinity)
+ : VisiblePosition(positionWithAffinity.position(), positionWithAffinity.affinity())
{
- init(pos, affinity);
}
-VisiblePosition::VisiblePosition(const PositionWithAffinity& positionWithAffinity)
+VisiblePosition VisiblePosition::createWithoutCanonicalization(const PositionWithAffinity& canonicalized)
{
- init(positionWithAffinity.position(), positionWithAffinity.affinity());
+ VisiblePosition visiblePosition;
+ visiblePosition.m_deepPosition = canonicalized.position();
+ visiblePosition.m_affinity = canonicalized.affinity();
+ return visiblePosition;
}
// TODO(yosin) We should move implementation of |skipToEndOfEditingBoundary()|
@@ -662,26 +667,30 @@ PositionInComposedTree canonicalPositionOf(const PositionInComposedTree& positio
}
template<typename Strategy>
-void VisiblePosition::init(const PositionAlgorithm<Strategy>& position, TextAffinity affinity)
+static PositionWithAffinityTemplate<Strategy> visiblePositionOfAlgorithm(const PositionAlgorithm<Strategy>& position, TextAffinity affinity)
{
- m_affinity = affinity;
-
- PositionAlgorithm<Strategy> deepPosition = canonicalPosition(position);
- m_deepPosition = toPositionInDOMTree(deepPosition);
-
- if (m_affinity != TextAffinity::Upstream)
- return;
-
- if (isNull()) {
- m_affinity = TextAffinity::Downstream;
- return;
- }
+ const PositionAlgorithm<Strategy> deepPosition = canonicalPosition(position);
+ if (deepPosition.isNull())
+ return PositionWithAffinityTemplate<Strategy>();
+ if (affinity == TextAffinity::Downstream)
+ return PositionWithAffinityTemplate<Strategy>(deepPosition);
// 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;
- m_affinity = TextAffinity::Downstream;
+ if (inSameLine(PositionWithAffinityTemplate<Strategy>(deepPosition), PositionWithAffinityTemplate<Strategy>(deepPosition, TextAffinity::Upstream)))
+ return PositionWithAffinityTemplate<Strategy>(deepPosition);
+ return PositionWithAffinityTemplate<Strategy>(deepPosition, TextAffinity::Upstream);
+}
+
+VisiblePosition visiblePositionOf(const Position& position, TextAffinity affinity)
+{
+ return VisiblePosition::createWithoutCanonicalization(visiblePositionOfAlgorithm<EditingStrategy>(position, affinity));
+}
+
+VisiblePosition visiblePositionOf(const PositionInComposedTree& position, TextAffinity affinity)
+{
+ PositionInComposedTreeWithAffinity canonicalized = visiblePositionOfAlgorithm<EditingInComposedTreeStrategy>(position, affinity);
+ return VisiblePosition::createWithoutCanonicalization(PositionWithAffinity(toPositionInDOMTree(canonicalized.position()), canonicalized.affinity()));
}
UChar32 characterAfter(const VisiblePosition& visiblePosition)
« no previous file with comments | « Source/core/editing/VisiblePosition.h ('k') | Source/core/editing/VisiblePositionTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698