Chromium Code Reviews| Index: third_party/WebKit/Source/core/editing/VisibleUnits.cpp |
| diff --git a/third_party/WebKit/Source/core/editing/VisibleUnits.cpp b/third_party/WebKit/Source/core/editing/VisibleUnits.cpp |
| index 57dbb38ee7f74be217967fe113e58c6c2b01d9e5..cc915e4b3b64262309292d79261e3b24e6c3c684 100644 |
| --- a/third_party/WebKit/Source/core/editing/VisibleUnits.cpp |
| +++ b/third_party/WebKit/Source/core/editing/VisibleUnits.cpp |
| @@ -2552,12 +2552,44 @@ LayoutRect localCaretRectOfPositionTemplate( |
| boxPosition.offsetInBox); |
| } |
| +// This function was added because the caret rect that will be calcaulated by |
| +// using the line top value instead of the selection top. |
| +template <typename Strategy> |
| +LayoutRect localSelectionRectOfPositionTemplate( |
| + const PositionWithAffinityTemplate<Strategy>& position, |
| + LayoutObject*& layoutObject) { |
| + LayoutRect rect = localCaretRectOfPositionTemplate(position, layoutObject); |
| + |
| + if (rect.isEmpty()) |
| + return rect; |
| + |
| + InlineBoxPosition boxPosition = |
| + computeInlineBoxPosition(position.position(), position.affinity()); |
| + |
| + InlineTextBox* box = toInlineTextBox(boxPosition.inlineBox); |
| + if (layoutObject->style()->isHorizontalWritingMode()) { |
| + rect.setY(box->root().selectionTop()); |
| + rect.setHeight(box->root().selectionHeight()); |
|
yosin_UTC9
2017/01/10 04:20:01
nit: early return style is better
if (layoutObjec
joone
2017/01/10 18:19:46
Done.
|
| + } else { |
| + rect.setX(box->root().selectionTop()); |
| + rect.setWidth(box->root().selectionHeight()); |
| + } |
| + |
| + return rect; |
| +} |
| + |
| LayoutRect localCaretRectOfPosition(const PositionWithAffinity& position, |
| LayoutObject*& layoutObject) { |
| return localCaretRectOfPositionTemplate<EditingStrategy>(position, |
| layoutObject); |
| } |
| +LayoutRect localSelectionRectOfPosition(const PositionWithAffinity& position, |
| + LayoutObject*& layoutObject) { |
| + return localSelectionRectOfPositionTemplate<EditingStrategy>(position, |
| + layoutObject); |
| +} |
| + |
| LayoutRect localCaretRectOfPosition( |
| const PositionInFlatTreeWithAffinity& position, |
| LayoutObject*& layoutObject) { |
| @@ -3231,6 +3263,24 @@ IntRect absoluteCaretBoundsOf(const VisiblePosition& visiblePosition) { |
| return absoluteCaretBoundsOfAlgorithm<EditingStrategy>(visiblePosition); |
| } |
| +template <typename Strategy> |
| +static IntRect absoluteSelectionBoundsOfAlgorithm( |
| + const VisiblePositionTemplate<Strategy>& visiblePosition) { |
| + DCHECK(visiblePosition.isValid()) << visiblePosition; |
| + LayoutObject* layoutObject; |
| + LayoutRect localRect = localSelectionRectOfPosition( |
| + visiblePosition.toPositionWithAffinity(), layoutObject); |
| + if (localRect.isEmpty() || !layoutObject) |
| + return IntRect(); |
| + |
| + return layoutObject->localToAbsoluteQuad(FloatRect(localRect)) |
| + .enclosingBoundingBox(); |
| +} |
| + |
| +IntRect absoluteSelectionBoundsOf(const VisiblePosition& visiblePosition) { |
| + return absoluteSelectionBoundsOfAlgorithm<EditingStrategy>(visiblePosition); |
| +} |
| + |
| IntRect absoluteCaretBoundsOf( |
| const VisiblePositionInFlatTree& visiblePosition) { |
| return absoluteCaretBoundsOfAlgorithm<EditingInFlatTreeStrategy>( |