Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2004 Apple Computer, Inc. All rights reserved. | 2 * Copyright (C) 2004 Apple Computer, Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 42 class SelectionAdjuster; | 42 class SelectionAdjuster; |
| 43 | 43 |
| 44 const TextAffinity SelDefaultAffinity = TextAffinity::Downstream; | 44 const TextAffinity SelDefaultAffinity = TextAffinity::Downstream; |
| 45 enum SelectionDirection { DirectionForward, DirectionBackward, DirectionRight, D irectionLeft }; | 45 enum SelectionDirection { DirectionForward, DirectionBackward, DirectionRight, D irectionLeft }; |
| 46 | 46 |
| 47 template <typename Strategy> | 47 template <typename Strategy> |
| 48 class CORE_TEMPLATE_CLASS_EXPORT VisibleSelectionTemplate { | 48 class CORE_TEMPLATE_CLASS_EXPORT VisibleSelectionTemplate { |
| 49 DISALLOW_NEW(); | 49 DISALLOW_NEW(); |
| 50 public: | 50 public: |
| 51 VisibleSelectionTemplate(); | 51 VisibleSelectionTemplate(); |
| 52 VisibleSelectionTemplate(const PositionTemplate<Strategy>&, TextAffinity, bo ol isDirectional = false); | |
| 53 VisibleSelectionTemplate(const PositionTemplate<Strategy>& base, const Posit ionTemplate<Strategy>& extent, TextAffinity = SelDefaultAffinity, bool isDirecti onal = false); | |
| 54 explicit VisibleSelectionTemplate(const EphemeralRangeTemplate<Strategy>&, T extAffinity = SelDefaultAffinity, bool isDirectional = false); | |
| 55 | |
| 56 explicit VisibleSelectionTemplate(const VisiblePositionTemplate<Strategy>&, bool isDirectional = false); | |
| 57 VisibleSelectionTemplate(const VisiblePositionTemplate<Strategy>&, const Vis iblePositionTemplate<Strategy>&, bool isDirectional = false); | |
| 58 | |
| 59 explicit VisibleSelectionTemplate(const PositionWithAffinityTemplate<Strateg y>&, bool isDirectional = false); | |
| 60 | |
| 61 VisibleSelectionTemplate(const VisibleSelectionTemplate&); | 52 VisibleSelectionTemplate(const VisibleSelectionTemplate&); |
| 62 VisibleSelectionTemplate& operator=(const VisibleSelectionTemplate&); | 53 VisibleSelectionTemplate& operator=(const VisibleSelectionTemplate&); |
| 63 | 54 |
| 55 // Note: |create()| should be used only by |createVisibleSelection| and | |
| 56 // |selectionFromContentsOfNode|. | |
| 57 // TODO(xiaochengh): Use enum class instead of boolean parameter. | |
|
yosin_UTC9
2016/09/30 01:20:35
Once Selection class introduced, we don't need to
| |
| 58 static VisibleSelectionTemplate create(const PositionTemplate<Strategy>& bas e, const PositionTemplate<Strategy>& extent, TextAffinity, bool isDirectional); | |
| 59 | |
| 64 static VisibleSelectionTemplate selectionFromContentsOfNode(Node*); | 60 static VisibleSelectionTemplate selectionFromContentsOfNode(Node*); |
| 65 | 61 |
| 66 SelectionType getSelectionType() const { return m_selectionType; } | 62 SelectionType getSelectionType() const { return m_selectionType; } |
| 67 | 63 |
| 68 void setAffinity(TextAffinity affinity) { m_affinity = affinity; } | 64 void setAffinity(TextAffinity affinity) { m_affinity = affinity; } |
| 69 TextAffinity affinity() const { return m_affinity; } | 65 TextAffinity affinity() const { return m_affinity; } |
| 70 | 66 |
| 71 void setBase(const PositionTemplate<Strategy>&); | 67 void setBase(const PositionTemplate<Strategy>&); |
| 72 void setBase(const VisiblePositionTemplate<Strategy>&); | 68 void setBase(const VisiblePositionTemplate<Strategy>&); |
| 73 void setExtent(const PositionTemplate<Strategy>&); | 69 void setExtent(const PositionTemplate<Strategy>&); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 132 void validatePositionsIfNeeded(); | 128 void validatePositionsIfNeeded(); |
| 133 | 129 |
| 134 #ifndef NDEBUG | 130 #ifndef NDEBUG |
| 135 void showTreeForThis() const; | 131 void showTreeForThis() const; |
| 136 #endif | 132 #endif |
| 137 static void PrintTo(const VisibleSelectionTemplate&, std::ostream*); | 133 static void PrintTo(const VisibleSelectionTemplate&, std::ostream*); |
| 138 | 134 |
| 139 private: | 135 private: |
| 140 friend class SelectionAdjuster; | 136 friend class SelectionAdjuster; |
| 141 | 137 |
| 138 VisibleSelectionTemplate(const PositionTemplate<Strategy>& base, const Posit ionTemplate<Strategy>& extent, TextAffinity, bool isDirectional); | |
| 139 | |
| 142 void validate(TextGranularity = CharacterGranularity); | 140 void validate(TextGranularity = CharacterGranularity); |
| 143 | 141 |
| 144 // Support methods for validate() | 142 // Support methods for validate() |
| 145 void setBaseAndExtentToDeepEquivalents(); | 143 void setBaseAndExtentToDeepEquivalents(); |
| 146 void adjustSelectionToAvoidCrossingShadowBoundaries(); | 144 void adjustSelectionToAvoidCrossingShadowBoundaries(); |
| 147 void adjustSelectionToAvoidCrossingEditingBoundaries(); | 145 void adjustSelectionToAvoidCrossingEditingBoundaries(); |
| 148 void setEndRespectingGranularity(TextGranularity); | 146 void setEndRespectingGranularity(TextGranularity); |
| 149 void setStartRespectingGranularity(TextGranularity); | 147 void setStartRespectingGranularity(TextGranularity); |
| 150 void updateSelectionType(); | 148 void updateSelectionType(); |
| 151 | 149 |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 177 // of |m_hasTrailingWhitespace|. | 175 // of |m_hasTrailingWhitespace|. |
| 178 bool m_hasTrailingWhitespace : 1; | 176 bool m_hasTrailingWhitespace : 1; |
| 179 }; | 177 }; |
| 180 | 178 |
| 181 extern template class CORE_EXTERN_TEMPLATE_EXPORT VisibleSelectionTemplate<Editi ngStrategy>; | 179 extern template class CORE_EXTERN_TEMPLATE_EXPORT VisibleSelectionTemplate<Editi ngStrategy>; |
| 182 extern template class CORE_EXTERN_TEMPLATE_EXPORT VisibleSelectionTemplate<Editi ngInFlatTreeStrategy>; | 180 extern template class CORE_EXTERN_TEMPLATE_EXPORT VisibleSelectionTemplate<Editi ngInFlatTreeStrategy>; |
| 183 | 181 |
| 184 using VisibleSelection = VisibleSelectionTemplate<EditingStrategy>; | 182 using VisibleSelection = VisibleSelectionTemplate<EditingStrategy>; |
| 185 using VisibleSelectionInFlatTree = VisibleSelectionTemplate<EditingInFlatTreeStr ategy>; | 183 using VisibleSelectionInFlatTree = VisibleSelectionTemplate<EditingInFlatTreeStr ategy>; |
| 186 | 184 |
| 185 // TODO(xiaochengh): Introduce builder class to get rid of these overloads. | |
| 186 CORE_EXPORT VisibleSelection createVisibleSelection(const Position&, TextAffinit y, bool isDirectional = false); | |
| 187 CORE_EXPORT VisibleSelection createVisibleSelection(const Position& base, const Position& extent, TextAffinity = SelDefaultAffinity, bool isDirectional = false) ; | |
| 188 CORE_EXPORT VisibleSelection createVisibleSelection(const EphemeralRange&, TextA ffinity = SelDefaultAffinity, bool isDirectional = false); | |
| 189 CORE_EXPORT VisibleSelection createVisibleSelection(const VisiblePosition&, bool isDirectional = false); | |
| 190 CORE_EXPORT VisibleSelection createVisibleSelection(const VisiblePosition&, cons t VisiblePosition&, bool isDirectional = false); | |
| 191 CORE_EXPORT VisibleSelection createVisibleSelection(const PositionWithAffinity&, bool isDirectional = false); | |
| 192 | |
| 193 CORE_EXPORT VisibleSelectionInFlatTree createVisibleSelection(const PositionInFl atTree&, TextAffinity, bool isDirectional = false); | |
| 194 CORE_EXPORT VisibleSelectionInFlatTree createVisibleSelection(const PositionInFl atTree& base, const PositionInFlatTree& extent, TextAffinity = SelDefaultAffinit y, bool isDirectional = false); | |
| 195 CORE_EXPORT VisibleSelectionInFlatTree createVisibleSelection(const EphemeralRan geInFlatTree&, TextAffinity = SelDefaultAffinity, bool isDirectional = false); | |
| 196 CORE_EXPORT VisibleSelectionInFlatTree createVisibleSelection(const VisiblePosit ionInFlatTree&, bool isDirectional = false); | |
| 197 CORE_EXPORT VisibleSelectionInFlatTree createVisibleSelection(const VisiblePosit ionInFlatTree&, const VisiblePositionInFlatTree&, bool isDirectional = false); | |
| 198 CORE_EXPORT VisibleSelectionInFlatTree createVisibleSelection(const PositionInFl atTreeWithAffinity&, bool isDirectional = false); | |
| 199 | |
| 200 // Callers of these functions should ensure clean layout by themselves and then | |
| 201 // switch to the proper versions (to be introduced). | |
| 202 CORE_EXPORT VisibleSelection createVisibleSelectionDeprecated(const Position&, T extAffinity, bool isDirectional = false); | |
| 203 CORE_EXPORT VisibleSelection createVisibleSelectionDeprecated(const Position& ba se, const Position& extent, TextAffinity = SelDefaultAffinity, bool isDirectiona l = false); | |
| 204 CORE_EXPORT VisibleSelection createVisibleSelectionDeprecated(const EphemeralRan ge&, TextAffinity = SelDefaultAffinity, bool isDirectional = false); | |
| 205 CORE_EXPORT VisibleSelection createVisibleSelectionDeprecated(const VisiblePosit ion&, bool isDirectional = false); | |
| 206 CORE_EXPORT VisibleSelection createVisibleSelectionDeprecated(const VisiblePosit ion&, const VisiblePosition&, bool isDirectional = false); | |
| 207 CORE_EXPORT VisibleSelection createVisibleSelectionDeprecated(const PositionWith Affinity&, bool isDirectional = false); | |
| 208 | |
| 209 CORE_EXPORT VisibleSelectionInFlatTree createVisibleSelectionDeprecated(const Po sitionInFlatTree&, TextAffinity, bool isDirectional = false); | |
| 210 CORE_EXPORT VisibleSelectionInFlatTree createVisibleSelectionDeprecated(const Po sitionInFlatTree& base, const PositionInFlatTree& extent, TextAffinity = SelDefa ultAffinity, bool isDirectional = false); | |
| 211 CORE_EXPORT VisibleSelectionInFlatTree createVisibleSelectionDeprecated(const Ep hemeralRangeInFlatTree&, TextAffinity = SelDefaultAffinity, bool isDirectional = false); | |
| 212 CORE_EXPORT VisibleSelectionInFlatTree createVisibleSelectionDeprecated(const Vi siblePositionInFlatTree&, bool isDirectional = false); | |
| 213 CORE_EXPORT VisibleSelectionInFlatTree createVisibleSelectionDeprecated(const Vi siblePositionInFlatTree&, const VisiblePositionInFlatTree&, bool isDirectional = false); | |
| 214 CORE_EXPORT VisibleSelectionInFlatTree createVisibleSelectionDeprecated(const Po sitionInFlatTreeWithAffinity&, bool isDirectional = false); | |
| 215 | |
| 187 // We don't yet support multi-range selections, so we only ever have one range | 216 // We don't yet support multi-range selections, so we only ever have one range |
| 188 // to return. | 217 // to return. |
| 189 CORE_EXPORT EphemeralRange firstEphemeralRangeOf(const VisibleSelection&); | 218 CORE_EXPORT EphemeralRange firstEphemeralRangeOf(const VisibleSelection&); |
| 190 | 219 |
| 191 // TODO(sof): move more firstRangeOf() uses to be over EphemeralRange instead. | 220 // TODO(sof): move more firstRangeOf() uses to be over EphemeralRange instead. |
| 192 CORE_EXPORT Range* firstRangeOf(const VisibleSelection&); | 221 CORE_EXPORT Range* firstRangeOf(const VisibleSelection&); |
| 193 | 222 |
| 194 CORE_EXPORT std::ostream& operator<<(std::ostream&, const VisibleSelection&); | 223 CORE_EXPORT std::ostream& operator<<(std::ostream&, const VisibleSelection&); |
| 195 CORE_EXPORT std::ostream& operator<<(std::ostream&, const VisibleSelectionInFlat Tree&); | 224 CORE_EXPORT std::ostream& operator<<(std::ostream&, const VisibleSelectionInFlat Tree&); |
| 196 | 225 |
| 197 } // namespace blink | 226 } // namespace blink |
| 198 | 227 |
| 199 #ifndef NDEBUG | 228 #ifndef NDEBUG |
| 200 // Outside the WebCore namespace for ease of invocation from gdb. | 229 // Outside the WebCore namespace for ease of invocation from gdb. |
| 201 void showTree(const blink::VisibleSelection&); | 230 void showTree(const blink::VisibleSelection&); |
| 202 void showTree(const blink::VisibleSelection*); | 231 void showTree(const blink::VisibleSelection*); |
| 203 void showTree(const blink::VisibleSelectionInFlatTree&); | 232 void showTree(const blink::VisibleSelectionInFlatTree&); |
| 204 void showTree(const blink::VisibleSelectionInFlatTree*); | 233 void showTree(const blink::VisibleSelectionInFlatTree*); |
| 205 #endif | 234 #endif |
| 206 | 235 |
| 207 #endif // VisibleSelection_h | 236 #endif // VisibleSelection_h |
| OLD | NEW |