OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2004, 2008, 2009, 2010 Apple Inc. All rights reserved. | 2 * Copyright (C) 2004, 2008, 2009, 2010 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 539 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
550 if (positionAfterSpacingAndFollowingWord.isNotNull() && positionAfterSpa
cingAndFollowingWord != positionAfterCurrentWord) | 550 if (positionAfterSpacingAndFollowingWord.isNotNull() && positionAfterSpa
cingAndFollowingWord != positionAfterCurrentWord) |
551 positionAfterCurrentWord = previousWordPosition(positionAfterSpacing
AndFollowingWord); | 551 positionAfterCurrentWord = previousWordPosition(positionAfterSpacing
AndFollowingWord); |
552 | 552 |
553 bool movingBackwardsMovedPositionToStartOfCurrentWord = positionAfterCur
rentWord == previousWordPosition(nextWordPosition(originalPosition)); | 553 bool movingBackwardsMovedPositionToStartOfCurrentWord = positionAfterCur
rentWord == previousWordPosition(nextWordPosition(originalPosition)); |
554 if (movingBackwardsMovedPositionToStartOfCurrentWord) | 554 if (movingBackwardsMovedPositionToStartOfCurrentWord) |
555 positionAfterCurrentWord = positionAfterSpacingAndFollowingWord; | 555 positionAfterCurrentWord = positionAfterSpacingAndFollowingWord; |
556 } | 556 } |
557 return positionAfterCurrentWord; | 557 return positionAfterCurrentWord; |
558 } | 558 } |
559 | 559 |
560 #if ENABLE(USERSELECT_ALL) | |
561 static void adjustPositionForUserSelectAll(VisiblePosition& pos, bool isForward) | 560 static void adjustPositionForUserSelectAll(VisiblePosition& pos, bool isForward) |
562 { | 561 { |
563 if (Node* rootUserSelectAll = Position::rootUserSelectAllForNode(pos.deepEqu
ivalent().anchorNode())) | 562 if (Node* rootUserSelectAll = Position::rootUserSelectAllForNode(pos.deepEqu
ivalent().anchorNode())) |
564 pos = isForward ? positionAfterNode(rootUserSelectAll).downstream(CanCro
ssEditingBoundary) : positionBeforeNode(rootUserSelectAll).upstream(CanCrossEdit
ingBoundary); | 563 pos = isForward ? positionAfterNode(rootUserSelectAll).downstream(CanCro
ssEditingBoundary) : positionBeforeNode(rootUserSelectAll).upstream(CanCrossEdit
ingBoundary); |
565 } | 564 } |
566 #endif | |
567 | 565 |
568 VisiblePosition FrameSelection::modifyExtendingRight(TextGranularity granularity
) | 566 VisiblePosition FrameSelection::modifyExtendingRight(TextGranularity granularity
) |
569 { | 567 { |
570 VisiblePosition pos(m_selection.extent(), m_selection.affinity()); | 568 VisiblePosition pos(m_selection.extent(), m_selection.affinity()); |
571 | 569 |
572 // The difference between modifyExtendingRight and modifyExtendingForward is
: | 570 // The difference between modifyExtendingRight and modifyExtendingForward is
: |
573 // modifyExtendingForward always extends forward logically. | 571 // modifyExtendingForward always extends forward logically. |
574 // modifyExtendingRight behaves the same as modifyExtendingForward except fo
r extending character or word, | 572 // modifyExtendingRight behaves the same as modifyExtendingForward except fo
r extending character or word, |
575 // it extends forward logically if the enclosing block is LTR direction, | 573 // it extends forward logically if the enclosing block is LTR direction, |
576 // but it extends backward logically if the enclosing block is RTL direction
. | 574 // but it extends backward logically if the enclosing block is RTL direction
. |
(...skipping 19 matching lines...) Expand all Loading... |
596 case SentenceGranularity: | 594 case SentenceGranularity: |
597 case LineGranularity: | 595 case LineGranularity: |
598 case ParagraphGranularity: | 596 case ParagraphGranularity: |
599 case SentenceBoundary: | 597 case SentenceBoundary: |
600 case ParagraphBoundary: | 598 case ParagraphBoundary: |
601 case DocumentBoundary: | 599 case DocumentBoundary: |
602 // FIXME: implement all of the above? | 600 // FIXME: implement all of the above? |
603 pos = modifyExtendingForward(granularity); | 601 pos = modifyExtendingForward(granularity); |
604 break; | 602 break; |
605 } | 603 } |
606 #if ENABLE(USERSELECT_ALL) | |
607 adjustPositionForUserSelectAll(pos, directionOfEnclosingBlock() == LTR); | 604 adjustPositionForUserSelectAll(pos, directionOfEnclosingBlock() == LTR); |
608 #endif | |
609 return pos; | 605 return pos; |
610 } | 606 } |
611 | 607 |
612 VisiblePosition FrameSelection::modifyExtendingForward(TextGranularity granulari
ty) | 608 VisiblePosition FrameSelection::modifyExtendingForward(TextGranularity granulari
ty) |
613 { | 609 { |
614 VisiblePosition pos(m_selection.extent(), m_selection.affinity()); | 610 VisiblePosition pos(m_selection.extent(), m_selection.affinity()); |
615 switch (granularity) { | 611 switch (granularity) { |
616 case CharacterGranularity: | 612 case CharacterGranularity: |
617 pos = pos.next(CannotCrossEditingBoundary); | 613 pos = pos.next(CannotCrossEditingBoundary); |
618 break; | 614 break; |
(...skipping 19 matching lines...) Expand all Loading... |
638 pos = endOfParagraph(endForPlatform()); | 634 pos = endOfParagraph(endForPlatform()); |
639 break; | 635 break; |
640 case DocumentBoundary: | 636 case DocumentBoundary: |
641 pos = endForPlatform(); | 637 pos = endForPlatform(); |
642 if (isEditablePosition(pos.deepEquivalent())) | 638 if (isEditablePosition(pos.deepEquivalent())) |
643 pos = endOfEditableContent(pos); | 639 pos = endOfEditableContent(pos); |
644 else | 640 else |
645 pos = endOfDocument(pos); | 641 pos = endOfDocument(pos); |
646 break; | 642 break; |
647 } | 643 } |
648 #if ENABLE(USERSELECT_ALL) | 644 adjustPositionForUserSelectAll(pos, directionOfEnclosingBlock() == LTR); |
649 adjustPositionForUserSelectAll(pos, directionOfEnclosingBlock() == LTR); | |
650 #endif | |
651 return pos; | 645 return pos; |
652 } | 646 } |
653 | 647 |
654 VisiblePosition FrameSelection::modifyMovingRight(TextGranularity granularity) | 648 VisiblePosition FrameSelection::modifyMovingRight(TextGranularity granularity) |
655 { | 649 { |
656 VisiblePosition pos; | 650 VisiblePosition pos; |
657 switch (granularity) { | 651 switch (granularity) { |
658 case CharacterGranularity: | 652 case CharacterGranularity: |
659 if (isRange()) { | 653 if (isRange()) { |
660 if (directionOfSelection() == LTR) | 654 if (directionOfSelection() == LTR) |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
763 break; | 757 break; |
764 case SentenceGranularity: | 758 case SentenceGranularity: |
765 case LineGranularity: | 759 case LineGranularity: |
766 case ParagraphGranularity: | 760 case ParagraphGranularity: |
767 case SentenceBoundary: | 761 case SentenceBoundary: |
768 case ParagraphBoundary: | 762 case ParagraphBoundary: |
769 case DocumentBoundary: | 763 case DocumentBoundary: |
770 pos = modifyExtendingBackward(granularity); | 764 pos = modifyExtendingBackward(granularity); |
771 break; | 765 break; |
772 } | 766 } |
773 #if ENABLE(USERSELECT_ALL) | |
774 adjustPositionForUserSelectAll(pos, !(directionOfEnclosingBlock() == LTR)); | 767 adjustPositionForUserSelectAll(pos, !(directionOfEnclosingBlock() == LTR)); |
775 #endif | |
776 return pos; | 768 return pos; |
777 } | 769 } |
778 | 770 |
779 VisiblePosition FrameSelection::modifyExtendingBackward(TextGranularity granular
ity) | 771 VisiblePosition FrameSelection::modifyExtendingBackward(TextGranularity granular
ity) |
780 { | 772 { |
781 VisiblePosition pos(m_selection.extent(), m_selection.affinity()); | 773 VisiblePosition pos(m_selection.extent(), m_selection.affinity()); |
782 | 774 |
783 // Extending a selection backward by word or character from just after a tab
le selects | 775 // Extending a selection backward by word or character from just after a tab
le selects |
784 // the table. This "makes sense" from the user perspective, esp. when delet
ing. | 776 // the table. This "makes sense" from the user perspective, esp. when delet
ing. |
785 // It was done here instead of in VisiblePosition because we want VPs to ite
rate | 777 // It was done here instead of in VisiblePosition because we want VPs to ite
rate |
(...skipping 24 matching lines...) Expand all Loading... |
810 pos = startOfParagraph(startForPlatform()); | 802 pos = startOfParagraph(startForPlatform()); |
811 break; | 803 break; |
812 case DocumentBoundary: | 804 case DocumentBoundary: |
813 pos = startForPlatform(); | 805 pos = startForPlatform(); |
814 if (isEditablePosition(pos.deepEquivalent())) | 806 if (isEditablePosition(pos.deepEquivalent())) |
815 pos = startOfEditableContent(pos); | 807 pos = startOfEditableContent(pos); |
816 else | 808 else |
817 pos = startOfDocument(pos); | 809 pos = startOfDocument(pos); |
818 break; | 810 break; |
819 } | 811 } |
820 #if ENABLE(USERSELECT_ALL) | |
821 adjustPositionForUserSelectAll(pos, !(directionOfEnclosingBlock() == LTR)); | 812 adjustPositionForUserSelectAll(pos, !(directionOfEnclosingBlock() == LTR)); |
822 #endif | |
823 return pos; | 813 return pos; |
824 } | 814 } |
825 | 815 |
826 VisiblePosition FrameSelection::modifyMovingLeft(TextGranularity granularity) | 816 VisiblePosition FrameSelection::modifyMovingLeft(TextGranularity granularity) |
827 { | 817 { |
828 VisiblePosition pos; | 818 VisiblePosition pos; |
829 switch (granularity) { | 819 switch (granularity) { |
830 case CharacterGranularity: | 820 case CharacterGranularity: |
831 if (isRange()) | 821 if (isRange()) |
832 if (directionOfSelection() == LTR) | 822 if (directionOfSelection() == LTR) |
(...skipping 1107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1940 sel.showTreeForThis(); | 1930 sel.showTreeForThis(); |
1941 } | 1931 } |
1942 | 1932 |
1943 void showTree(const WebCore::FrameSelection* sel) | 1933 void showTree(const WebCore::FrameSelection* sel) |
1944 { | 1934 { |
1945 if (sel) | 1935 if (sel) |
1946 sel->showTreeForThis(); | 1936 sel->showTreeForThis(); |
1947 } | 1937 } |
1948 | 1938 |
1949 #endif | 1939 #endif |
OLD | NEW |