Commit db849a3b authored by yosin@chromium.org's avatar yosin@chromium.org

Use PositionWithAffinity as internal representation of VisiblePostion

This patch replaces member variables |Position| and |TextAffinity| in
|VisiblePostion| class to |PositionWithAffinity| to simplify construction
of an object for preparation of templatizing |VisiblePostion| to introduce
composed tree version.

This patch also moves default constructor into .cpp file from header file to
reduce size of header file.

This patch is a preparation of making selection to handle granularity for web
component, http://crrev.com/1277863002

BUG=513568
TEST=n/a; no behavior changes

Review URL: https://codereview.chromium.org/1311913006

git-svn-id: svn://svn.chromium.org/blink/trunk@201619 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent ea52a3bd
......@@ -49,19 +49,18 @@ namespace blink {
using namespace HTMLNames;
VisiblePosition::VisiblePosition(const Position& position, TextAffinity affinity)
VisiblePosition::VisiblePosition()
{
}
VisiblePosition::VisiblePosition(const PositionWithAffinity& positionWithAffinity)
: m_positionWithAffinity(positionWithAffinity)
{
// TODO(yosin) We should make |VisiblePosition| private and make this
// constructor to populate member variables by using |createVisiblePosition()|.
*this = createVisiblePosition(position, affinity);
}
VisiblePosition VisiblePosition::createWithoutCanonicalization(const PositionWithAffinity& canonicalized)
{
VisiblePosition visiblePosition;
visiblePosition.m_deepPosition = canonicalized.position();
visiblePosition.m_affinity = canonicalized.affinity();
return visiblePosition;
return VisiblePosition(canonicalized);
}
template <typename Strategy>
......@@ -172,24 +171,24 @@ void VisiblePosition::debugPosition(const char* msg) const
fprintf(stderr, "Position [%s]: null\n", msg);
return;
}
m_deepPosition.debugPosition(msg);
deepEquivalent().debugPosition(msg);
}
void VisiblePosition::formatForDebugger(char* buffer, unsigned length) const
{
m_deepPosition.formatForDebugger(buffer, length);
deepEquivalent().formatForDebugger(buffer, length);
}
void VisiblePosition::showTreeForThis() const
{
m_deepPosition.showTreeForThis();
deepEquivalent().showTreeForThis();
}
#endif
DEFINE_TRACE(VisiblePosition)
{
visitor->trace(m_deepPosition);
visitor->trace(m_positionWithAffinity);
}
} // namespace blink
......
......@@ -70,7 +70,7 @@ class Range;
class CORE_EXPORT VisiblePosition final {
DISALLOW_ALLOCATION();
public:
VisiblePosition() : m_affinity(VP_DEFAULT_AFFINITY) { }
VisiblePosition();
// Node: Other than |createVisiblePosition()|, we should not use
// |createWithoutCanonicalization()|.
......@@ -83,14 +83,14 @@ public:
bool operator==(const VisiblePosition&) const = delete;
bool operator!=(const VisiblePosition&) const = delete;
bool isNull() const { return m_deepPosition.isNull(); }
bool isNotNull() const { return m_deepPosition.isNotNull(); }
bool isOrphan() const { return m_deepPosition.isOrphan(); }
bool isNull() const { return m_positionWithAffinity.isNull(); }
bool isNotNull() const { return m_positionWithAffinity.isNotNull(); }
bool isOrphan() const { return deepEquivalent().isOrphan(); }
Position deepEquivalent() const { return m_deepPosition; }
Position deepEquivalent() const { return m_positionWithAffinity.position(); }
Position toParentAnchoredPosition() const { return deepEquivalent().parentAnchoredEquivalent(); }
PositionWithAffinity toPositionWithAffinity() const { return PositionWithAffinity(m_deepPosition, m_affinity); }
TextAffinity affinity() const { return m_affinity; }
PositionWithAffinity toPositionWithAffinity() const { return m_positionWithAffinity; }
TextAffinity affinity() const { return m_positionWithAffinity.affinity(); }
DECLARE_TRACE();
......@@ -101,12 +101,9 @@ public:
#endif
private:
explicit VisiblePosition(const Position&, TextAffinity);
explicit VisiblePosition(const PositionWithAffinity&);
// TODO(yosin) We should use |PositionWithAffinity| to make
// |toPositionWithAffinity()| simpler.
Position m_deepPosition;
TextAffinity m_affinity;
PositionWithAffinity m_positionWithAffinity;
};
// TODO(yosin) We should move |honorEditingBoundaryAtOr{Before,After} to
......
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