Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(62)

Side by Side Diff: third_party/WebKit/Source/core/editing/VisibleUnits.cpp

Issue 2517383002: Use the font height as caret height instead of the line height (Closed)
Patch Set: update comment Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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 selection rect is different from the
2556 // caret rect.
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());
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698