OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved. | 2 * Copyright (C) 2004, 2005, 2006, 2007 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 1771 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1782 const VisibleSelection& original) { | 1782 const VisibleSelection& original) { |
1783 VisibleSelection newSelection(original); | 1783 VisibleSelection newSelection(original); |
1784 VisiblePosition startOfSelection(newSelection.visibleStart()); | 1784 VisiblePosition startOfSelection(newSelection.visibleStart()); |
1785 VisiblePosition endOfSelection(newSelection.visibleEnd()); | 1785 VisiblePosition endOfSelection(newSelection.visibleEnd()); |
1786 | 1786 |
1787 // If the end of the selection to modify is just after a table, and if the | 1787 // If the end of the selection to modify is just after a table, and if the |
1788 // start of the selection is inside that table, then the last paragraph that | 1788 // start of the selection is inside that table, then the last paragraph that |
1789 // we'll want modify is the last one inside the table, not the table itself (a | 1789 // we'll want modify is the last one inside the table, not the table itself (a |
1790 // table is itself a paragraph). | 1790 // table is itself a paragraph). |
1791 if (Element* table = tableElementJustBefore(endOfSelection)) { | 1791 if (Element* table = tableElementJustBefore(endOfSelection)) { |
1792 if (startOfSelection.deepEquivalent().anchorNode()->isDescendantOf(table)) | 1792 if (startOfSelection.deepEquivalent().anchorNode()->isDescendantOf(table)) { |
1793 newSelection = createVisibleSelection( | 1793 const VisiblePosition& newEnd = |
1794 startOfSelection, | 1794 previousPositionOf(endOfSelection, CannotCrossEditingBoundary); |
1795 previousPositionOf(endOfSelection, CannotCrossEditingBoundary)); | 1795 if (newEnd.isNotNull()) { |
| 1796 newSelection = createVisibleSelection( |
| 1797 SelectionInDOMTree::Builder() |
| 1798 .collapse(startOfSelection.toPositionWithAffinity()) |
| 1799 .extend(newEnd.deepEquivalent()) |
| 1800 .build()); |
| 1801 } else { |
| 1802 newSelection = createVisibleSelection( |
| 1803 SelectionInDOMTree::Builder() |
| 1804 .collapse(startOfSelection.toPositionWithAffinity()) |
| 1805 .build()); |
| 1806 } |
| 1807 } |
1796 } | 1808 } |
1797 | 1809 |
1798 // If the start of the selection to modify is just before a table, and if the | 1810 // If the start of the selection to modify is just before a table, and if the |
1799 // end of the selection is inside that table, then the first paragraph we'll | 1811 // end of the selection is inside that table, then the first paragraph we'll |
1800 // want to modify is the first one inside the table, not the paragraph | 1812 // want to modify is the first one inside the table, not the paragraph |
1801 // containing the table itself. | 1813 // containing the table itself. |
1802 if (Element* table = tableElementJustAfter(startOfSelection)) { | 1814 if (Element* table = tableElementJustAfter(startOfSelection)) { |
1803 if (endOfSelection.deepEquivalent().anchorNode()->isDescendantOf(table)) | 1815 if (endOfSelection.deepEquivalent().anchorNode()->isDescendantOf(table)) { |
1804 newSelection = createVisibleSelection( | 1816 const VisiblePosition newStart = |
1805 nextPositionOf(startOfSelection, CannotCrossEditingBoundary), | 1817 nextPositionOf(startOfSelection, CannotCrossEditingBoundary); |
1806 endOfSelection); | 1818 if (newStart.isNotNull()) { |
| 1819 newSelection = createVisibleSelection( |
| 1820 SelectionInDOMTree::Builder() |
| 1821 .collapse(newStart.toPositionWithAffinity()) |
| 1822 .extend(endOfSelection.deepEquivalent()) |
| 1823 .build()); |
| 1824 } else { |
| 1825 newSelection = createVisibleSelection( |
| 1826 SelectionInDOMTree::Builder() |
| 1827 .collapse(endOfSelection.toPositionWithAffinity()) |
| 1828 .build()); |
| 1829 } |
| 1830 } |
1807 } | 1831 } |
1808 | 1832 |
1809 return newSelection; | 1833 return newSelection; |
1810 } | 1834 } |
1811 | 1835 |
1812 // FIXME: indexForVisiblePosition and visiblePositionForIndex use TextIterators | 1836 // FIXME: indexForVisiblePosition and visiblePositionForIndex use TextIterators |
1813 // to convert between VisiblePositions and indices. But TextIterator iteration | 1837 // to convert between VisiblePositions and indices. But TextIterator iteration |
1814 // using TextIteratorEmitsCharactersBetweenAllVisiblePositions does not exactly | 1838 // using TextIteratorEmitsCharactersBetweenAllVisiblePositions does not exactly |
1815 // match VisiblePosition iteration, so using them to preserve a selection during | 1839 // match VisiblePosition iteration, so using them to preserve a selection during |
1816 // an editing opertion is unreliable. TextIterator's | 1840 // an editing opertion is unreliable. TextIterator's |
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2083 return InputType::DeleteWordBackward; | 2107 return InputType::DeleteWordBackward; |
2084 if (granularity == LineBoundary) | 2108 if (granularity == LineBoundary) |
2085 return InputType::DeleteLineBackward; | 2109 return InputType::DeleteLineBackward; |
2086 return InputType::DeleteContentBackward; | 2110 return InputType::DeleteContentBackward; |
2087 default: | 2111 default: |
2088 return InputType::None; | 2112 return InputType::None; |
2089 } | 2113 } |
2090 } | 2114 } |
2091 | 2115 |
2092 } // namespace blink | 2116 } // namespace blink |
OLD | NEW |