OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1997 Martin Jones (mjones@kde.org) | 2 * Copyright (C) 1997 Martin Jones (mjones@kde.org) |
3 * (C) 1997 Torben Weis (weis@kde.org) | 3 * (C) 1997 Torben Weis (weis@kde.org) |
4 * (C) 1998 Waldo Bastian (bastian@kde.org) | 4 * (C) 1998 Waldo Bastian (bastian@kde.org) |
5 * (C) 1999 Lars Knoll (knoll@kde.org) | 5 * (C) 1999 Lars Knoll (knoll@kde.org) |
6 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 6 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
7 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. | 7 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. |
8 * All rights reserved. | 8 * All rights reserved. |
9 * | 9 * |
10 * This library is free software; you can redistribute it and/or | 10 * This library is free software; you can redistribute it and/or |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
100 | 100 |
101 void LayoutTableCell::WillBeRemovedFromTree() { | 101 void LayoutTableCell::WillBeRemovedFromTree() { |
102 LayoutBlockFlow::WillBeRemovedFromTree(); | 102 LayoutBlockFlow::WillBeRemovedFromTree(); |
103 | 103 |
104 Section()->SetNeedsCellRecalc(); | 104 Section()->SetNeedsCellRecalc(); |
105 | 105 |
106 // When borders collapse, removing a cell can affect the the width of | 106 // When borders collapse, removing a cell can affect the the width of |
107 // neighboring cells. | 107 // neighboring cells. |
108 LayoutTable* enclosing_table = Table(); | 108 LayoutTable* enclosing_table = Table(); |
109 DCHECK(enclosing_table); | 109 DCHECK(enclosing_table); |
110 if (!enclosing_table->CollapseBorders()) | 110 if (!enclosing_table->ShouldCollapseBorders()) |
111 return; | 111 return; |
112 if (PreviousCell()) { | 112 if (PreviousCell()) { |
113 // TODO(dgrogan): Should this be setChildNeedsLayout or setNeedsLayout? | 113 // TODO(dgrogan): Should this be setChildNeedsLayout or setNeedsLayout? |
114 // remove-cell-with-border-box.html only passes with setNeedsLayout but | 114 // remove-cell-with-border-box.html only passes with setNeedsLayout but |
115 // other places use setChildNeedsLayout. | 115 // other places use setChildNeedsLayout. |
116 PreviousCell()->SetNeedsLayout(LayoutInvalidationReason::kTableChanged); | 116 PreviousCell()->SetNeedsLayout(LayoutInvalidationReason::kTableChanged); |
117 PreviousCell()->SetPreferredLogicalWidthsDirty(); | 117 PreviousCell()->SetPreferredLogicalWidthsDirty(); |
118 } | 118 } |
119 if (NextCell()) { | 119 if (NextCell()) { |
120 // TODO(dgrogan): Same as above re: setChildNeedsLayout vs setNeedsLayout. | 120 // TODO(dgrogan): Same as above re: setChildNeedsLayout vs setNeedsLayout. |
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
408 | 408 |
409 return offset; | 409 return offset; |
410 } | 410 } |
411 | 411 |
412 LayoutRect LayoutTableCell::LocalVisualRect() const { | 412 LayoutRect LayoutTableCell::LocalVisualRect() const { |
413 // If the table grid is dirty, we cannot get reliable information about | 413 // If the table grid is dirty, we cannot get reliable information about |
414 // adjoining cells, so we ignore outside borders. This should not be a problem | 414 // adjoining cells, so we ignore outside borders. This should not be a problem |
415 // because it means that the table is going to recalculate the grid, relayout | 415 // because it means that the table is going to recalculate the grid, relayout |
416 // and issue a paint invalidation of its current rect, which includes any | 416 // and issue a paint invalidation of its current rect, which includes any |
417 // outside borders of this cell. | 417 // outside borders of this cell. |
418 if (!Table()->CollapseBorders() || Table()->NeedsSectionRecalc()) | 418 if (!Table()->ShouldCollapseBorders() || Table()->NeedsSectionRecalc()) |
419 return LayoutBlockFlow::LocalVisualRect(); | 419 return LayoutBlockFlow::LocalVisualRect(); |
420 | 420 |
421 bool rtl = !StyleForCellFlow().IsLeftToRightDirection(); | 421 bool rtl = !StyleForCellFlow().IsLeftToRightDirection(); |
422 LayoutUnit outline_outset(Style()->OutlineOutsetExtent()); | 422 LayoutUnit outline_outset(Style()->OutlineOutsetExtent()); |
423 LayoutUnit left(std::max(CollapsedBorderHalfLeft(true), outline_outset)); | 423 LayoutUnit left(std::max(CollapsedBorderHalfLeft(true), outline_outset)); |
424 LayoutUnit right(std::max(CollapsedBorderHalfRight(true), outline_outset)); | 424 LayoutUnit right(std::max(CollapsedBorderHalfRight(true), outline_outset)); |
425 LayoutUnit top(std::max(CollapsedBorderHalfTop(true), outline_outset)); | 425 LayoutUnit top(std::max(CollapsedBorderHalfTop(true), outline_outset)); |
426 LayoutUnit bottom(std::max(CollapsedBorderHalfBottom(true), outline_outset)); | 426 LayoutUnit bottom(std::max(CollapsedBorderHalfBottom(true), outline_outset)); |
427 if ((left && !rtl) || (right && rtl)) { | 427 if ((left && !rtl) || (right && rtl)) { |
428 if (LayoutTableCell* before = Table()->CellBefore(this)) { | 428 if (LayoutTableCell* before = Table()->CellBefore(this)) { |
(...skipping 666 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1095 table->ResolveColor(after_color_property), | 1095 table->ResolveColor(after_color_property), |
1096 kBorderPrecedenceTable)); | 1096 kBorderPrecedenceTable)); |
1097 if (!result.Exists()) | 1097 if (!result.Exists()) |
1098 return result; | 1098 return result; |
1099 } | 1099 } |
1100 | 1100 |
1101 return result; | 1101 return result; |
1102 } | 1102 } |
1103 | 1103 |
1104 LayoutUnit LayoutTableCell::BorderLeft() const { | 1104 LayoutUnit LayoutTableCell::BorderLeft() const { |
1105 return Table()->CollapseBorders() ? CollapsedBorderHalfLeft(false) | 1105 return Table()->ShouldCollapseBorders() ? CollapsedBorderHalfLeft(false) |
1106 : LayoutBlockFlow::BorderLeft(); | 1106 : LayoutBlockFlow::BorderLeft(); |
1107 } | 1107 } |
1108 | 1108 |
1109 LayoutUnit LayoutTableCell::BorderRight() const { | 1109 LayoutUnit LayoutTableCell::BorderRight() const { |
1110 return Table()->CollapseBorders() ? CollapsedBorderHalfRight(false) | 1110 return Table()->ShouldCollapseBorders() ? CollapsedBorderHalfRight(false) |
1111 : LayoutBlockFlow::BorderRight(); | 1111 : LayoutBlockFlow::BorderRight(); |
1112 } | 1112 } |
1113 | 1113 |
1114 LayoutUnit LayoutTableCell::BorderTop() const { | 1114 LayoutUnit LayoutTableCell::BorderTop() const { |
1115 return Table()->CollapseBorders() ? CollapsedBorderHalfTop(false) | 1115 return Table()->ShouldCollapseBorders() ? CollapsedBorderHalfTop(false) |
1116 : LayoutBlockFlow::BorderTop(); | 1116 : LayoutBlockFlow::BorderTop(); |
1117 } | 1117 } |
1118 | 1118 |
1119 LayoutUnit LayoutTableCell::BorderBottom() const { | 1119 LayoutUnit LayoutTableCell::BorderBottom() const { |
1120 return Table()->CollapseBorders() ? CollapsedBorderHalfBottom(false) | 1120 return Table()->ShouldCollapseBorders() ? CollapsedBorderHalfBottom(false) |
1121 : LayoutBlockFlow::BorderBottom(); | 1121 : LayoutBlockFlow::BorderBottom(); |
1122 } | 1122 } |
1123 | 1123 |
1124 // FIXME: https://bugs.webkit.org/show_bug.cgi?id=46191, make the collapsed | 1124 // FIXME: https://bugs.webkit.org/show_bug.cgi?id=46191, make the collapsed |
1125 // border drawing work with different block flow values instead of being | 1125 // border drawing work with different block flow values instead of being |
1126 // hard-coded to top-to-bottom. | 1126 // hard-coded to top-to-bottom. |
1127 LayoutUnit LayoutTableCell::BorderStart() const { | 1127 LayoutUnit LayoutTableCell::BorderStart() const { |
1128 return Table()->CollapseBorders() ? CollapsedBorderHalfStart(false) | 1128 return Table()->ShouldCollapseBorders() ? CollapsedBorderHalfStart(false) |
1129 : LayoutBlockFlow::BorderStart(); | 1129 : LayoutBlockFlow::BorderStart(); |
1130 } | 1130 } |
1131 | 1131 |
1132 LayoutUnit LayoutTableCell::BorderEnd() const { | 1132 LayoutUnit LayoutTableCell::BorderEnd() const { |
1133 return Table()->CollapseBorders() ? CollapsedBorderHalfEnd(false) | 1133 return Table()->ShouldCollapseBorders() ? CollapsedBorderHalfEnd(false) |
1134 : LayoutBlockFlow::BorderEnd(); | 1134 : LayoutBlockFlow::BorderEnd(); |
1135 } | 1135 } |
1136 | 1136 |
1137 LayoutUnit LayoutTableCell::BorderBefore() const { | 1137 LayoutUnit LayoutTableCell::BorderBefore() const { |
1138 return Table()->CollapseBorders() ? CollapsedBorderHalfBefore(false) | 1138 return Table()->ShouldCollapseBorders() ? CollapsedBorderHalfBefore(false) |
1139 : LayoutBlockFlow::BorderBefore(); | 1139 : LayoutBlockFlow::BorderBefore(); |
1140 } | 1140 } |
1141 | 1141 |
1142 LayoutUnit LayoutTableCell::BorderAfter() const { | 1142 LayoutUnit LayoutTableCell::BorderAfter() const { |
1143 return Table()->CollapseBorders() ? CollapsedBorderHalfAfter(false) | 1143 return Table()->ShouldCollapseBorders() ? CollapsedBorderHalfAfter(false) |
1144 : LayoutBlockFlow::BorderAfter(); | 1144 : LayoutBlockFlow::BorderAfter(); |
1145 } | 1145 } |
1146 | 1146 |
1147 LayoutUnit LayoutTableCell::CollapsedBorderHalfLeft(bool outer) const { | 1147 LayoutUnit LayoutTableCell::CollapsedBorderHalfLeft(bool outer) const { |
1148 const ComputedStyle& style_for_cell_flow = this->StyleForCellFlow(); | 1148 const ComputedStyle& style_for_cell_flow = this->StyleForCellFlow(); |
1149 if (style_for_cell_flow.IsHorizontalWritingMode()) { | 1149 if (style_for_cell_flow.IsHorizontalWritingMode()) { |
1150 return style_for_cell_flow.IsLeftToRightDirection() | 1150 return style_for_cell_flow.IsLeftToRightDirection() |
1151 ? CollapsedBorderHalfStart(outer) | 1151 ? CollapsedBorderHalfStart(outer) |
1152 : CollapsedBorderHalfEnd(outer); | 1152 : CollapsedBorderHalfEnd(outer); |
1153 } | 1153 } |
1154 return style_for_cell_flow.IsFlippedBlocksWritingMode() | 1154 return style_for_cell_flow.IsFlippedBlocksWritingMode() |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1261 TableCellPainter(*this).Paint(paint_info, paint_offset); | 1261 TableCellPainter(*this).Paint(paint_info, paint_offset); |
1262 } | 1262 } |
1263 | 1263 |
1264 void LayoutTableCell::UpdateCollapsedBorderValues() const { | 1264 void LayoutTableCell::UpdateCollapsedBorderValues() const { |
1265 Table()->InvalidateCollapsedBordersForAllCellsIfNeeded(); | 1265 Table()->InvalidateCollapsedBordersForAllCellsIfNeeded(); |
1266 if (collapsed_border_values_valid_) | 1266 if (collapsed_border_values_valid_) |
1267 return; | 1267 return; |
1268 | 1268 |
1269 collapsed_border_values_valid_ = true; | 1269 collapsed_border_values_valid_ = true; |
1270 | 1270 |
1271 if (!Table()->CollapseBorders()) { | 1271 if (!Table()->ShouldCollapseBorders()) { |
1272 if (collapsed_border_values_) { | 1272 if (collapsed_border_values_) { |
1273 collapsed_borders_visually_changed_ = true; | 1273 collapsed_borders_visually_changed_ = true; |
1274 collapsed_border_values_ = nullptr; | 1274 collapsed_border_values_ = nullptr; |
1275 } | 1275 } |
1276 return; | 1276 return; |
1277 } | 1277 } |
1278 | 1278 |
1279 CollapsedBorderValues new_values( | 1279 CollapsedBorderValues new_values( |
1280 *this, ComputeCollapsedStartBorder(), ComputeCollapsedEndBorder(), | 1280 *this, ComputeCollapsedStartBorder(), ComputeCollapsedEndBorder(), |
1281 ComputeCollapsedBeforeBorder(), ComputeCollapsedAfterBorder()); | 1281 ComputeCollapsedBeforeBorder(), ComputeCollapsedAfterBorder()); |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1419 EDisplay::kTableCell); | 1419 EDisplay::kTableCell); |
1420 new_cell->SetStyle(std::move(new_style)); | 1420 new_cell->SetStyle(std::move(new_style)); |
1421 return new_cell; | 1421 return new_cell; |
1422 } | 1422 } |
1423 | 1423 |
1424 bool LayoutTableCell::BackgroundIsKnownToBeOpaqueInRect( | 1424 bool LayoutTableCell::BackgroundIsKnownToBeOpaqueInRect( |
1425 const LayoutRect& local_rect) const { | 1425 const LayoutRect& local_rect) const { |
1426 // If this object has layer, the area of collapsed borders should be | 1426 // If this object has layer, the area of collapsed borders should be |
1427 // transparent to expose the collapsed borders painted on the underlying | 1427 // transparent to expose the collapsed borders painted on the underlying |
1428 // layer. | 1428 // layer. |
1429 if (HasLayer() && Table()->CollapseBorders()) | 1429 if (HasLayer() && Table()->ShouldCollapseBorders()) |
1430 return false; | 1430 return false; |
1431 return LayoutBlockFlow::BackgroundIsKnownToBeOpaqueInRect(local_rect); | 1431 return LayoutBlockFlow::BackgroundIsKnownToBeOpaqueInRect(local_rect); |
1432 } | 1432 } |
1433 | 1433 |
1434 bool LayoutTableCell::UsesCompositedCellDisplayItemClients() const { | 1434 bool LayoutTableCell::UsesCompositedCellDisplayItemClients() const { |
1435 // In certain cases such as collapsed borders for composited table cells we | 1435 // In certain cases such as collapsed borders for composited table cells we |
1436 // paint content for the cell into the table graphics layer backing and so | 1436 // paint content for the cell into the table graphics layer backing and so |
1437 // must use the table's visual rect. | 1437 // must use the table's visual rect. |
1438 return (HasLayer() && Layer()->GetCompositingState() != kNotComposited) || | 1438 return (HasLayer() && Layer()->GetCompositingState() != kNotComposited) || |
1439 RuntimeEnabledFeatures::slimmingPaintV2Enabled(); | 1439 RuntimeEnabledFeatures::slimmingPaintV2Enabled(); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1482 const PaintInvalidatorContext& context) const { | 1482 const PaintInvalidatorContext& context) const { |
1483 return TableCellPaintInvalidator(*this, context).InvalidatePaint(); | 1483 return TableCellPaintInvalidator(*this, context).InvalidatePaint(); |
1484 } | 1484 } |
1485 | 1485 |
1486 PaintInvalidationReason LayoutTableCell::InvalidatePaint( | 1486 PaintInvalidationReason LayoutTableCell::InvalidatePaint( |
1487 const PaintInvalidationState& state) { | 1487 const PaintInvalidationState& state) { |
1488 return LayoutBlockFlow::InvalidatePaint(state); | 1488 return LayoutBlockFlow::InvalidatePaint(state); |
1489 } | 1489 } |
1490 | 1490 |
1491 } // namespace blink | 1491 } // namespace blink |
OLD | NEW |