Chromium Code Reviews| Index: third_party/WebKit/Source/core/layout/LayoutTableCell.cpp |
| diff --git a/third_party/WebKit/Source/core/layout/LayoutTableCell.cpp b/third_party/WebKit/Source/core/layout/LayoutTableCell.cpp |
| index e8195e90beb6ba30acf91563244f9fd807b29af2..97b3bf3ebfed49c2d8b510af90e23184882629fd 100644 |
| --- a/third_party/WebKit/Source/core/layout/LayoutTableCell.cpp |
| +++ b/third_party/WebKit/Source/core/layout/LayoutTableCell.cpp |
| @@ -67,34 +67,6 @@ LayoutTableCell::LayoutTableCell(Element* element) |
| updateColAndRowSpanFlags(); |
| } |
| -LayoutTableCell::CollapsedBorderValues::CollapsedBorderValues( |
| - const LayoutTable& layoutTable, |
| - const CollapsedBorderValue& startBorder, |
| - const CollapsedBorderValue& endBorder, |
| - const CollapsedBorderValue& beforeBorder, |
| - const CollapsedBorderValue& afterBorder) |
| - : m_layoutTable(layoutTable), |
| - m_startBorder(startBorder), |
| - m_endBorder(endBorder), |
| - m_beforeBorder(beforeBorder), |
| - m_afterBorder(afterBorder) {} |
| - |
| -void LayoutTableCell::CollapsedBorderValues::setCollapsedBorderValues( |
| - const CollapsedBorderValues& other) { |
| - m_startBorder = other.startBorder(); |
| - m_endBorder = other.endBorder(); |
| - m_beforeBorder = other.beforeBorder(); |
| - m_afterBorder = other.afterBorder(); |
| -} |
| - |
| -String LayoutTableCell::CollapsedBorderValues::debugName() const { |
| - return "CollapsedBorderValues"; |
| -} |
| - |
| -LayoutRect LayoutTableCell::CollapsedBorderValues::visualRect() const { |
| - return m_layoutTable.visualRect(); |
| -} |
| - |
| void LayoutTableCell::willBeRemovedFromTree() { |
| LayoutBlockFlow::willBeRemovedFromTree(); |
| @@ -500,7 +472,7 @@ void LayoutTableCell::styleDidChange(StyleDifference diff, |
| return; |
| if (!table->selfNeedsLayout() && !table->normalChildNeedsLayout() && |
| oldStyle && oldStyle->border() != style()->border()) |
| - table->invalidateCollapsedBorders(); |
| + table->invalidateCollapsedBorders(PaintInvalidationStyleChange); |
| if (LayoutTableBoxComponent::doCellsHaveDirtyWidth(*this, *table, diff, |
| *oldStyle)) { |
| @@ -1303,7 +1275,7 @@ void LayoutTableCell::paint(const PaintInfo& paintInfo, |
| TableCellPainter(*this).paint(paintInfo, paintOffset); |
| } |
| -static void addBorderStyle(LayoutTable::CollapsedBorderValues& borderValues, |
| +static void addBorderStyle(Vector<CollapsedBorderValue>& borderValues, |
| CollapsedBorderValue borderValue) { |
| if (!borderValue.isVisible()) |
| return; |
| @@ -1315,56 +1287,45 @@ static void addBorderStyle(LayoutTable::CollapsedBorderValues& borderValues, |
| borderValues.append(borderValue); |
| } |
| -void LayoutTableCell::collectBorderValues( |
| - LayoutTable::CollapsedBorderValues& borderValues) { |
| - CollapsedBorderValues newValues( |
| - *table(), computeCollapsedStartBorder(), computeCollapsedEndBorder(), |
| - computeCollapsedBeforeBorder(), computeCollapsedAfterBorder()); |
| +bool LayoutTableCell::collectBorderValues( |
| + Vector<CollapsedBorderValue>& borderValues) { |
| + CollapsedBorderValues newValues = { |
| + computeCollapsedStartBorder(), computeCollapsedEndBorder(), |
| + computeCollapsedBeforeBorder(), computeCollapsedAfterBorder()}; |
| bool changed = false; |
| - if (!newValues.startBorder().isVisible() && |
| - !newValues.endBorder().isVisible() && |
| - !newValues.beforeBorder().isVisible() && |
| - !newValues.afterBorder().isVisible()) { |
| + if (!newValues.startBorder.isVisible() && !newValues.endBorder.isVisible() && |
|
wkorman
2016/12/05 05:49:22
Just a thought: could improve readability if we mo
Xianzhu
2016/12/05 17:28:54
Done.
|
| + !newValues.beforeBorder.isVisible() && |
| + !newValues.afterBorder.isVisible()) { |
| changed = !!m_collapsedBorderValues; |
| m_collapsedBorderValues = nullptr; |
| } else if (!m_collapsedBorderValues) { |
| changed = true; |
| - m_collapsedBorderValues = wrapUnique(new CollapsedBorderValues( |
| - *table(), newValues.startBorder(), newValues.endBorder(), |
| - newValues.beforeBorder(), newValues.afterBorder())); |
| + m_collapsedBorderValues = wrapUnique(new CollapsedBorderValues(newValues)); |
| } else { |
| // We check visuallyEquals so that the table cell is invalidated only if a |
| // changed collapsed border is visible in the first place. |
| - changed = !m_collapsedBorderValues->startBorder().visuallyEquals( |
| - newValues.startBorder()) || |
| - !m_collapsedBorderValues->endBorder().visuallyEquals( |
| - newValues.endBorder()) || |
| - !m_collapsedBorderValues->beforeBorder().visuallyEquals( |
| - newValues.beforeBorder()) || |
| - !m_collapsedBorderValues->afterBorder().visuallyEquals( |
| - newValues.afterBorder()); |
| + changed = !m_collapsedBorderValues->startBorder.visuallyEquals( |
|
wkorman
2016/12/05 05:49:22
Similar just-a-thought: could add a CollapsedBorde
Xianzhu
2016/12/05 17:28:54
Done.
|
| + newValues.startBorder) || |
| + !m_collapsedBorderValues->endBorder.visuallyEquals( |
| + newValues.endBorder) || |
| + !m_collapsedBorderValues->beforeBorder.visuallyEquals( |
| + newValues.beforeBorder) || |
| + !m_collapsedBorderValues->afterBorder.visuallyEquals( |
| + newValues.afterBorder); |
| if (changed) |
| - m_collapsedBorderValues->setCollapsedBorderValues(newValues); |
| + *m_collapsedBorderValues = newValues; |
| } |
| - // If collapsed borders changed, invalidate the cell's display item client on |
| - // the table's backing. |
| - // TODO(crbug.com/451090#c5): Need a way to invalidate/repaint the borders |
| - // only. |
| - if (changed) |
| - ObjectPaintInvalidator(*table()) |
| - .slowSetPaintingLayerNeedsRepaintAndInvalidateDisplayItemClient( |
| - *this, PaintInvalidationStyleChange); |
| - |
| - addBorderStyle(borderValues, newValues.startBorder()); |
| - addBorderStyle(borderValues, newValues.endBorder()); |
| - addBorderStyle(borderValues, newValues.beforeBorder()); |
| - addBorderStyle(borderValues, newValues.afterBorder()); |
| + addBorderStyle(borderValues, newValues.startBorder); |
| + addBorderStyle(borderValues, newValues.endBorder); |
| + addBorderStyle(borderValues, newValues.beforeBorder); |
| + addBorderStyle(borderValues, newValues.afterBorder); |
| + return changed; |
| } |
| void LayoutTableCell::sortBorderValues( |
| - LayoutTable::CollapsedBorderValues& borderValues) { |
| + Vector<CollapsedBorderValue>& borderValues) { |
| std::sort(borderValues.begin(), borderValues.end(), compareBorders); |
| } |
| @@ -1459,8 +1420,6 @@ void LayoutTableCell::invalidateDisplayItemClients( |
| return; |
| ObjectPaintInvalidator invalidator(*this); |
| - if (m_collapsedBorderValues) |
| - invalidator.invalidateDisplayItemClient(*m_collapsedBorderValues, reason); |
| if (m_rowBackgroundDisplayItemClient) { |
| invalidator.invalidateDisplayItemClient(*m_rowBackgroundDisplayItemClient, |
| reason); |