OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc. All rights reserved. | 2 * Copyright (C) 2004, 2005, 2006 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 30 matching lines...) Expand all Loading... |
41 | 41 |
42 namespace blink { | 42 namespace blink { |
43 | 43 |
44 template <typename Strategy> | 44 template <typename Strategy> |
45 VisibleSelectionTemplate<Strategy>::VisibleSelectionTemplate() | 45 VisibleSelectionTemplate<Strategy>::VisibleSelectionTemplate() |
46 : m_affinity(TextAffinity::Downstream), | 46 : m_affinity(TextAffinity::Downstream), |
47 m_selectionType(NoSelection), | 47 m_selectionType(NoSelection), |
48 m_baseIsFirst(true), | 48 m_baseIsFirst(true), |
49 m_isDirectional(false), | 49 m_isDirectional(false), |
50 m_granularity(CharacterGranularity), | 50 m_granularity(CharacterGranularity), |
51 m_hasTrailingWhitespace(false) {} | 51 m_hasTrailingWhitespace(false), |
| 52 m_isHandleVisible(false) {} |
52 | 53 |
53 template <typename Strategy> | 54 template <typename Strategy> |
54 VisibleSelectionTemplate<Strategy>::VisibleSelectionTemplate( | 55 VisibleSelectionTemplate<Strategy>::VisibleSelectionTemplate( |
55 const PositionTemplate<Strategy>& base, | 56 const PositionTemplate<Strategy>& base, |
56 const PositionTemplate<Strategy>& extent, | 57 const PositionTemplate<Strategy>& extent, |
57 TextAffinity affinity, | 58 TextAffinity affinity, |
58 bool isDirectional) | 59 bool isDirectional, |
| 60 bool isHandleVisible) |
59 : m_base(base), | 61 : m_base(base), |
60 m_extent(extent), | 62 m_extent(extent), |
61 m_affinity(affinity), | 63 m_affinity(affinity), |
62 m_isDirectional(isDirectional), | 64 m_isDirectional(isDirectional), |
63 m_granularity(CharacterGranularity), | 65 m_granularity(CharacterGranularity), |
64 m_hasTrailingWhitespace(false) { | 66 m_hasTrailingWhitespace(false), |
| 67 m_isHandleVisible(isHandleVisible) { |
65 validate(); | 68 validate(); |
66 } | 69 } |
67 | 70 |
68 template <typename Strategy> | 71 template <typename Strategy> |
69 VisibleSelectionTemplate<Strategy> VisibleSelectionTemplate<Strategy>::create( | 72 VisibleSelectionTemplate<Strategy> VisibleSelectionTemplate<Strategy>::create( |
70 const PositionTemplate<Strategy>& base, | 73 const PositionTemplate<Strategy>& base, |
71 const PositionTemplate<Strategy>& extent, | 74 const PositionTemplate<Strategy>& extent, |
72 TextAffinity affinity, | 75 TextAffinity affinity, |
73 bool isDirectional) { | 76 bool isDirectional, |
74 return VisibleSelectionTemplate(base, extent, affinity, isDirectional); | 77 bool isHandleVisible) { |
| 78 return VisibleSelectionTemplate(base, extent, affinity, isDirectional, |
| 79 isHandleVisible); |
75 } | 80 } |
76 | 81 |
77 VisibleSelection createVisibleSelectionDeprecated(const Position& pos, | 82 VisibleSelection createVisibleSelectionDeprecated(const Position& pos, |
78 TextAffinity affinity, | 83 TextAffinity affinity, |
79 bool isDirectional) { | 84 bool isDirectional, |
| 85 bool isHandleVisible) { |
80 if (pos.isNotNull()) | 86 if (pos.isNotNull()) |
81 pos.document()->updateStyleAndLayoutIgnorePendingStylesheets(); | 87 pos.document()->updateStyleAndLayoutIgnorePendingStylesheets(); |
82 return VisibleSelection::create(pos, pos, affinity, isDirectional); | 88 return VisibleSelection::create(pos, pos, affinity, isDirectional, |
| 89 isHandleVisible); |
83 } | 90 } |
84 | 91 |
85 VisibleSelection createVisibleSelectionDeprecated(const Position& base, | 92 VisibleSelection createVisibleSelectionDeprecated(const Position& base, |
86 const Position& extent, | 93 const Position& extent, |
87 TextAffinity affinity, | 94 TextAffinity affinity, |
88 bool isDirectional) { | 95 bool isDirectional, |
| 96 bool isHandleVisible) { |
89 if (base.isNotNull()) | 97 if (base.isNotNull()) |
90 base.document()->updateStyleAndLayoutIgnorePendingStylesheets(); | 98 base.document()->updateStyleAndLayoutIgnorePendingStylesheets(); |
91 if (extent.isNotNull()) | 99 if (extent.isNotNull()) |
92 extent.document()->updateStyleAndLayoutIgnorePendingStylesheets(); | 100 extent.document()->updateStyleAndLayoutIgnorePendingStylesheets(); |
93 return VisibleSelection::create(base, extent, affinity, isDirectional); | 101 return VisibleSelection::create(base, extent, affinity, isDirectional, |
| 102 isHandleVisible); |
94 } | 103 } |
95 | 104 |
96 VisibleSelection createVisibleSelectionDeprecated( | 105 VisibleSelection createVisibleSelectionDeprecated( |
97 const PositionWithAffinity& pos, | 106 const PositionWithAffinity& pos, |
98 bool isDirectional) { | 107 bool isDirectional, |
| 108 bool isHandleVisible) { |
99 if (pos.isNotNull()) | 109 if (pos.isNotNull()) |
100 pos.position().document()->updateStyleAndLayoutIgnorePendingStylesheets(); | 110 pos.position().document()->updateStyleAndLayoutIgnorePendingStylesheets(); |
101 return VisibleSelection::create(pos.position(), pos.position(), | 111 return VisibleSelection::create(pos.position(), pos.position(), |
102 pos.affinity(), isDirectional); | 112 pos.affinity(), isDirectional, |
| 113 isHandleVisible); |
103 } | 114 } |
104 | 115 |
105 VisibleSelection createVisibleSelectionDeprecated(const VisiblePosition& pos, | 116 VisibleSelection createVisibleSelectionDeprecated(const VisiblePosition& pos, |
106 bool isDirectional) { | 117 bool isDirectional, |
| 118 bool isHandleVisible) { |
107 if (pos.isNotNull()) | 119 if (pos.isNotNull()) |
108 pos.deepEquivalent() | 120 pos.deepEquivalent() |
109 .document() | 121 .document() |
110 ->updateStyleAndLayoutIgnorePendingStylesheets(); | 122 ->updateStyleAndLayoutIgnorePendingStylesheets(); |
111 return VisibleSelection::create(pos.deepEquivalent(), pos.deepEquivalent(), | 123 return VisibleSelection::create(pos.deepEquivalent(), pos.deepEquivalent(), |
112 pos.affinity(), isDirectional); | 124 pos.affinity(), isDirectional, |
| 125 isHandleVisible); |
113 } | 126 } |
114 | 127 |
115 VisibleSelection createVisibleSelectionDeprecated(const VisiblePosition& base, | 128 VisibleSelection createVisibleSelectionDeprecated(const VisiblePosition& base, |
116 const VisiblePosition& extent, | 129 const VisiblePosition& extent, |
117 bool isDirectional) { | 130 bool isDirectional, |
| 131 bool isHandleVisible) { |
118 if (base.isNotNull()) | 132 if (base.isNotNull()) |
119 base.deepEquivalent() | 133 base.deepEquivalent() |
120 .document() | 134 .document() |
121 ->updateStyleAndLayoutIgnorePendingStylesheets(); | 135 ->updateStyleAndLayoutIgnorePendingStylesheets(); |
122 if (extent.isNotNull()) | 136 if (extent.isNotNull()) |
123 extent.deepEquivalent() | 137 extent.deepEquivalent() |
124 .document() | 138 .document() |
125 ->updateStyleAndLayoutIgnorePendingStylesheets(); | 139 ->updateStyleAndLayoutIgnorePendingStylesheets(); |
126 return VisibleSelection::create(base.deepEquivalent(), | 140 return VisibleSelection::create(base.deepEquivalent(), |
127 extent.deepEquivalent(), base.affinity(), | 141 extent.deepEquivalent(), base.affinity(), |
128 isDirectional); | 142 isDirectional, isHandleVisible); |
129 } | 143 } |
130 | 144 |
131 VisibleSelection createVisibleSelectionDeprecated(const EphemeralRange& range, | 145 VisibleSelection createVisibleSelectionDeprecated(const EphemeralRange& range, |
132 TextAffinity affinity, | 146 TextAffinity affinity, |
133 bool isDirectional) { | 147 bool isDirectional, |
| 148 bool isHandleVisible) { |
134 if (range.isNotNull()) | 149 if (range.isNotNull()) |
135 range.startPosition() | 150 range.startPosition() |
136 .document() | 151 .document() |
137 ->updateStyleAndLayoutIgnorePendingStylesheets(); | 152 ->updateStyleAndLayoutIgnorePendingStylesheets(); |
138 return VisibleSelection::create(range.startPosition(), range.endPosition(), | 153 return VisibleSelection::create(range.startPosition(), range.endPosition(), |
139 affinity, isDirectional); | 154 affinity, isDirectional, isHandleVisible); |
140 } | 155 } |
141 | 156 |
142 VisibleSelectionInFlatTree createVisibleSelectionDeprecated( | 157 VisibleSelectionInFlatTree createVisibleSelectionDeprecated( |
143 const PositionInFlatTree& pos, | 158 const PositionInFlatTree& pos, |
144 TextAffinity affinity, | 159 TextAffinity affinity, |
145 bool isDirectional) { | 160 bool isDirectional, |
| 161 bool isHandleVisible) { |
146 if (pos.isNotNull()) | 162 if (pos.isNotNull()) |
147 pos.document()->updateStyleAndLayoutIgnorePendingStylesheets(); | 163 pos.document()->updateStyleAndLayoutIgnorePendingStylesheets(); |
148 return VisibleSelectionInFlatTree::create(pos, pos, affinity, isDirectional); | 164 return VisibleSelectionInFlatTree::create(pos, pos, affinity, isDirectional, |
| 165 isHandleVisible); |
149 } | 166 } |
150 | 167 |
151 VisibleSelectionInFlatTree createVisibleSelectionDeprecated( | 168 VisibleSelectionInFlatTree createVisibleSelectionDeprecated( |
152 const PositionInFlatTree& base, | 169 const PositionInFlatTree& base, |
153 const PositionInFlatTree& extent, | 170 const PositionInFlatTree& extent, |
154 TextAffinity affinity, | 171 TextAffinity affinity, |
155 bool isDirectional) { | 172 bool isDirectional, |
| 173 bool isHandleVisible) { |
156 if (base.isNotNull()) | 174 if (base.isNotNull()) |
157 base.document()->updateStyleAndLayoutIgnorePendingStylesheets(); | 175 base.document()->updateStyleAndLayoutIgnorePendingStylesheets(); |
158 if (extent.isNotNull()) | 176 if (extent.isNotNull()) |
159 extent.document()->updateStyleAndLayoutIgnorePendingStylesheets(); | 177 extent.document()->updateStyleAndLayoutIgnorePendingStylesheets(); |
160 return VisibleSelectionInFlatTree::create(base, extent, affinity, | 178 return VisibleSelectionInFlatTree::create(base, extent, affinity, |
161 isDirectional); | 179 isDirectional, isHandleVisible); |
162 } | 180 } |
163 | 181 |
164 VisibleSelectionInFlatTree createVisibleSelectionDeprecated( | 182 VisibleSelectionInFlatTree createVisibleSelectionDeprecated( |
165 const PositionInFlatTreeWithAffinity& pos, | 183 const PositionInFlatTreeWithAffinity& pos, |
166 bool isDirectional) { | 184 bool isDirectional, |
| 185 bool isHandleVisible) { |
167 if (pos.isNotNull()) | 186 if (pos.isNotNull()) |
168 pos.position().document()->updateStyleAndLayoutIgnorePendingStylesheets(); | 187 pos.position().document()->updateStyleAndLayoutIgnorePendingStylesheets(); |
169 return VisibleSelectionInFlatTree::create(pos.position(), pos.position(), | 188 return VisibleSelectionInFlatTree::create(pos.position(), pos.position(), |
170 pos.affinity(), isDirectional); | 189 pos.affinity(), isDirectional, |
| 190 isHandleVisible); |
171 } | 191 } |
172 | 192 |
173 VisibleSelectionInFlatTree createVisibleSelectionDeprecated( | 193 VisibleSelectionInFlatTree createVisibleSelectionDeprecated( |
174 const VisiblePositionInFlatTree& pos, | 194 const VisiblePositionInFlatTree& pos, |
175 bool isDirectional) { | 195 bool isDirectional, |
| 196 bool isHandleVisible) { |
176 if (pos.isNotNull()) | 197 if (pos.isNotNull()) |
177 pos.deepEquivalent() | 198 pos.deepEquivalent() |
178 .document() | 199 .document() |
179 ->updateStyleAndLayoutIgnorePendingStylesheets(); | 200 ->updateStyleAndLayoutIgnorePendingStylesheets(); |
180 return VisibleSelectionInFlatTree::create(pos.deepEquivalent(), | 201 return VisibleSelectionInFlatTree::create( |
181 pos.deepEquivalent(), | 202 pos.deepEquivalent(), pos.deepEquivalent(), pos.affinity(), isDirectional, |
182 pos.affinity(), isDirectional); | 203 isHandleVisible); |
183 } | 204 } |
184 | 205 |
185 VisibleSelectionInFlatTree createVisibleSelectionDeprecated( | 206 VisibleSelectionInFlatTree createVisibleSelectionDeprecated( |
186 const VisiblePositionInFlatTree& base, | 207 const VisiblePositionInFlatTree& base, |
187 const VisiblePositionInFlatTree& extent, | 208 const VisiblePositionInFlatTree& extent, |
188 bool isDirectional) { | 209 bool isDirectional, |
| 210 bool isHandleVisible) { |
189 if (base.isNotNull()) | 211 if (base.isNotNull()) |
190 base.deepEquivalent() | 212 base.deepEquivalent() |
191 .document() | 213 .document() |
192 ->updateStyleAndLayoutIgnorePendingStylesheets(); | 214 ->updateStyleAndLayoutIgnorePendingStylesheets(); |
193 if (extent.isNotNull()) | 215 if (extent.isNotNull()) |
194 extent.deepEquivalent() | 216 extent.deepEquivalent() |
195 .document() | 217 .document() |
196 ->updateStyleAndLayoutIgnorePendingStylesheets(); | 218 ->updateStyleAndLayoutIgnorePendingStylesheets(); |
197 return VisibleSelectionInFlatTree::create(base.deepEquivalent(), | 219 return VisibleSelectionInFlatTree::create( |
198 extent.deepEquivalent(), | 220 base.deepEquivalent(), extent.deepEquivalent(), base.affinity(), |
199 base.affinity(), isDirectional); | 221 isDirectional, isHandleVisible); |
200 } | 222 } |
201 | 223 |
202 VisibleSelectionInFlatTree createVisibleSelectionDeprecated( | 224 VisibleSelectionInFlatTree createVisibleSelectionDeprecated( |
203 const EphemeralRangeInFlatTree& range, | 225 const EphemeralRangeInFlatTree& range, |
204 TextAffinity affinity, | 226 TextAffinity affinity, |
205 bool isDirectional) { | 227 bool isDirectional, |
| 228 bool isHandleVisible) { |
206 if (range.isNotNull()) | 229 if (range.isNotNull()) |
207 range.startPosition() | 230 range.startPosition() |
208 .document() | 231 .document() |
209 ->updateStyleAndLayoutIgnorePendingStylesheets(); | 232 ->updateStyleAndLayoutIgnorePendingStylesheets(); |
210 return VisibleSelectionInFlatTree::create( | 233 return VisibleSelectionInFlatTree::create(range.startPosition(), |
211 range.startPosition(), range.endPosition(), affinity, isDirectional); | 234 range.endPosition(), affinity, |
| 235 isDirectional, isHandleVisible); |
212 } | 236 } |
213 | 237 |
214 VisibleSelection createVisibleSelection(const Position& pos, | 238 VisibleSelection createVisibleSelection(const Position& pos, |
215 TextAffinity affinity, | 239 TextAffinity affinity, |
216 bool isDirectional) { | 240 bool isDirectional, |
| 241 bool isHandleVisible) { |
217 DCHECK(!needsLayoutTreeUpdate(pos)); | 242 DCHECK(!needsLayoutTreeUpdate(pos)); |
218 return VisibleSelection::create(pos, pos, affinity, isDirectional); | 243 return VisibleSelection::create(pos, pos, affinity, isDirectional, |
| 244 isHandleVisible); |
219 } | 245 } |
220 | 246 |
221 VisibleSelection createVisibleSelection(const Position& base, | 247 VisibleSelection createVisibleSelection(const Position& base, |
222 const Position& extent, | 248 const Position& extent, |
223 TextAffinity affinity, | 249 TextAffinity affinity, |
224 bool isDirectional) { | 250 bool isDirectional, |
| 251 bool isHandleVisible) { |
225 DCHECK(!needsLayoutTreeUpdate(base)); | 252 DCHECK(!needsLayoutTreeUpdate(base)); |
226 DCHECK(!needsLayoutTreeUpdate(extent)); | 253 DCHECK(!needsLayoutTreeUpdate(extent)); |
227 // TODO(xiaochengh): We should check |base.isNotNull() || extent.isNull()| | 254 // TODO(xiaochengh): We should check |base.isNotNull() || extent.isNull()| |
228 // after all call sites have ensured that. | 255 // after all call sites have ensured that. |
229 return VisibleSelection::create(base, extent, affinity, isDirectional); | 256 return VisibleSelection::create(base, extent, affinity, isDirectional, |
| 257 isHandleVisible); |
230 } | 258 } |
231 | 259 |
232 VisibleSelection createVisibleSelection(const PositionWithAffinity& pos, | 260 VisibleSelection createVisibleSelection(const PositionWithAffinity& pos, |
233 bool isDirectional) { | 261 bool isDirectional, |
| 262 bool isHandleVisible) { |
234 DCHECK(!needsLayoutTreeUpdate(pos.position())); | 263 DCHECK(!needsLayoutTreeUpdate(pos.position())); |
235 return VisibleSelection::create(pos.position(), pos.position(), | 264 return VisibleSelection::create(pos.position(), pos.position(), |
236 pos.affinity(), isDirectional); | 265 pos.affinity(), isDirectional, |
| 266 isHandleVisible); |
237 } | 267 } |
238 | 268 |
239 VisibleSelection createVisibleSelection(const VisiblePosition& pos, | 269 VisibleSelection createVisibleSelection(const VisiblePosition& pos, |
240 bool isDirectional) { | 270 bool isDirectional, |
| 271 bool isHandleVisible) { |
241 DCHECK(pos.isValid()); | 272 DCHECK(pos.isValid()); |
242 return VisibleSelection::create(pos.deepEquivalent(), pos.deepEquivalent(), | 273 return VisibleSelection::create(pos.deepEquivalent(), pos.deepEquivalent(), |
243 pos.affinity(), isDirectional); | 274 pos.affinity(), isDirectional, |
| 275 isHandleVisible); |
244 } | 276 } |
245 | 277 |
246 VisibleSelection createVisibleSelection(const VisiblePosition& base, | 278 VisibleSelection createVisibleSelection(const VisiblePosition& base, |
247 const VisiblePosition& extent, | 279 const VisiblePosition& extent, |
248 bool isDirectional) { | 280 bool isDirectional, |
| 281 bool isHandleVisible) { |
249 DCHECK(base.isValid()); | 282 DCHECK(base.isValid()); |
250 DCHECK(extent.isValid()); | 283 DCHECK(extent.isValid()); |
251 // TODO(xiaochengh): We should check |base.isNotNull() || extent.isNull()| | 284 // TODO(xiaochengh): We should check |base.isNotNull() || extent.isNull()| |
252 // after all call sites have ensured that. | 285 // after all call sites have ensured that. |
253 return VisibleSelection::create(base.deepEquivalent(), | 286 return VisibleSelection::create(base.deepEquivalent(), |
254 extent.deepEquivalent(), base.affinity(), | 287 extent.deepEquivalent(), base.affinity(), |
255 isDirectional); | 288 isDirectional, isHandleVisible); |
256 } | 289 } |
257 | 290 |
258 VisibleSelection createVisibleSelection(const EphemeralRange& range, | 291 VisibleSelection createVisibleSelection(const EphemeralRange& range, |
259 TextAffinity affinity, | 292 TextAffinity affinity, |
260 bool isDirectional) { | 293 bool isDirectional, |
| 294 bool isHandleVisible) { |
261 DCHECK(!needsLayoutTreeUpdate(range.startPosition())); | 295 DCHECK(!needsLayoutTreeUpdate(range.startPosition())); |
262 DCHECK(!needsLayoutTreeUpdate(range.endPosition())); | 296 DCHECK(!needsLayoutTreeUpdate(range.endPosition())); |
263 return VisibleSelection::create(range.startPosition(), range.endPosition(), | 297 return VisibleSelection::create(range.startPosition(), range.endPosition(), |
264 affinity, isDirectional); | 298 affinity, isDirectional, isHandleVisible); |
265 } | 299 } |
266 | 300 |
267 VisibleSelectionInFlatTree createVisibleSelection(const PositionInFlatTree& pos, | 301 VisibleSelectionInFlatTree createVisibleSelection(const PositionInFlatTree& pos, |
268 TextAffinity affinity, | 302 TextAffinity affinity, |
269 bool isDirectional) { | 303 bool isDirectional, |
| 304 bool isHandleVisible) { |
270 DCHECK(!needsLayoutTreeUpdate(pos)); | 305 DCHECK(!needsLayoutTreeUpdate(pos)); |
271 return VisibleSelectionInFlatTree::create(pos, pos, affinity, isDirectional); | 306 return VisibleSelectionInFlatTree::create(pos, pos, affinity, isDirectional, |
| 307 isHandleVisible); |
272 } | 308 } |
273 | 309 |
274 VisibleSelectionInFlatTree createVisibleSelection( | 310 VisibleSelectionInFlatTree createVisibleSelection( |
275 const PositionInFlatTree& base, | 311 const PositionInFlatTree& base, |
276 const PositionInFlatTree& extent, | 312 const PositionInFlatTree& extent, |
277 TextAffinity affinity, | 313 TextAffinity affinity, |
278 bool isDirectional) { | 314 bool isDirectional, |
| 315 bool isHandleVisible) { |
279 DCHECK(!needsLayoutTreeUpdate(base)); | 316 DCHECK(!needsLayoutTreeUpdate(base)); |
280 DCHECK(!needsLayoutTreeUpdate(extent)); | 317 DCHECK(!needsLayoutTreeUpdate(extent)); |
281 // TODO(xiaochengh): We should check |base.isNotNull() || extent.isNull()| | 318 // TODO(xiaochengh): We should check |base.isNotNull() || extent.isNull()| |
282 // after all call sites have ensured that. | 319 // after all call sites have ensured that. |
283 return VisibleSelectionInFlatTree::create(base, extent, affinity, | 320 return VisibleSelectionInFlatTree::create(base, extent, affinity, |
284 isDirectional); | 321 isDirectional, isHandleVisible); |
285 } | 322 } |
286 | 323 |
287 VisibleSelectionInFlatTree createVisibleSelection( | 324 VisibleSelectionInFlatTree createVisibleSelection( |
288 const PositionInFlatTreeWithAffinity& pos, | 325 const PositionInFlatTreeWithAffinity& pos, |
289 bool isDirectional) { | 326 bool isDirectional, |
| 327 bool isHandleVisible) { |
290 DCHECK(!needsLayoutTreeUpdate(pos.position())); | 328 DCHECK(!needsLayoutTreeUpdate(pos.position())); |
291 return VisibleSelectionInFlatTree::create(pos.position(), pos.position(), | 329 return VisibleSelectionInFlatTree::create(pos.position(), pos.position(), |
292 pos.affinity(), isDirectional); | 330 pos.affinity(), isDirectional, |
| 331 isHandleVisible); |
293 } | 332 } |
294 | 333 |
295 VisibleSelectionInFlatTree createVisibleSelection( | 334 VisibleSelectionInFlatTree createVisibleSelection( |
296 const VisiblePositionInFlatTree& pos, | 335 const VisiblePositionInFlatTree& pos, |
297 bool isDirectional) { | 336 bool isDirectional, |
| 337 bool isHandleVisible) { |
298 DCHECK(pos.isValid()); | 338 DCHECK(pos.isValid()); |
299 return VisibleSelectionInFlatTree::create(pos.deepEquivalent(), | 339 return VisibleSelectionInFlatTree::create( |
300 pos.deepEquivalent(), | 340 pos.deepEquivalent(), pos.deepEquivalent(), pos.affinity(), isDirectional, |
301 pos.affinity(), isDirectional); | 341 isHandleVisible); |
302 } | 342 } |
303 | 343 |
304 VisibleSelectionInFlatTree createVisibleSelection( | 344 VisibleSelectionInFlatTree createVisibleSelection( |
305 const VisiblePositionInFlatTree& base, | 345 const VisiblePositionInFlatTree& base, |
306 const VisiblePositionInFlatTree& extent, | 346 const VisiblePositionInFlatTree& extent, |
307 bool isDirectional) { | 347 bool isDirectional, |
| 348 bool isHandleVisible) { |
308 DCHECK(base.isValid()); | 349 DCHECK(base.isValid()); |
309 DCHECK(extent.isValid()); | 350 DCHECK(extent.isValid()); |
310 // TODO(xiaochengh): We should check |base.isNotNull() || extent.isNull()| | 351 // TODO(xiaochengh): We should check |base.isNotNull() || extent.isNull()| |
311 // after all call sites have ensured that. | 352 // after all call sites have ensured that. |
312 return VisibleSelectionInFlatTree::create(base.deepEquivalent(), | 353 return VisibleSelectionInFlatTree::create( |
313 extent.deepEquivalent(), | 354 base.deepEquivalent(), extent.deepEquivalent(), base.affinity(), |
314 base.affinity(), isDirectional); | 355 isDirectional, isHandleVisible); |
315 } | 356 } |
316 | 357 |
317 VisibleSelectionInFlatTree createVisibleSelection( | 358 VisibleSelectionInFlatTree createVisibleSelection( |
318 const EphemeralRangeInFlatTree& range, | 359 const EphemeralRangeInFlatTree& range, |
319 TextAffinity affinity, | 360 TextAffinity affinity, |
320 bool isDirectional) { | 361 bool isDirectional, |
| 362 bool isHandleVisible) { |
321 DCHECK(!needsLayoutTreeUpdate(range.startPosition())); | 363 DCHECK(!needsLayoutTreeUpdate(range.startPosition())); |
322 DCHECK(!needsLayoutTreeUpdate(range.endPosition())); | 364 DCHECK(!needsLayoutTreeUpdate(range.endPosition())); |
323 return VisibleSelectionInFlatTree::create( | 365 return VisibleSelectionInFlatTree::create(range.startPosition(), |
324 range.startPosition(), range.endPosition(), affinity, isDirectional); | 366 range.endPosition(), affinity, |
| 367 isDirectional, isHandleVisible); |
325 } | 368 } |
326 | 369 |
327 template <typename Strategy> | 370 template <typename Strategy> |
328 static SelectionType computeSelectionType( | 371 static SelectionType computeSelectionType( |
329 const PositionTemplate<Strategy>& start, | 372 const PositionTemplate<Strategy>& start, |
330 const PositionTemplate<Strategy>& end) { | 373 const PositionTemplate<Strategy>& end) { |
331 if (start.isNull()) { | 374 if (start.isNull()) { |
332 DCHECK(end.isNull()); | 375 DCHECK(end.isNull()); |
333 return NoSelection; | 376 return NoSelection; |
334 } | 377 } |
(...skipping 14 matching lines...) Expand all Loading... |
349 const VisibleSelectionTemplate<Strategy>& other) | 392 const VisibleSelectionTemplate<Strategy>& other) |
350 : m_base(other.m_base), | 393 : m_base(other.m_base), |
351 m_extent(other.m_extent), | 394 m_extent(other.m_extent), |
352 m_start(other.m_start), | 395 m_start(other.m_start), |
353 m_end(other.m_end), | 396 m_end(other.m_end), |
354 m_affinity(other.m_affinity), | 397 m_affinity(other.m_affinity), |
355 m_selectionType(other.m_selectionType), | 398 m_selectionType(other.m_selectionType), |
356 m_baseIsFirst(other.m_baseIsFirst), | 399 m_baseIsFirst(other.m_baseIsFirst), |
357 m_isDirectional(other.m_isDirectional), | 400 m_isDirectional(other.m_isDirectional), |
358 m_granularity(other.m_granularity), | 401 m_granularity(other.m_granularity), |
359 m_hasTrailingWhitespace(other.m_hasTrailingWhitespace) {} | 402 m_hasTrailingWhitespace(other.m_hasTrailingWhitespace), |
| 403 m_isHandleVisible(other.m_isHandleVisible) {} |
360 | 404 |
361 template <typename Strategy> | 405 template <typename Strategy> |
362 VisibleSelectionTemplate<Strategy>& VisibleSelectionTemplate<Strategy>:: | 406 VisibleSelectionTemplate<Strategy>& VisibleSelectionTemplate<Strategy>:: |
363 operator=(const VisibleSelectionTemplate<Strategy>& other) { | 407 operator=(const VisibleSelectionTemplate<Strategy>& other) { |
364 m_base = other.m_base; | 408 m_base = other.m_base; |
365 m_extent = other.m_extent; | 409 m_extent = other.m_extent; |
366 m_start = other.m_start; | 410 m_start = other.m_start; |
367 m_end = other.m_end; | 411 m_end = other.m_end; |
368 m_affinity = other.m_affinity; | 412 m_affinity = other.m_affinity; |
369 m_selectionType = other.m_selectionType; | 413 m_selectionType = other.m_selectionType; |
370 m_baseIsFirst = other.m_baseIsFirst; | 414 m_baseIsFirst = other.m_baseIsFirst; |
371 m_isDirectional = other.m_isDirectional; | 415 m_isDirectional = other.m_isDirectional; |
372 m_granularity = other.m_granularity; | 416 m_granularity = other.m_granularity; |
373 m_hasTrailingWhitespace = other.m_hasTrailingWhitespace; | 417 m_hasTrailingWhitespace = other.m_hasTrailingWhitespace; |
| 418 m_isHandleVisible = other.m_isHandleVisible; |
374 return *this; | 419 return *this; |
375 } | 420 } |
376 | 421 |
377 template <typename Strategy> | 422 template <typename Strategy> |
378 VisibleSelectionTemplate<Strategy> | 423 VisibleSelectionTemplate<Strategy> |
379 VisibleSelectionTemplate<Strategy>::selectionFromContentsOfNode(Node* node) { | 424 VisibleSelectionTemplate<Strategy>::selectionFromContentsOfNode(Node* node) { |
380 DCHECK(!Strategy::editingIgnoresContent(node)); | 425 DCHECK(!Strategy::editingIgnoresContent(node)); |
381 | 426 |
382 // TODO(xiaochengh): The use of updateStyleAndLayoutIgnorePendingStylesheets | 427 // TODO(xiaochengh): The use of updateStyleAndLayoutIgnorePendingStylesheets |
383 // needs to be audited. see http://crbug.com/590369 for more details. | 428 // needs to be audited. see http://crbug.com/590369 for more details. |
384 node->document().updateStyleAndLayoutIgnorePendingStylesheets(); | 429 node->document().updateStyleAndLayoutIgnorePendingStylesheets(); |
385 | 430 |
386 return VisibleSelectionTemplate::create( | 431 return VisibleSelectionTemplate::create( |
387 PositionTemplate<Strategy>::firstPositionInNode(node), | 432 PositionTemplate<Strategy>::firstPositionInNode(node), |
388 PositionTemplate<Strategy>::lastPositionInNode(node), SelDefaultAffinity, | 433 PositionTemplate<Strategy>::lastPositionInNode(node), SelDefaultAffinity, |
389 false); | 434 false, false); |
390 } | 435 } |
391 | 436 |
392 template <typename Strategy> | 437 template <typename Strategy> |
393 void VisibleSelectionTemplate<Strategy>::setBase( | 438 void VisibleSelectionTemplate<Strategy>::setBase( |
394 const PositionTemplate<Strategy>& position) { | 439 const PositionTemplate<Strategy>& position) { |
395 DCHECK(!needsLayoutTreeUpdate(position)); | 440 DCHECK(!needsLayoutTreeUpdate(position)); |
396 m_base = position; | 441 m_base = position; |
397 validate(); | 442 validate(); |
398 } | 443 } |
399 | 444 |
(...skipping 636 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1036 return; | 1081 return; |
1037 } | 1082 } |
1038 updateIfNeeded(); | 1083 updateIfNeeded(); |
1039 } | 1084 } |
1040 | 1085 |
1041 template <typename Strategy> | 1086 template <typename Strategy> |
1042 static bool equalSelectionsAlgorithm( | 1087 static bool equalSelectionsAlgorithm( |
1043 const VisibleSelectionTemplate<Strategy>& selection1, | 1088 const VisibleSelectionTemplate<Strategy>& selection1, |
1044 const VisibleSelectionTemplate<Strategy>& selection2) { | 1089 const VisibleSelectionTemplate<Strategy>& selection2) { |
1045 if (selection1.affinity() != selection2.affinity() || | 1090 if (selection1.affinity() != selection2.affinity() || |
1046 selection1.isDirectional() != selection2.isDirectional()) | 1091 selection1.isDirectional() != selection2.isDirectional() || |
| 1092 selection1.isHandleVisible() != selection2.isHandleVisible()) |
1047 return false; | 1093 return false; |
1048 | 1094 |
1049 if (selection1.isNone()) | 1095 if (selection1.isNone()) |
1050 return selection2.isNone(); | 1096 return selection2.isNone(); |
1051 | 1097 |
1052 const VisibleSelectionTemplate<Strategy> selectionWrapper1(selection1); | 1098 const VisibleSelectionTemplate<Strategy> selectionWrapper1(selection1); |
1053 const VisibleSelectionTemplate<Strategy> selectionWrapper2(selection2); | 1099 const VisibleSelectionTemplate<Strategy> selectionWrapper2(selection2); |
1054 | 1100 |
1055 return selectionWrapper1.start() == selectionWrapper2.start() && | 1101 return selectionWrapper1.start() == selectionWrapper2.start() && |
1056 selectionWrapper1.end() == selectionWrapper2.end() && | 1102 selectionWrapper1.end() == selectionWrapper2.end() && |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1131 | 1177 |
1132 void showTree(const blink::VisibleSelectionInFlatTree& sel) { | 1178 void showTree(const blink::VisibleSelectionInFlatTree& sel) { |
1133 sel.showTreeForThis(); | 1179 sel.showTreeForThis(); |
1134 } | 1180 } |
1135 | 1181 |
1136 void showTree(const blink::VisibleSelectionInFlatTree* sel) { | 1182 void showTree(const blink::VisibleSelectionInFlatTree* sel) { |
1137 if (sel) | 1183 if (sel) |
1138 sel->showTreeForThis(); | 1184 sel->showTreeForThis(); |
1139 } | 1185 } |
1140 #endif | 1186 #endif |
OLD | NEW |