| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv
ed. | 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv
ed. |
| 3 * Portions Copyright (c) 2011 Motorola Mobility, Inc. All rights reserved. | 3 * Portions Copyright (c) 2011 Motorola Mobility, Inc. All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 669 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 680 return 0; | 680 return 0; |
| 681 | 681 |
| 682 return textNode->data().characterStartingAt(offset); | 682 return textNode->data().characterStartingAt(offset); |
| 683 } | 683 } |
| 684 | 684 |
| 685 UChar32 characterBefore(const VisiblePosition& visiblePosition) | 685 UChar32 characterBefore(const VisiblePosition& visiblePosition) |
| 686 { | 686 { |
| 687 return characterAfter(previousPositionOf(visiblePosition)); | 687 return characterAfter(previousPositionOf(visiblePosition)); |
| 688 } | 688 } |
| 689 | 689 |
| 690 LayoutRect VisiblePosition::localCaretRect(LayoutObject*& layoutObject) const | 690 // TODO(yosin) We should move |localCaretRect()| to "VisibleUnits.cpp". |
| 691 static LayoutRect localCaretRectOf(const VisiblePosition& visiblePosition, Layou
tObject*& layoutObject) |
| 691 { | 692 { |
| 692 PositionWithAffinity positionWithAffinity(m_deepPosition, m_affinity); | 693 PositionWithAffinity positionWithAffinity(visiblePosition.deepEquivalent(),
visiblePosition.affinity()); |
| 693 return localCaretRectOfPosition(positionWithAffinity, layoutObject); | 694 return localCaretRectOfPosition(positionWithAffinity, layoutObject); |
| 694 } | 695 } |
| 695 | 696 |
| 696 IntRect absoluteCaretBoundsOf(const VisiblePosition& visiblePosition) | 697 IntRect absoluteCaretBoundsOf(const VisiblePosition& visiblePosition) |
| 697 { | 698 { |
| 698 LayoutObject* layoutObject; | 699 LayoutObject* layoutObject; |
| 699 LayoutRect localRect = visiblePosition.localCaretRect(layoutObject); | 700 LayoutRect localRect = localCaretRectOf(visiblePosition, layoutObject); |
| 700 if (localRect.isEmpty() || !layoutObject) | 701 if (localRect.isEmpty() || !layoutObject) |
| 701 return IntRect(); | 702 return IntRect(); |
| 702 | 703 |
| 703 return layoutObject->localToAbsoluteQuad(FloatRect(localRect)).enclosingBoun
dingBox(); | 704 return layoutObject->localToAbsoluteQuad(FloatRect(localRect)).enclosingBoun
dingBox(); |
| 704 } | 705 } |
| 705 | 706 |
| 706 // TODO(yosin) We should move a global function | 707 // TODO(yosin) We should move a global function |
| 707 // |lineDirectionPointForBlockDirectionNavigationOf()| to "FrameSelection.h" | 708 // |lineDirectionPointForBlockDirectionNavigationOf()| to "FrameSelection.h" |
| 708 // as static function. | 709 // as static function. |
| 709 int lineDirectionPointForBlockDirectionNavigationOf(const VisiblePosition& visib
lePosition) | 710 int lineDirectionPointForBlockDirectionNavigationOf(const VisiblePosition& visib
lePosition) |
| 710 { | 711 { |
| 711 if (visiblePosition.isNull()) | 712 if (visiblePosition.isNull()) |
| 712 return 0; | 713 return 0; |
| 713 | 714 |
| 714 LayoutObject* layoutObject; | 715 LayoutObject* layoutObject; |
| 715 LayoutRect localRect = visiblePosition.localCaretRect(layoutObject); | 716 LayoutRect localRect = localCaretRectOf(visiblePosition, layoutObject); |
| 716 if (localRect.isEmpty() || !layoutObject) | 717 if (localRect.isEmpty() || !layoutObject) |
| 717 return 0; | 718 return 0; |
| 718 | 719 |
| 719 // This ignores transforms on purpose, for now. Vertical navigation is done | 720 // This ignores transforms on purpose, for now. Vertical navigation is done |
| 720 // without consulting transforms, so that 'up' in transformed text is 'up' | 721 // without consulting transforms, so that 'up' in transformed text is 'up' |
| 721 // relative to the text, not absolute 'up'. | 722 // relative to the text, not absolute 'up'. |
| 722 FloatPoint caretPoint = layoutObject->localToAbsolute(FloatPoint(localRect.l
ocation())); | 723 FloatPoint caretPoint = layoutObject->localToAbsolute(FloatPoint(localRect.l
ocation())); |
| 723 LayoutObject* containingBlock = layoutObject->containingBlock(); | 724 LayoutObject* containingBlock = layoutObject->containingBlock(); |
| 724 if (!containingBlock) | 725 if (!containingBlock) |
| 725 containingBlock = layoutObject; // Just use ourselves to determine the w
riting mode if we have no containing block. | 726 containingBlock = layoutObject; // Just use ourselves to determine the w
riting mode if we have no containing block. |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 778 else | 779 else |
| 779 fprintf(stderr, "Cannot showTree for (nil) VisiblePosition.\n"); | 780 fprintf(stderr, "Cannot showTree for (nil) VisiblePosition.\n"); |
| 780 } | 781 } |
| 781 | 782 |
| 782 void showTree(const blink::VisiblePosition& vpos) | 783 void showTree(const blink::VisiblePosition& vpos) |
| 783 { | 784 { |
| 784 vpos.showTreeForThis(); | 785 vpos.showTreeForThis(); |
| 785 } | 786 } |
| 786 | 787 |
| 787 #endif | 788 #endif |
| OLD | NEW |