Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * (C) 1999 Lars Knoll (knoll@kde.org) | 2 * (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * (C) 2000 Dirk Mueller (mueller@kde.org) | 3 * (C) 2000 Dirk Mueller (mueller@kde.org) |
| 4 * Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved. | 4 * Copyright (C) 2004, 2005, 2006, 2007 Apple Inc. All rights reserved. |
| 5 * Copyright (C) 2006 Andrew Wellington (proton@wiretapped.net) | 5 * Copyright (C) 2006 Andrew Wellington (proton@wiretapped.net) |
| 6 * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com) | 6 * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com) |
| 7 * | 7 * |
| 8 * This library is free software; you can redistribute it and/or | 8 * This library is free software; you can redistribute it and/or |
| 9 * modify it under the terms of the GNU Library General Public | 9 * modify it under the terms of the GNU Library General Public |
| 10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
| (...skipping 1547 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1558 LayoutUnit logicalLeftSide = LayoutUnit::max(); | 1558 LayoutUnit logicalLeftSide = LayoutUnit::max(); |
| 1559 LayoutUnit logicalRightSide = LayoutUnit::min(); | 1559 LayoutUnit logicalRightSide = LayoutUnit::min(); |
| 1560 for (InlineTextBox* curr = firstTextBox(); curr; curr = curr->nextTextBox()) { | 1560 for (InlineTextBox* curr = firstTextBox(); curr; curr = curr->nextTextBox()) { |
| 1561 LayoutRect logicalVisualOverflow = curr->logicalOverflowRect(); | 1561 LayoutRect logicalVisualOverflow = curr->logicalOverflowRect(); |
| 1562 logicalLeftSide = std::min(logicalLeftSide, logicalVisualOverflow.x()); | 1562 logicalLeftSide = std::min(logicalLeftSide, logicalVisualOverflow.x()); |
| 1563 logicalRightSide = std::max(logicalRightSide, logicalVisualOverflow.maxX ()); | 1563 logicalRightSide = std::max(logicalRightSide, logicalVisualOverflow.maxX ()); |
| 1564 } | 1564 } |
| 1565 | 1565 |
| 1566 LayoutUnit logicalTop = firstTextBox()->logicalTopVisualOverflow(); | 1566 LayoutUnit logicalTop = firstTextBox()->logicalTopVisualOverflow(); |
| 1567 LayoutUnit logicalWidth = logicalRightSide - logicalLeftSide; | 1567 LayoutUnit logicalWidth = logicalRightSide - logicalLeftSide; |
| 1568 LayoutUnit logicalHeight = lastTextBox()->logicalBottomVisualOverflow() - lo gicalTop; | 1568 InlineTextBox* lastBox = lastTextBox(); |
| 1569 LayoutUnit logicalHeight = lastBox->logicalBottomVisualOverflow() - logicalT op; | |
| 1570 | |
| 1571 // Include visual overflow for wrapped selection newline highlight if applic able. | |
| 1572 if (lastBox->hasWrappedSelectionNewline() || (isBR() && getSelectionState() != SelectionNone)) { | |
| 1573 // TODO(wkorman): The below is likely insufficient to handle RTL text. | |
| 1574 // We already paint RTL wrapped newline selection highlights in | |
| 1575 // contenteditable incorrectly. We should fix painting in tandem with | |
| 1576 // this visual overflow rect. http://crbug.com/610813 | |
| 1577 logicalWidth += lastBox->newlineSpaceWidth(); | |
| 1578 logicalHeight = std::max(logicalHeight, localSelectionRect().height()); | |
|
eae
2016/05/10 20:39:19
Why is the height override needed? When is the loc
wkorman
2016/05/10 21:33:01
For isBR() case (note this block executes also in
| |
| 1579 } | |
|
Xianzhu
2016/05/10 20:35:46
Should LayoutText::localSelectionRect() also have
wkorman
2016/05/10 20:41:08
Hmm. We already have essentially this logic in Inl
Xianzhu
2016/05/10 21:10:46
Sorry, actually I didn't carefully read the added
Xianzhu
2016/05/10 21:13:56
s/Selection change affects/With this CL, selection
wkorman
2016/05/10 21:33:01
Hmm, I think I see what you're saying. It seems it
Xianzhu
2016/05/10 21:55:13
I think "visual overflow doesn't affect layout" an
| |
| 1569 | 1580 |
| 1570 LayoutRect rect(logicalLeftSide, logicalTop, logicalWidth, logicalHeight); | 1581 LayoutRect rect(logicalLeftSide, logicalTop, logicalWidth, logicalHeight); |
| 1571 if (!style()->isHorizontalWritingMode()) | 1582 if (!style()->isHorizontalWritingMode()) |
| 1572 rect = rect.transposedRect(); | 1583 rect = rect.transposedRect(); |
| 1573 return rect; | 1584 return rect; |
| 1574 } | 1585 } |
| 1575 | 1586 |
| 1576 LayoutRect LayoutText::localOverflowRectForPaintInvalidation() const | 1587 LayoutRect LayoutText::localOverflowRectForPaintInvalidation() const |
| 1577 { | 1588 { |
| 1578 if (style()->visibility() != VISIBLE) | 1589 if (style()->visibility() != VISIBLE) |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1699 for (InlineTextBox* box = firstTextBox(); box; box = box->nextTextBox()) { | 1710 for (InlineTextBox* box = firstTextBox(); box; box = box->nextTextBox()) { |
| 1700 paintInvalidationContainer.invalidateDisplayItemClientOnBacking(*box, in validationReason); | 1711 paintInvalidationContainer.invalidateDisplayItemClientOnBacking(*box, in validationReason); |
| 1701 if (box->truncation() != cNoTruncation) { | 1712 if (box->truncation() != cNoTruncation) { |
| 1702 if (EllipsisBox* ellipsisBox = box->root().ellipsisBox()) | 1713 if (EllipsisBox* ellipsisBox = box->root().ellipsisBox()) |
| 1703 paintInvalidationContainer.invalidateDisplayItemClientOnBacking( *ellipsisBox, invalidationReason); | 1714 paintInvalidationContainer.invalidateDisplayItemClientOnBacking( *ellipsisBox, invalidationReason); |
| 1704 } | 1715 } |
| 1705 } | 1716 } |
| 1706 } | 1717 } |
| 1707 | 1718 |
| 1708 } // namespace blink | 1719 } // namespace blink |
| OLD | NEW |