| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights | 2  * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights | 
| 3  * reserved. | 3  * 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 784 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 795   return true; | 795   return true; | 
| 796 } | 796 } | 
| 797 | 797 | 
| 798 // Abs x/y position of the caret ignoring transforms. | 798 // Abs x/y position of the caret ignoring transforms. | 
| 799 // TODO(yosin) navigation with transforms should be smarter. | 799 // TODO(yosin) navigation with transforms should be smarter. | 
| 800 static LayoutUnit LineDirectionPointForBlockDirectionNavigationOf( | 800 static LayoutUnit LineDirectionPointForBlockDirectionNavigationOf( | 
| 801     const VisiblePosition& visible_position) { | 801     const VisiblePosition& visible_position) { | 
| 802   if (visible_position.IsNull()) | 802   if (visible_position.IsNull()) | 
| 803     return LayoutUnit(); | 803     return LayoutUnit(); | 
| 804 | 804 | 
| 805   LayoutObject* layout_object; | 805   const LocalCaretRect& caret_rect = | 
| 806   LayoutRect local_rect = LocalCaretRectOfPosition( | 806       LocalCaretRectOfPosition(visible_position.ToPositionWithAffinity()); | 
| 807       visible_position.ToPositionWithAffinity(), layout_object); | 807   if (caret_rect.IsEmpty()) | 
| 808   if (local_rect.IsEmpty() || !layout_object) |  | 
| 809     return LayoutUnit(); | 808     return LayoutUnit(); | 
| 810 | 809 | 
| 811   // This ignores transforms on purpose, for now. Vertical navigation is done | 810   // This ignores transforms on purpose, for now. Vertical navigation is done | 
| 812   // without consulting transforms, so that 'up' in transformed text is 'up' | 811   // without consulting transforms, so that 'up' in transformed text is 'up' | 
| 813   // relative to the text, not absolute 'up'. | 812   // relative to the text, not absolute 'up'. | 
| 814   FloatPoint caret_point = | 813   const FloatPoint& caret_point = caret_rect.layout_object->LocalToAbsolute( | 
| 815       layout_object->LocalToAbsolute(FloatPoint(local_rect.Location())); | 814       FloatPoint(caret_rect.rect.Location())); | 
| 816   LayoutObject* containing_block = layout_object->ContainingBlock(); | 815   LayoutObject* const containing_block = | 
| 817   if (!containing_block) { | 816       caret_rect.layout_object->ContainingBlock(); | 
| 818     // Just use ourselves to determine the writing mode if we have no containing | 817   // Just use ourselves to determine the writing mode if we have no containing | 
| 819     // block. | 818   // block. | 
| 820     containing_block = layout_object; | 819   LayoutObject* const layout_object = | 
| 821   } | 820       containing_block ? containing_block : caret_rect.layout_object; | 
| 822   return LayoutUnit(containing_block->IsHorizontalWritingMode() | 821   return LayoutUnit(layout_object->IsHorizontalWritingMode() ? caret_point.X() | 
| 823                         ? caret_point.X() | 822                                                              : caret_point.Y()); | 
| 824                         : caret_point.Y()); |  | 
| 825 } | 823 } | 
| 826 | 824 | 
| 827 LayoutUnit SelectionModifier::LineDirectionPointForBlockDirectionNavigation( | 825 LayoutUnit SelectionModifier::LineDirectionPointForBlockDirectionNavigation( | 
| 828     EPositionType type) { | 826     EPositionType type) { | 
| 829   LayoutUnit x; | 827   LayoutUnit x; | 
| 830 | 828 | 
| 831   if (selection_.IsNone()) | 829   if (selection_.IsNone()) | 
| 832     return x; | 830     return x; | 
| 833 | 831 | 
| 834   Position pos; | 832   Position pos; | 
| (...skipping 26 matching lines...) Expand all  Loading... | 
| 861     x = LineDirectionPointForBlockDirectionNavigationOf(visible_position); | 859     x = LineDirectionPointForBlockDirectionNavigationOf(visible_position); | 
| 862     x_pos_for_vertical_arrow_navigation_ = x; | 860     x_pos_for_vertical_arrow_navigation_ = x; | 
| 863   } else { | 861   } else { | 
| 864     x = x_pos_for_vertical_arrow_navigation_; | 862     x = x_pos_for_vertical_arrow_navigation_; | 
| 865   } | 863   } | 
| 866 | 864 | 
| 867   return x; | 865   return x; | 
| 868 } | 866 } | 
| 869 | 867 | 
| 870 }  // namespace blink | 868 }  // namespace blink | 
| OLD | NEW | 
|---|