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

Unified Diff: third_party/WebKit/Source/core/layout/LayoutTableCell.cpp

Issue 2430313004: Paint collapsed borders of a table as one display item (Closed)
Patch Set: - Created 4 years, 1 month 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 side-by-side diff with in-line comments
Download patch
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);
}

Powered by Google App Engine
This is Rietveld 408576698