Index: third_party/WebKit/WebCore/editing/Selection.h |
=================================================================== |
--- third_party/WebKit/WebCore/editing/Selection.h (revision 9391) |
+++ third_party/WebKit/WebCore/editing/Selection.h (working copy) |
@@ -37,8 +37,7 @@ |
class Selection { |
public: |
- enum EState { NONE, CARET, RANGE }; |
- enum EDirection { FORWARD, BACKWARD, RIGHT, LEFT }; |
+ enum SelectionType { NoSelection, CaretSelection, RangeSelection }; |
Selection(); |
@@ -52,7 +51,7 @@ |
static Selection selectionFromContentsOfNode(Node*); |
- EState state() const { return m_state; } |
+ SelectionType selectionType() const { return m_selectionType; } |
void setAffinity(EAffinity affinity) { m_affinity = affinity; } |
EAffinity affinity() const { return m_affinity; } |
@@ -63,17 +62,17 @@ |
void setExtent(const VisiblePosition&); |
Position base() const { return m_base; } |
- Position extent() const { return m_extent; } |
+ Position extent() const { return m_extent; } |
Position start() const { return m_start; } |
Position end() const { return m_end; } |
VisiblePosition visibleStart() const { return VisiblePosition(m_start, isRange() ? DOWNSTREAM : affinity()); } |
VisiblePosition visibleEnd() const { return VisiblePosition(m_end, isRange() ? UPSTREAM : affinity()); } |
- bool isNone() const { return state() == NONE; } |
- bool isCaret() const { return state() == CARET; } |
- bool isRange() const { return state() == RANGE; } |
- bool isCaretOrRange() const { return state() != NONE; } |
+ bool isNone() const { return selectionType() == NoSelection; } |
+ bool isCaret() const { return selectionType() == CaretSelection; } |
+ bool isRange() const { return selectionType() == RangeSelection; } |
+ bool isCaretOrRange() const { return selectionType() != NoSelection; } |
bool isBaseFirst() const { return m_baseIsFirst; } |
@@ -82,7 +81,13 @@ |
bool expandUsingGranularity(TextGranularity granularity); |
TextGranularity granularity() const { return m_granularity; } |
- PassRefPtr<Range> toRange() const; |
+ // We don't yet support multi-range selections, so we only ever have one range to return. |
+ PassRefPtr<Range> firstRange() const; |
+ |
+ // FIXME: Most callers probably don't want this function, but are using it |
+ // for historical reasons. toNormalizedRange contracts the range around |
+ // text, and moves the caret upstream before returning the range. |
+ PassRefPtr<Range> toNormalizedRange() const; |
Element* rootEditableElement() const; |
bool isContentEditable() const; |
@@ -100,18 +105,23 @@ |
private: |
void validate(); |
- void adjustForEditableContent(); |
- Position m_base; // base position for the selection |
- Position m_extent; // extent position for the selection |
- Position m_start; // start position for the selection |
- Position m_end; // end position for the selection |
+ // Support methods for validate() |
+ void setBaseAndExtentToDeepEquivalents(); |
+ void setStartAndEndFromBaseAndExtentRespectingGranularity(); |
+ void adjustSelectionToAvoidCrossingEditingBoundaries(); |
+ void updateSelectionType(); |
- EAffinity m_affinity; // the upstream/downstream affinity of the caret |
- TextGranularity m_granularity; // granularity of start/end selection |
+ Position m_base; // Where the first click happened |
+ Position m_extent; // Where the end click happened |
+ Position m_start; // Leftmost position when expanded to respect granularity |
+ Position m_end; // Rightmost position when expanded to respect granularity |
+ EAffinity m_affinity; // the upstream/downstream affinity of the caret |
+ TextGranularity m_granularity; // granularity of start/end selection |
+ |
// these are cached, can be recalculated by validate() |
- EState m_state; // the state of the selection |
+ SelectionType m_selectionType; // None, Caret, Range |
bool m_baseIsFirst; // true if base is before the extent |
}; |