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 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
223 | 223 |
224 PassRefPtrWillBeRawPtr<Range> firstRangeOf(const VisibleSelection& selection) | 224 PassRefPtrWillBeRawPtr<Range> firstRangeOf(const VisibleSelection& selection) |
225 { | 225 { |
226 if (selection.isNone()) | 226 if (selection.isNone()) |
227 return nullptr; | 227 return nullptr; |
228 Position start = selection.start().parentAnchoredEquivalent(); | 228 Position start = selection.start().parentAnchoredEquivalent(); |
229 Position end = selection.end().parentAnchoredEquivalent(); | 229 Position end = selection.end().parentAnchoredEquivalent(); |
230 return Range::create(*start.document(), start, end); | 230 return Range::create(*start.document(), start, end); |
231 } | 231 } |
232 | 232 |
233 template <typename Strategy> | |
234 static EphemeralRangeTemplate<Strategy> normalizeRangeAlgorithm(const EphemeralR
angeTemplate<Strategy>& range) | |
235 { | |
236 ASSERT(range.isNotNull()); | |
237 range.document().updateLayoutIgnorePendingStylesheets(); | |
238 | |
239 // TODO(yosin) We should not call |parentAnchoredEquivalent()|, it is | |
240 // redundant. | |
241 const PositionAlgorithm<Strategy> normalizedStart = mostForwardCaretPosition
(range.startPosition()).parentAnchoredEquivalent(); | |
242 const PositionAlgorithm<Strategy> normalizedEnd = mostBackwardCaretPosition(
range.endPosition()).parentAnchoredEquivalent(); | |
243 // The order of the positions of |start| and |end| can be swapped after | |
244 // upstream/downstream. e.g. editing/pasteboard/copy-display-none.html | |
245 if (normalizedStart.compareTo(normalizedEnd) > 0) | |
246 return EphemeralRangeTemplate<Strategy>(normalizedEnd, normalizedStart); | |
247 return EphemeralRangeTemplate<Strategy>(normalizedStart, normalizedEnd); | |
248 } | |
249 | |
250 EphemeralRange VisibleSelection::normalizeRange(const EphemeralRange& range) | |
251 { | |
252 return normalizeRangeAlgorithm<EditingStrategy>(range); | |
253 } | |
254 | |
255 EphemeralRangeInComposedTree VisibleSelection::normalizeRange(const EphemeralRan
geInComposedTree& range) | |
256 { | |
257 return normalizeRangeAlgorithm<EditingInComposedTreeStrategy>(range); | |
258 } | |
259 | |
260 EphemeralRange VisibleSelection::toNormalizedEphemeralRange() const | 233 EphemeralRange VisibleSelection::toNormalizedEphemeralRange() const |
261 { | 234 { |
262 if (isNone()) | 235 if (isNone()) |
263 return EphemeralRange(); | 236 return EphemeralRange(); |
264 | 237 |
265 // Make sure we have an updated layout since this function is called | 238 // Make sure we have an updated layout since this function is called |
266 // in the course of running edit commands which modify the DOM. | 239 // in the course of running edit commands which modify the DOM. |
267 // Failing to call this can result in equivalentXXXPosition calls returning | 240 // Failing to call this can result in equivalentXXXPosition calls returning |
268 // incorrect results. | 241 // incorrect results. |
269 m_start.document()->updateLayout(); | 242 m_start.document()->updateLayout(); |
(...skipping 977 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1247 sel.showTreeForThis(); | 1220 sel.showTreeForThis(); |
1248 } | 1221 } |
1249 | 1222 |
1250 void showTree(const blink::VisibleSelection* sel) | 1223 void showTree(const blink::VisibleSelection* sel) |
1251 { | 1224 { |
1252 if (sel) | 1225 if (sel) |
1253 sel->showTreeForThis(); | 1226 sel->showTreeForThis(); |
1254 } | 1227 } |
1255 | 1228 |
1256 #endif | 1229 #endif |
OLD | NEW |