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

Side by Side Diff: third_party/WebKit/Source/core/editing/commands/CompositeEditCommand.cpp

Issue 2850773003: Use RelocatablePosition in CompositeEditCommand::MoveParagraphWithClones (Closed)
Patch Set: Remove yosin's TODO Created 3 years, 7 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
« no previous file with comments | « third_party/WebKit/Source/core/editing/commands/ApplyBlockElementCommandTest.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. 2 * Copyright (C) 2005, 2006, 2007, 2008 Apple 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 1248 matching lines...) Expand 10 before | Expand all | Expand 10 after
1259 1259
1260 void CompositeEditCommand::MoveParagraphWithClones( 1260 void CompositeEditCommand::MoveParagraphWithClones(
1261 const VisiblePosition& start_of_paragraph_to_move, 1261 const VisiblePosition& start_of_paragraph_to_move,
1262 const VisiblePosition& end_of_paragraph_to_move, 1262 const VisiblePosition& end_of_paragraph_to_move,
1263 HTMLElement* block_element, 1263 HTMLElement* block_element,
1264 Node* outer_node, 1264 Node* outer_node,
1265 EditingState* editing_state) { 1265 EditingState* editing_state) {
1266 DCHECK(outer_node); 1266 DCHECK(outer_node);
1267 DCHECK(block_element); 1267 DCHECK(block_element);
1268 1268
1269 VisiblePosition before_paragraph = 1269 RelocatablePosition relocatable_before_paragraph(
1270 PreviousPositionOf(start_of_paragraph_to_move); 1270 PreviousPositionOf(start_of_paragraph_to_move).DeepEquivalent());
1271 VisiblePosition after_paragraph = NextPositionOf(end_of_paragraph_to_move); 1271 RelocatablePosition relocatable_after_paragraph(
1272 NextPositionOf(end_of_paragraph_to_move).DeepEquivalent());
1272 1273
1273 // We upstream() the end and downstream() the start so that we don't include 1274 // We upstream() the end and downstream() the start so that we don't include
1274 // collapsed whitespace in the move. When we paste a fragment, spaces after 1275 // collapsed whitespace in the move. When we paste a fragment, spaces after
1275 // the end and before the start are treated as though they were rendered. 1276 // the end and before the start are treated as though they were rendered.
1276 Position start = 1277 Position start =
1277 MostForwardCaretPosition(start_of_paragraph_to_move.DeepEquivalent()); 1278 MostForwardCaretPosition(start_of_paragraph_to_move.DeepEquivalent());
1278 Position end = start_of_paragraph_to_move.DeepEquivalent() == 1279 Position end = start_of_paragraph_to_move.DeepEquivalent() ==
1279 end_of_paragraph_to_move.DeepEquivalent() 1280 end_of_paragraph_to_move.DeepEquivalent()
1280 ? start 1281 ? start
1281 : MostBackwardCaretPosition( 1282 : MostBackwardCaretPosition(
(...skipping 22 matching lines...) Expand all
1304 1305
1305 // Add a br if pruning an empty block level element caused a collapse. For 1306 // Add a br if pruning an empty block level element caused a collapse. For
1306 // example: 1307 // example:
1307 // foo^ 1308 // foo^
1308 // <div>bar</div> 1309 // <div>bar</div>
1309 // baz 1310 // baz
1310 // Imagine moving 'bar' to ^. 'bar' will be deleted and its div pruned. That 1311 // Imagine moving 'bar' to ^. 'bar' will be deleted and its div pruned. That
1311 // would cause 'baz' to collapse onto the line with 'foobar' unless we insert 1312 // would cause 'baz' to collapse onto the line with 'foobar' unless we insert
1312 // a br. Must recononicalize these two VisiblePositions after the pruning 1313 // a br. Must recononicalize these two VisiblePositions after the pruning
1313 // above. 1314 // above.
1314 // TODO(yosin): We should abort when |beforeParagraph| is a orphan when 1315 const VisiblePosition& before_paragraph =
1315 // we have a sample. 1316 CreateVisiblePosition(relocatable_before_paragraph.GetPosition());
1316 before_paragraph = CreateVisiblePosition(before_paragraph.DeepEquivalent()); 1317 const VisiblePosition& after_paragraph =
1317 if (after_paragraph.IsOrphan()) { 1318 CreateVisiblePosition(relocatable_after_paragraph.GetPosition());
1318 editing_state->Abort();
1319 return;
1320 }
1321 after_paragraph = CreateVisiblePosition(after_paragraph.DeepEquivalent());
1322 1319
1323 if (before_paragraph.IsNotNull() && 1320 if (before_paragraph.IsNotNull() &&
1324 !IsDisplayInsideTable(before_paragraph.DeepEquivalent().AnchorNode()) && 1321 !IsDisplayInsideTable(before_paragraph.DeepEquivalent().AnchorNode()) &&
1325 ((!IsEndOfParagraph(before_paragraph) && 1322 ((!IsEndOfParagraph(before_paragraph) &&
1326 !IsStartOfParagraph(before_paragraph)) || 1323 !IsStartOfParagraph(before_paragraph)) ||
1327 before_paragraph.DeepEquivalent() == after_paragraph.DeepEquivalent())) { 1324 before_paragraph.DeepEquivalent() == after_paragraph.DeepEquivalent())) {
1328 // FIXME: Trim text between beforeParagraph and afterParagraph if they 1325 // FIXME: Trim text between beforeParagraph and afterParagraph if they
1329 // aren't equal. 1326 // aren't equal.
1330 InsertNodeAt(HTMLBRElement::Create(GetDocument()), 1327 InsertNodeAt(HTMLBRElement::Create(GetDocument()),
1331 before_paragraph.DeepEquivalent(), editing_state); 1328 before_paragraph.DeepEquivalent(), editing_state);
(...skipping 646 matching lines...) Expand 10 before | Expand all | Expand 10 after
1978 1975
1979 DEFINE_TRACE(CompositeEditCommand) { 1976 DEFINE_TRACE(CompositeEditCommand) {
1980 visitor->Trace(commands_); 1977 visitor->Trace(commands_);
1981 visitor->Trace(starting_selection_); 1978 visitor->Trace(starting_selection_);
1982 visitor->Trace(ending_selection_); 1979 visitor->Trace(ending_selection_);
1983 visitor->Trace(undo_step_); 1980 visitor->Trace(undo_step_);
1984 EditCommand::Trace(visitor); 1981 EditCommand::Trace(visitor);
1985 } 1982 }
1986 1983
1987 } // namespace blink 1984 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/editing/commands/ApplyBlockElementCommandTest.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698