OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2005 Apple Computer, Inc. All rights reserved. | 2 * Copyright (C) 2005 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 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
222 | 222 |
223 // skip smart delete if the selection to delete already starts or ends w
ith whitespace | 223 // skip smart delete if the selection to delete already starts or ends w
ith whitespace |
224 Position pos = VisiblePosition(m_upstreamStart, m_selectionToDelete.affi
nity()).deepEquivalent(); | 224 Position pos = VisiblePosition(m_upstreamStart, m_selectionToDelete.affi
nity()).deepEquivalent(); |
225 bool skipSmartDelete = trailingWhitespacePosition(pos, VP_DEFAULT_AFFINI
TY, ConsiderNonCollapsibleWhitespace).isNotNull(); | 225 bool skipSmartDelete = trailingWhitespacePosition(pos, VP_DEFAULT_AFFINI
TY, ConsiderNonCollapsibleWhitespace).isNotNull(); |
226 if (!skipSmartDelete) | 226 if (!skipSmartDelete) |
227 skipSmartDelete = leadingWhitespacePosition(m_downstreamEnd, VP_DEFA
ULT_AFFINITY, ConsiderNonCollapsibleWhitespace).isNotNull(); | 227 skipSmartDelete = leadingWhitespacePosition(m_downstreamEnd, VP_DEFA
ULT_AFFINITY, ConsiderNonCollapsibleWhitespace).isNotNull(); |
228 | 228 |
229 // extend selection upstream if there is whitespace there | 229 // extend selection upstream if there is whitespace there |
230 bool hasLeadingWhitespaceBeforeAdjustment = leadingWhitespacePosition(m_
upstreamStart, m_selectionToDelete.affinity(), ConsiderNonCollapsibleWhitespace)
.isNotNull(); | 230 bool hasLeadingWhitespaceBeforeAdjustment = leadingWhitespacePosition(m_
upstreamStart, m_selectionToDelete.affinity(), ConsiderNonCollapsibleWhitespace)
.isNotNull(); |
231 if (!skipSmartDelete && hasLeadingWhitespaceBeforeAdjustment) { | 231 if (!skipSmartDelete && hasLeadingWhitespaceBeforeAdjustment) { |
232 VisiblePosition visiblePos = VisiblePosition(m_upstreamStart, VP_DEF
AULT_AFFINITY).previous(); | 232 VisiblePosition visiblePos = previousPositionOf(VisiblePosition(m_up
streamStart, VP_DEFAULT_AFFINITY)); |
233 pos = visiblePos.deepEquivalent(); | 233 pos = visiblePos.deepEquivalent(); |
234 // Expand out one character upstream for smart delete and recalculat
e | 234 // Expand out one character upstream for smart delete and recalculat
e |
235 // positions based on this change. | 235 // positions based on this change. |
236 m_upstreamStart = mostBackwardCaretPosition(pos); | 236 m_upstreamStart = mostBackwardCaretPosition(pos); |
237 m_downstreamStart = mostForwardCaretPosition(pos); | 237 m_downstreamStart = mostForwardCaretPosition(pos); |
238 m_leadingWhitespace = leadingWhitespacePosition(m_upstreamStart, vis
iblePos.affinity()); | 238 m_leadingWhitespace = leadingWhitespacePosition(m_upstreamStart, vis
iblePos.affinity()); |
239 | 239 |
240 setStartingSelectionOnSmartDelete(m_upstreamStart, m_upstreamEnd); | 240 setStartingSelectionOnSmartDelete(m_upstreamStart, m_upstreamEnd); |
241 } | 241 } |
242 | 242 |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
377 LayoutObject* r = node->layoutObject(); | 377 LayoutObject* r = node->layoutObject(); |
378 if (r && r->isTableCell() && toLayoutTableCell(r)->contentHeight() <= 0)
{ | 378 if (r && r->isTableCell() && toLayoutTableCell(r)->contentHeight() <= 0)
{ |
379 Position firstEditablePosition = firstEditablePositionInNode(node.ge
t()); | 379 Position firstEditablePosition = firstEditablePositionInNode(node.ge
t()); |
380 if (firstEditablePosition.isNotNull()) | 380 if (firstEditablePosition.isNotNull()) |
381 insertBlockPlaceholder(firstEditablePosition); | 381 insertBlockPlaceholder(firstEditablePosition); |
382 } | 382 } |
383 return; | 383 return; |
384 } | 384 } |
385 | 385 |
386 if (node == m_startBlock) { | 386 if (node == m_startBlock) { |
387 VisiblePosition previous = VisiblePosition(firstPositionInNode(m_startBl
ock.get())).previous(); | 387 VisiblePosition previous = previousPositionOf(VisiblePosition(firstPosit
ionInNode(m_startBlock.get()))); |
388 if (previous.isNotNull() && !isEndOfBlock(previous)) | 388 if (previous.isNotNull() && !isEndOfBlock(previous)) |
389 m_needPlaceholder = true; | 389 m_needPlaceholder = true; |
390 } | 390 } |
391 if (node == m_endBlock) { | 391 if (node == m_endBlock) { |
392 VisiblePosition next = VisiblePosition(lastPositionInNode(m_endBlock.get
())).next(); | 392 VisiblePosition next = VisiblePosition(lastPositionInNode(m_endBlock.get
())).next(); |
393 if (next.isNotNull() && !isStartOfBlock(next)) | 393 if (next.isNotNull() && !isStartOfBlock(next)) |
394 m_needPlaceholder = true; | 394 m_needPlaceholder = true; |
395 } | 395 } |
396 | 396 |
397 // FIXME: Update the endpoints of the range being deleted. | 397 // FIXME: Update the endpoints of the range being deleted. |
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
809 if (Element* table = isLastPositionBeforeTable(m_selectionToDelete.visib
leStart())) { | 809 if (Element* table = isLastPositionBeforeTable(m_selectionToDelete.visib
leStart())) { |
810 if (m_selectionToDelete.end().anchorNode()->isDescendantOf(table)) | 810 if (m_selectionToDelete.end().anchorNode()->isDescendantOf(table)) |
811 m_needPlaceholder = false; | 811 m_needPlaceholder = false; |
812 } | 812 } |
813 } | 813 } |
814 | 814 |
815 | 815 |
816 // set up our state | 816 // set up our state |
817 initializePositionData(); | 817 initializePositionData(); |
818 | 818 |
819 bool lineBreakBeforeStart = lineBreakExistsAtVisiblePosition(VisiblePosition
(m_upstreamStart).previous()); | 819 bool lineBreakBeforeStart = lineBreakExistsAtVisiblePosition(previousPositio
nOf(VisiblePosition(m_upstreamStart))); |
820 | 820 |
821 // Delete any text that may hinder our ability to fixup whitespace after the
delete | 821 // Delete any text that may hinder our ability to fixup whitespace after the |
| 822 // delete |
822 deleteInsignificantTextDownstream(m_trailingWhitespace); | 823 deleteInsignificantTextDownstream(m_trailingWhitespace); |
823 | 824 |
824 saveTypingStyleState(); | 825 saveTypingStyleState(); |
825 | 826 |
826 // deleting just a BR is handled specially, at least because we do not | 827 // deleting just a BR is handled specially, at least because we do not |
827 // want to replace it with a placeholder BR! | 828 // want to replace it with a placeholder BR! |
828 if (handleSpecialCaseBRDelete()) { | 829 if (handleSpecialCaseBRDelete()) { |
829 calculateTypingStyleAfterDelete(); | 830 calculateTypingStyleAfterDelete(); |
830 setEndingSelection(VisibleSelection(m_endingPosition, affinity, endingSe
lection().isDirectional())); | 831 setEndingSelection(VisibleSelection(m_endingPosition, affinity, endingSe
lection().isDirectional())); |
831 clearTransientState(); | 832 clearTransientState(); |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
899 visitor->trace(m_deleteIntoBlockquoteStyle); | 900 visitor->trace(m_deleteIntoBlockquoteStyle); |
900 visitor->trace(m_startRoot); | 901 visitor->trace(m_startRoot); |
901 visitor->trace(m_endRoot); | 902 visitor->trace(m_endRoot); |
902 visitor->trace(m_startTableRow); | 903 visitor->trace(m_startTableRow); |
903 visitor->trace(m_endTableRow); | 904 visitor->trace(m_endTableRow); |
904 visitor->trace(m_temporaryPlaceholder); | 905 visitor->trace(m_temporaryPlaceholder); |
905 CompositeEditCommand::trace(visitor); | 906 CompositeEditCommand::trace(visitor); |
906 } | 907 } |
907 | 908 |
908 } // namespace blink | 909 } // namespace blink |
OLD | NEW |