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 75f5a01f2d23ddc9e31375b6f55e827be82b1a07..111679a2b94f54e7fc5866bdf5cb0ac928db3824 100644 |
--- a/third_party/WebKit/Source/core/layout/LayoutTableCell.cpp |
+++ b/third_party/WebKit/Source/core/layout/LayoutTableCell.cpp |
@@ -66,34 +66,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(); |
@@ -1280,7 +1252,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; |
@@ -1293,55 +1265,27 @@ static void addBorderStyle(LayoutTable::CollapsedBorderValues& borderValues, |
} |
void LayoutTableCell::collectBorderValues( |
- LayoutTable::CollapsedBorderValues& borderValues) { |
- CollapsedBorderValues newValues( |
- *table(), computeCollapsedStartBorder(), computeCollapsedEndBorder(), |
- computeCollapsedBeforeBorder(), computeCollapsedAfterBorder()); |
- |
- bool changed = false; |
- if (!newValues.startBorder().isVisible() && |
- !newValues.endBorder().isVisible() && |
- !newValues.beforeBorder().isVisible() && |
- !newValues.afterBorder().isVisible()) { |
- changed = !!m_collapsedBorderValues; |
+ Vector<CollapsedBorderValue>& borderValues) { |
+ CollapsedBorderValues newValues = { |
+ computeCollapsedStartBorder(), computeCollapsedEndBorder(), |
+ computeCollapsedBeforeBorder(), computeCollapsedAfterBorder()}; |
+ |
+ if (!newValues.startBorder.isVisible() && !newValues.endBorder.isVisible() && |
+ !newValues.beforeBorder.isVisible() && !newValues.afterBorder.isVisible()) |
m_collapsedBorderValues = nullptr; |
- } else if (!m_collapsedBorderValues) { |
- changed = true; |
- m_collapsedBorderValues = wrapUnique(new CollapsedBorderValues( |
- *table(), newValues.startBorder(), newValues.endBorder(), |
- newValues.beforeBorder(), newValues.afterBorder())); |
- } 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()); |
- if (changed) |
- m_collapsedBorderValues->setCollapsedBorderValues(newValues); |
- } |
+ else if (!m_collapsedBorderValues) |
+ m_collapsedBorderValues = wrapUnique(new CollapsedBorderValues(newValues)); |
+ else |
+ *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); |
} |
void LayoutTableCell::sortBorderValues( |
- LayoutTable::CollapsedBorderValues& borderValues) { |
+ Vector<CollapsedBorderValue>& borderValues) { |
std::sort(borderValues.begin(), borderValues.end(), compareBorders); |
} |
@@ -1422,20 +1366,8 @@ bool LayoutTableCell::backgroundIsKnownToBeOpaqueInRect( |
return LayoutBlockFlow::backgroundIsKnownToBeOpaqueInRect(localRect); |
} |
-bool LayoutTableCell::usesTableAsAdditionalDisplayItemClient() const { |
- // In certain cases such as collapsed borders for composited table cells we |
- // paint content for the cell into the table graphics layer backing and so |
- // must use the table's visual rect. |
- return (hasLayer() && layer()->compositingState() != NotComposited) || |
- RuntimeEnabledFeatures::slimmingPaintV2Enabled(); |
-} |
- |
void LayoutTableCell::invalidateDisplayItemClients( |
wkorman
2016/11/03 05:26:13
I think we can just delete this whole method overr
Xianzhu
2016/11/03 16:06:13
Done.
|
PaintInvalidationReason reason) const { |
- if (m_collapsedBorderValues && usesTableAsAdditionalDisplayItemClient()) { |
- ObjectPaintInvalidator(*this).invalidateDisplayItemClient( |
- *m_collapsedBorderValues, reason); |
- } |
LayoutBlockFlow::invalidateDisplayItemClients(reason); |
} |