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

Side by Side Diff: third_party/WebKit/Source/core/editing/VisibleSelection.h

Issue 2374183004: Make non-null VisibleSelections creatable only by createVisibleSelection[Deprecated] (Closed)
Patch Set: Fix mac compile error Created 4 years, 2 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 unified diff | Download patch
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698