Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights | 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 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 2534 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2545 computeInlineBoxPosition(position.position(), position.affinity()); | 2545 computeInlineBoxPosition(position.position(), position.affinity()); |
| 2546 | 2546 |
| 2547 if (boxPosition.inlineBox) | 2547 if (boxPosition.inlineBox) |
| 2548 layoutObject = LineLayoutAPIShim::layoutObjectFrom( | 2548 layoutObject = LineLayoutAPIShim::layoutObjectFrom( |
| 2549 boxPosition.inlineBox->getLineLayoutItem()); | 2549 boxPosition.inlineBox->getLineLayoutItem()); |
| 2550 | 2550 |
| 2551 return layoutObject->localCaretRect(boxPosition.inlineBox, | 2551 return layoutObject->localCaretRect(boxPosition.inlineBox, |
| 2552 boxPosition.offsetInBox); | 2552 boxPosition.offsetInBox); |
| 2553 } | 2553 } |
| 2554 | 2554 |
| 2555 // This function was added because the caret rect that will be calcaulated by | |
| 2556 // using the line top value instead of the selection top. | |
| 2557 template <typename Strategy> | |
| 2558 LayoutRect localSelectionRectOfPositionTemplate( | |
| 2559 const PositionWithAffinityTemplate<Strategy>& position, | |
| 2560 LayoutObject*& layoutObject) { | |
| 2561 LayoutRect rect = localCaretRectOfPositionTemplate(position, layoutObject); | |
| 2562 | |
| 2563 if (rect.isEmpty()) | |
| 2564 return rect; | |
| 2565 | |
| 2566 InlineBoxPosition boxPosition = | |
| 2567 computeInlineBoxPosition(position.position(), position.affinity()); | |
| 2568 | |
| 2569 InlineTextBox* box = toInlineTextBox(boxPosition.inlineBox); | |
| 2570 if (layoutObject->style()->isHorizontalWritingMode()) { | |
| 2571 rect.setY(box->root().selectionTop()); | |
| 2572 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.
| |
| 2573 } else { | |
| 2574 rect.setX(box->root().selectionTop()); | |
| 2575 rect.setWidth(box->root().selectionHeight()); | |
| 2576 } | |
| 2577 | |
| 2578 return rect; | |
| 2579 } | |
| 2580 | |
| 2555 LayoutRect localCaretRectOfPosition(const PositionWithAffinity& position, | 2581 LayoutRect localCaretRectOfPosition(const PositionWithAffinity& position, |
| 2556 LayoutObject*& layoutObject) { | 2582 LayoutObject*& layoutObject) { |
| 2557 return localCaretRectOfPositionTemplate<EditingStrategy>(position, | 2583 return localCaretRectOfPositionTemplate<EditingStrategy>(position, |
| 2558 layoutObject); | 2584 layoutObject); |
| 2559 } | 2585 } |
| 2560 | 2586 |
| 2587 LayoutRect localSelectionRectOfPosition(const PositionWithAffinity& position, | |
| 2588 LayoutObject*& layoutObject) { | |
| 2589 return localSelectionRectOfPositionTemplate<EditingStrategy>(position, | |
| 2590 layoutObject); | |
| 2591 } | |
| 2592 | |
| 2561 LayoutRect localCaretRectOfPosition( | 2593 LayoutRect localCaretRectOfPosition( |
| 2562 const PositionInFlatTreeWithAffinity& position, | 2594 const PositionInFlatTreeWithAffinity& position, |
| 2563 LayoutObject*& layoutObject) { | 2595 LayoutObject*& layoutObject) { |
| 2564 return localCaretRectOfPositionTemplate<EditingInFlatTreeStrategy>( | 2596 return localCaretRectOfPositionTemplate<EditingInFlatTreeStrategy>( |
| 2565 position, layoutObject); | 2597 position, layoutObject); |
| 2566 } | 2598 } |
| 2567 | 2599 |
| 2568 static LayoutUnit boundingBoxLogicalHeight(LayoutObject* o, | 2600 static LayoutUnit boundingBoxLogicalHeight(LayoutObject* o, |
| 2569 const LayoutRect& rect) { | 2601 const LayoutRect& rect) { |
| 2570 return o->style()->isHorizontalWritingMode() ? rect.height() : rect.width(); | 2602 return o->style()->isHorizontalWritingMode() ? rect.height() : rect.width(); |
| (...skipping 653 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3224 return IntRect(); | 3256 return IntRect(); |
| 3225 | 3257 |
| 3226 return layoutObject->localToAbsoluteQuad(FloatRect(localRect)) | 3258 return layoutObject->localToAbsoluteQuad(FloatRect(localRect)) |
| 3227 .enclosingBoundingBox(); | 3259 .enclosingBoundingBox(); |
| 3228 } | 3260 } |
| 3229 | 3261 |
| 3230 IntRect absoluteCaretBoundsOf(const VisiblePosition& visiblePosition) { | 3262 IntRect absoluteCaretBoundsOf(const VisiblePosition& visiblePosition) { |
| 3231 return absoluteCaretBoundsOfAlgorithm<EditingStrategy>(visiblePosition); | 3263 return absoluteCaretBoundsOfAlgorithm<EditingStrategy>(visiblePosition); |
| 3232 } | 3264 } |
| 3233 | 3265 |
| 3266 template <typename Strategy> | |
| 3267 static IntRect absoluteSelectionBoundsOfAlgorithm( | |
| 3268 const VisiblePositionTemplate<Strategy>& visiblePosition) { | |
| 3269 DCHECK(visiblePosition.isValid()) << visiblePosition; | |
| 3270 LayoutObject* layoutObject; | |
| 3271 LayoutRect localRect = localSelectionRectOfPosition( | |
| 3272 visiblePosition.toPositionWithAffinity(), layoutObject); | |
| 3273 if (localRect.isEmpty() || !layoutObject) | |
| 3274 return IntRect(); | |
| 3275 | |
| 3276 return layoutObject->localToAbsoluteQuad(FloatRect(localRect)) | |
| 3277 .enclosingBoundingBox(); | |
| 3278 } | |
| 3279 | |
| 3280 IntRect absoluteSelectionBoundsOf(const VisiblePosition& visiblePosition) { | |
| 3281 return absoluteSelectionBoundsOfAlgorithm<EditingStrategy>(visiblePosition); | |
| 3282 } | |
| 3283 | |
| 3234 IntRect absoluteCaretBoundsOf( | 3284 IntRect absoluteCaretBoundsOf( |
| 3235 const VisiblePositionInFlatTree& visiblePosition) { | 3285 const VisiblePositionInFlatTree& visiblePosition) { |
| 3236 return absoluteCaretBoundsOfAlgorithm<EditingInFlatTreeStrategy>( | 3286 return absoluteCaretBoundsOfAlgorithm<EditingInFlatTreeStrategy>( |
| 3237 visiblePosition); | 3287 visiblePosition); |
| 3238 } | 3288 } |
| 3239 | 3289 |
| 3240 template <typename Strategy> | 3290 template <typename Strategy> |
| 3241 static VisiblePositionTemplate<Strategy> skipToEndOfEditingBoundary( | 3291 static VisiblePositionTemplate<Strategy> skipToEndOfEditingBoundary( |
| 3242 const VisiblePositionTemplate<Strategy>& pos, | 3292 const VisiblePositionTemplate<Strategy>& pos, |
| 3243 const PositionTemplate<Strategy>& anchor) { | 3293 const PositionTemplate<Strategy>& anchor) { |
| (...skipping 604 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3848 | 3898 |
| 3849 VisiblePositionInFlatTree previousPositionOf( | 3899 VisiblePositionInFlatTree previousPositionOf( |
| 3850 const VisiblePositionInFlatTree& visiblePosition, | 3900 const VisiblePositionInFlatTree& visiblePosition, |
| 3851 EditingBoundaryCrossingRule rule) { | 3901 EditingBoundaryCrossingRule rule) { |
| 3852 DCHECK(visiblePosition.isValid()) << visiblePosition; | 3902 DCHECK(visiblePosition.isValid()) << visiblePosition; |
| 3853 return previousPositionOfAlgorithm<EditingInFlatTreeStrategy>( | 3903 return previousPositionOfAlgorithm<EditingInFlatTreeStrategy>( |
| 3854 visiblePosition.deepEquivalent(), rule); | 3904 visiblePosition.deepEquivalent(), rule); |
| 3855 } | 3905 } |
| 3856 | 3906 |
| 3857 } // namespace blink | 3907 } // namespace blink |
| OLD | NEW |