| 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. All rights
reserved. | 7 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights
reserved. |
| 8 * | 8 * |
| 9 * This library is free software; you can redistribute it and/or | 9 * This library is free software; you can redistribute it and/or |
| 10 * modify it under the terms of the GNU Library General Public | 10 * modify it under the terms of the GNU Library General Public |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 95 m_hasRowSpan = node() && parseRowSpanFromDOM() != 1; | 95 m_hasRowSpan = node() && parseRowSpanFromDOM() != 1; |
| 96 } | 96 } |
| 97 | 97 |
| 98 void LayoutTableCell::colSpanOrRowSpanChanged() | 98 void LayoutTableCell::colSpanOrRowSpanChanged() |
| 99 { | 99 { |
| 100 ASSERT(node()); | 100 ASSERT(node()); |
| 101 ASSERT(isHTMLTableCellElement(*node())); | 101 ASSERT(isHTMLTableCellElement(*node())); |
| 102 | 102 |
| 103 updateColAndRowSpanFlags(); | 103 updateColAndRowSpanFlags(); |
| 104 | 104 |
| 105 setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInvalidation(); | 105 setNeedsLayoutAndPrefWidthsRecalcAndFullPaintInvalidation(LayoutInvalidation
Reason::AttributeChanged); |
| 106 if (parent() && section()) | 106 if (parent() && section()) |
| 107 section()->setNeedsCellRecalc(); | 107 section()->setNeedsCellRecalc(); |
| 108 } | 108 } |
| 109 | 109 |
| 110 Length LayoutTableCell::logicalWidthFromColumns(LayoutTableCol* firstColForThisC
ell, Length widthFromStyle) const | 110 Length LayoutTableCell::logicalWidthFromColumns(LayoutTableCol* firstColForThisC
ell, Length widthFromStyle) const |
| 111 { | 111 { |
| 112 ASSERT(firstColForThisCell && firstColForThisCell == table()->colElement(col
())); | 112 ASSERT(firstColForThisCell && firstColForThisCell == table()->colElement(col
())); |
| 113 LayoutTableCol* tableCol = firstColForThisCell; | 113 LayoutTableCol* tableCol = firstColForThisCell; |
| 114 | 114 |
| 115 unsigned colSpanCount = colSpan(); | 115 unsigned colSpanCount = colSpan(); |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 203 break; | 203 break; |
| 204 } | 204 } |
| 205 | 205 |
| 206 int intrinsicPaddingAfter = rowHeight - logicalHeightWithoutIntrinsicPadding
- intrinsicPaddingBefore; | 206 int intrinsicPaddingAfter = rowHeight - logicalHeightWithoutIntrinsicPadding
- intrinsicPaddingBefore; |
| 207 setIntrinsicPaddingBefore(intrinsicPaddingBefore); | 207 setIntrinsicPaddingBefore(intrinsicPaddingBefore); |
| 208 setIntrinsicPaddingAfter(intrinsicPaddingAfter); | 208 setIntrinsicPaddingAfter(intrinsicPaddingAfter); |
| 209 | 209 |
| 210 // FIXME: Changing an intrinsic padding shouldn't trigger a relayout as it o
nly shifts the cell inside the row but | 210 // FIXME: Changing an intrinsic padding shouldn't trigger a relayout as it o
nly shifts the cell inside the row but |
| 211 // doesn't change the logical height. | 211 // doesn't change the logical height. |
| 212 if (intrinsicPaddingBefore != oldIntrinsicPaddingBefore || intrinsicPaddingA
fter != oldIntrinsicPaddingAfter) | 212 if (intrinsicPaddingBefore != oldIntrinsicPaddingBefore || intrinsicPaddingA
fter != oldIntrinsicPaddingAfter) |
| 213 layouter.setNeedsLayout(this); | 213 layouter.setNeedsLayout(this, LayoutInvalidationReason::PaddingChanged); |
| 214 } | 214 } |
| 215 | 215 |
| 216 void LayoutTableCell::updateLogicalWidth() | 216 void LayoutTableCell::updateLogicalWidth() |
| 217 { | 217 { |
| 218 } | 218 } |
| 219 | 219 |
| 220 void LayoutTableCell::setCellLogicalWidth(int tableLayoutLogicalWidth, SubtreeLa
youtScope& layouter) | 220 void LayoutTableCell::setCellLogicalWidth(int tableLayoutLogicalWidth, SubtreeLa
youtScope& layouter) |
| 221 { | 221 { |
| 222 if (tableLayoutLogicalWidth == logicalWidth()) | 222 if (tableLayoutLogicalWidth == logicalWidth()) |
| 223 return; | 223 return; |
| 224 | 224 |
| 225 layouter.setNeedsLayout(this); | 225 layouter.setNeedsLayout(this, LayoutInvalidationReason::SizeChanged); |
| 226 | 226 |
| 227 setLogicalWidth(tableLayoutLogicalWidth); | 227 setLogicalWidth(tableLayoutLogicalWidth); |
| 228 setCellWidthChanged(true); | 228 setCellWidthChanged(true); |
| 229 } | 229 } |
| 230 | 230 |
| 231 void LayoutTableCell::layout() | 231 void LayoutTableCell::layout() |
| 232 { | 232 { |
| 233 ASSERT(needsLayout()); | 233 ASSERT(needsLayout()); |
| 234 LayoutAnalyzer::Scope analyzer(*this); | 234 LayoutAnalyzer::Scope analyzer(*this); |
| 235 | 235 |
| 236 int oldCellBaseline = cellBaselinePosition(); | 236 int oldCellBaseline = cellBaselinePosition(); |
| 237 layoutBlock(cellWidthChanged()); | 237 layoutBlock(cellWidthChanged()); |
| 238 | 238 |
| 239 // If we have replaced content, the intrinsic height of our content may have
changed since the last time we laid out. If that's the case the intrinsic paddi
ng we used | 239 // If we have replaced content, the intrinsic height of our content may have
changed since the last time we laid out. If that's the case the intrinsic paddi
ng we used |
| 240 // for layout (the padding required to push the contents of the cell down to
the row's baseline) is included in our new height and baseline and makes both | 240 // for layout (the padding required to push the contents of the cell down to
the row's baseline) is included in our new height and baseline and makes both |
| 241 // of them wrong. So if our content's intrinsic height has changed push the
new content up into the intrinsic padding and relayout so that the rest of | 241 // of them wrong. So if our content's intrinsic height has changed push the
new content up into the intrinsic padding and relayout so that the rest of |
| 242 // table and row layout can use the correct baseline and height for this cel
l. | 242 // table and row layout can use the correct baseline and height for this cel
l. |
| 243 if (isBaselineAligned() && section()->rowBaseline(rowIndex()) && cellBaselin
ePosition() > section()->rowBaseline(rowIndex())) { | 243 if (isBaselineAligned() && section()->rowBaseline(rowIndex()) && cellBaselin
ePosition() > section()->rowBaseline(rowIndex())) { |
| 244 int newIntrinsicPaddingBefore = std::max<LayoutUnit>(0, intrinsicPadding
Before() - std::max<LayoutUnit>(0, cellBaselinePosition() - oldCellBaseline)); | 244 int newIntrinsicPaddingBefore = std::max<LayoutUnit>(0, intrinsicPadding
Before() - std::max<LayoutUnit>(0, cellBaselinePosition() - oldCellBaseline)); |
| 245 setIntrinsicPaddingBefore(newIntrinsicPaddingBefore); | 245 setIntrinsicPaddingBefore(newIntrinsicPaddingBefore); |
| 246 SubtreeLayoutScope layouter(*this); | 246 SubtreeLayoutScope layouter(*this); |
| 247 layouter.setNeedsLayout(this); | 247 layouter.setNeedsLayout(this, LayoutInvalidationReason::TableChanged); |
| 248 layoutBlock(cellWidthChanged()); | 248 layoutBlock(cellWidthChanged()); |
| 249 } | 249 } |
| 250 | 250 |
| 251 // FIXME: This value isn't the intrinsic content logical height, but we need | 251 // FIXME: This value isn't the intrinsic content logical height, but we need |
| 252 // to update the value as its used by flexbox layout. crbug.com/367324 | 252 // to update the value as its used by flexbox layout. crbug.com/367324 |
| 253 setIntrinsicContentLogicalHeight(contentLogicalHeight()); | 253 setIntrinsicContentLogicalHeight(contentLogicalHeight()); |
| 254 | 254 |
| 255 setCellWidthChanged(false); | 255 setCellWidthChanged(false); |
| 256 } | 256 } |
| 257 | 257 |
| (...skipping 792 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1050 | 1050 |
| 1051 LayoutTableCell* LayoutTableCell::createAnonymousWithParentRenderer(const Layout
Object* parent) | 1051 LayoutTableCell* LayoutTableCell::createAnonymousWithParentRenderer(const Layout
Object* parent) |
| 1052 { | 1052 { |
| 1053 LayoutTableCell* newCell = LayoutTableCell::createAnonymous(&parent->documen
t()); | 1053 LayoutTableCell* newCell = LayoutTableCell::createAnonymous(&parent->documen
t()); |
| 1054 RefPtr<ComputedStyle> newStyle = ComputedStyle::createAnonymousStyleWithDisp
lay(parent->styleRef(), TABLE_CELL); | 1054 RefPtr<ComputedStyle> newStyle = ComputedStyle::createAnonymousStyleWithDisp
lay(parent->styleRef(), TABLE_CELL); |
| 1055 newCell->setStyle(newStyle.release()); | 1055 newCell->setStyle(newStyle.release()); |
| 1056 return newCell; | 1056 return newCell; |
| 1057 } | 1057 } |
| 1058 | 1058 |
| 1059 } // namespace blink | 1059 } // namespace blink |
| OLD | NEW |