| 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 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 147 if (node() && style()->autoWrap()) { | 147 if (node() && style()->autoWrap()) { |
| 148 // See if nowrap was set. | 148 // See if nowrap was set. |
| 149 Length w = styleOrColLogicalWidth(); | 149 Length w = styleOrColLogicalWidth(); |
| 150 const AtomicString& nowrap = toElement(node())->getAttribute(nowrapAttr)
; | 150 const AtomicString& nowrap = toElement(node())->getAttribute(nowrapAttr)
; |
| 151 if (!nowrap.isNull() && w.isFixed()) { | 151 if (!nowrap.isNull() && w.isFixed()) { |
| 152 // Nowrap is set, but we didn't actually use it because of the | 152 // Nowrap is set, but we didn't actually use it because of the |
| 153 // fixed width set on the cell. Even so, it is a WinIE/Moz trait | 153 // fixed width set on the cell. Even so, it is a WinIE/Moz trait |
| 154 // to make the minwidth of the cell into the fixed width. They do t
his | 154 // to make the minwidth of the cell into the fixed width. They do t
his |
| 155 // even in strict mode, so do not make this a quirk. Affected the t
op | 155 // even in strict mode, so do not make this a quirk. Affected the t
op |
| 156 // of hiptop.com. | 156 // of hiptop.com. |
| 157 m_minPreferredLogicalWidth = std::max<LayoutUnit>(w.value(), m_minPr
eferredLogicalWidth); | 157 m_minPreferredLogicalWidth = std::max(LayoutUnit(w.value()), m_minPr
eferredLogicalWidth); |
| 158 } | 158 } |
| 159 } | 159 } |
| 160 } | 160 } |
| 161 | 161 |
| 162 void LayoutTableCell::addLayerHitTestRects(LayerHitTestRects& layerRects, const
PaintLayer* currentLayer, const LayoutPoint& layerOffset, const LayoutRect& cont
ainerRect) const | 162 void LayoutTableCell::addLayerHitTestRects(LayerHitTestRects& layerRects, const
PaintLayer* currentLayer, const LayoutPoint& layerOffset, const LayoutRect& cont
ainerRect) const |
| 163 { | 163 { |
| 164 LayoutPoint adjustedLayerOffset = layerOffset; | 164 LayoutPoint adjustedLayerOffset = layerOffset; |
| 165 // LayoutTableCell's location includes the offset of it's containing LayoutT
ableRow, so | 165 // LayoutTableCell's location includes the offset of it's containing LayoutT
ableRow, so |
| 166 // we need to subtract that again here (as for LayoutTableCell::offsetFromCo
ntainer. | 166 // we need to subtract that again here (as for LayoutTableCell::offsetFromCo
ntainer. |
| 167 if (parent()) | 167 if (parent()) |
| 168 adjustedLayerOffset -= parentBox()->locationOffset(); | 168 adjustedLayerOffset -= parentBox()->locationOffset(); |
| 169 LayoutBox::addLayerHitTestRects(layerRects, currentLayer, adjustedLayerOffse
t, containerRect); | 169 LayoutBox::addLayerHitTestRects(layerRects, currentLayer, adjustedLayerOffse
t, containerRect); |
| 170 } | 170 } |
| 171 | 171 |
| 172 void LayoutTableCell::computeIntrinsicPadding(int rowHeight, SubtreeLayoutScope&
layouter) | 172 void LayoutTableCell::computeIntrinsicPadding(int rowHeight, SubtreeLayoutScope&
layouter) |
| 173 { | 173 { |
| 174 int oldIntrinsicPaddingBefore = intrinsicPaddingBefore(); | 174 int oldIntrinsicPaddingBefore = intrinsicPaddingBefore(); |
| 175 int oldIntrinsicPaddingAfter = intrinsicPaddingAfter(); | 175 int oldIntrinsicPaddingAfter = intrinsicPaddingAfter(); |
| 176 int logicalHeightWithoutIntrinsicPadding = pixelSnappedLogicalHeight() - old
IntrinsicPaddingBefore - oldIntrinsicPaddingAfter; | 176 int logicalHeightWithoutIntrinsicPadding = pixelSnappedLogicalHeight() - old
IntrinsicPaddingBefore - oldIntrinsicPaddingAfter; |
| 177 | 177 |
| 178 int intrinsicPaddingBefore = 0; | 178 int intrinsicPaddingBefore = 0; |
| 179 switch (style()->verticalAlign()) { | 179 switch (style()->verticalAlign()) { |
| 180 case SUB: | 180 case SUB: |
| 181 case SUPER: | 181 case SUPER: |
| 182 case TEXT_TOP: | 182 case TEXT_TOP: |
| 183 case TEXT_BOTTOM: | 183 case TEXT_BOTTOM: |
| 184 case LENGTH: | 184 case LENGTH: |
| 185 case BASELINE: { | 185 case BASELINE: { |
| 186 LayoutUnit baseline = cellBaselinePosition(); | 186 int baseline = cellBaselinePosition(); |
| 187 if (baseline > borderBefore() + paddingBefore()) | 187 if (baseline > borderBefore() + paddingBefore()) |
| 188 intrinsicPaddingBefore = section()->rowBaseline(rowIndex()) - (basel
ine - oldIntrinsicPaddingBefore); | 188 intrinsicPaddingBefore = section()->rowBaseline(rowIndex()) - (basel
ine - oldIntrinsicPaddingBefore); |
| 189 break; | 189 break; |
| 190 } | 190 } |
| 191 case TOP: | 191 case TOP: |
| 192 break; | 192 break; |
| 193 case MIDDLE: | 193 case MIDDLE: |
| 194 intrinsicPaddingBefore = (rowHeight - logicalHeightWithoutIntrinsicPaddi
ng) / 2; | 194 intrinsicPaddingBefore = (rowHeight - logicalHeightWithoutIntrinsicPaddi
ng) / 2; |
| 195 break; | 195 break; |
| 196 case BOTTOM: | 196 case BOTTOM: |
| (...skipping 17 matching lines...) Expand all Loading... |
| 214 { | 214 { |
| 215 } | 215 } |
| 216 | 216 |
| 217 void LayoutTableCell::setCellLogicalWidth(int tableLayoutLogicalWidth, SubtreeLa
youtScope& layouter) | 217 void LayoutTableCell::setCellLogicalWidth(int tableLayoutLogicalWidth, SubtreeLa
youtScope& layouter) |
| 218 { | 218 { |
| 219 if (tableLayoutLogicalWidth == logicalWidth()) | 219 if (tableLayoutLogicalWidth == logicalWidth()) |
| 220 return; | 220 return; |
| 221 | 221 |
| 222 layouter.setNeedsLayout(this, LayoutInvalidationReason::SizeChanged); | 222 layouter.setNeedsLayout(this, LayoutInvalidationReason::SizeChanged); |
| 223 | 223 |
| 224 setLogicalWidth(tableLayoutLogicalWidth); | 224 setLogicalWidth(LayoutUnit(tableLayoutLogicalWidth)); |
| 225 setCellWidthChanged(true); | 225 setCellWidthChanged(true); |
| 226 } | 226 } |
| 227 | 227 |
| 228 void LayoutTableCell::layout() | 228 void LayoutTableCell::layout() |
| 229 { | 229 { |
| 230 ASSERT(needsLayout()); | 230 ASSERT(needsLayout()); |
| 231 LayoutAnalyzer::Scope analyzer(*this); | 231 LayoutAnalyzer::Scope analyzer(*this); |
| 232 | 232 |
| 233 int oldCellBaseline = cellBaselinePosition(); | 233 int oldCellBaseline = cellBaselinePosition(); |
| 234 layoutBlock(cellWidthChanged()); | 234 layoutBlock(cellWidthChanged()); |
| 235 | 235 |
| 236 // 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 | 236 // 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 |
| 237 // 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 | 237 // 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 |
| 238 // 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 | 238 // 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 |
| 239 // table and row layout can use the correct baseline and height for this cel
l. | 239 // table and row layout can use the correct baseline and height for this cel
l. |
| 240 if (isBaselineAligned() && section()->rowBaseline(rowIndex()) && cellBaselin
ePosition() > section()->rowBaseline(rowIndex())) { | 240 if (isBaselineAligned() && section()->rowBaseline(rowIndex()) && cellBaselin
ePosition() > section()->rowBaseline(rowIndex())) { |
| 241 int newIntrinsicPaddingBefore = (intrinsicPaddingBefore() - (cellBaselin
ePosition() - oldCellBaseline).clampNegativeToZero()).clampNegativeToZero(); | 241 int newIntrinsicPaddingBefore = std::max(intrinsicPaddingBefore() - std:
:max(cellBaselinePosition() - oldCellBaseline, 0), 0); |
| 242 setIntrinsicPaddingBefore(newIntrinsicPaddingBefore); | 242 setIntrinsicPaddingBefore(newIntrinsicPaddingBefore); |
| 243 SubtreeLayoutScope layouter(*this); | 243 SubtreeLayoutScope layouter(*this); |
| 244 layouter.setNeedsLayout(this, LayoutInvalidationReason::TableChanged); | 244 layouter.setNeedsLayout(this, LayoutInvalidationReason::TableChanged); |
| 245 layoutBlock(cellWidthChanged()); | 245 layoutBlock(cellWidthChanged()); |
| 246 } | 246 } |
| 247 | 247 |
| 248 // FIXME: This value isn't the intrinsic content logical height, but we need | 248 // FIXME: This value isn't the intrinsic content logical height, but we need |
| 249 // to update the value as its used by flexbox layout. crbug.com/367324 | 249 // to update the value as its used by flexbox layout. crbug.com/367324 |
| 250 setIntrinsicContentLogicalHeight(contentLogicalHeight()); | 250 setIntrinsicContentLogicalHeight(contentLogicalHeight()); |
| 251 | 251 |
| 252 setCellWidthChanged(false); | 252 setCellWidthChanged(false); |
| 253 } | 253 } |
| 254 | 254 |
| 255 LayoutUnit LayoutTableCell::paddingTop() const | 255 LayoutUnit LayoutTableCell::paddingTop() const |
| 256 { | 256 { |
| 257 int result = computedCSSPaddingTop(); | 257 LayoutUnit result = computedCSSPaddingTop(); |
| 258 if (!isHorizontalWritingMode()) | 258 if (isHorizontalWritingMode()) |
| 259 return result; | 259 result += (style()->writingMode() == TopToBottomWritingMode ? intrinsicP
addingBefore() : intrinsicPaddingAfter()); |
| 260 return result + (style()->writingMode() == TopToBottomWritingMode ? intrinsi
cPaddingBefore() : intrinsicPaddingAfter()); | 260 // TODO(leviw): The floor call should be removed when Table is sub-pixel awa
re. crbug.com/377847 |
| 261 return LayoutUnit(result.floor()); |
| 261 } | 262 } |
| 262 | 263 |
| 263 LayoutUnit LayoutTableCell::paddingBottom() const | 264 LayoutUnit LayoutTableCell::paddingBottom() const |
| 264 { | 265 { |
| 265 int result = computedCSSPaddingBottom(); | 266 LayoutUnit result = computedCSSPaddingBottom(); |
| 266 if (!isHorizontalWritingMode()) | 267 if (isHorizontalWritingMode()) |
| 267 return result; | 268 result += (style()->writingMode() == TopToBottomWritingMode ? intrinsicP
addingAfter() : intrinsicPaddingBefore()); |
| 268 return result + (style()->writingMode() == TopToBottomWritingMode ? intrinsi
cPaddingAfter() : intrinsicPaddingBefore()); | 269 // TODO(leviw): The floor call should be removed when Table is sub-pixel awa
re. crbug.com/377847 |
| 270 return LayoutUnit(result.floor()); |
| 269 } | 271 } |
| 270 | 272 |
| 271 LayoutUnit LayoutTableCell::paddingLeft() const | 273 LayoutUnit LayoutTableCell::paddingLeft() const |
| 272 { | 274 { |
| 273 int result = computedCSSPaddingLeft(); | 275 LayoutUnit result = computedCSSPaddingLeft(); |
| 274 if (isHorizontalWritingMode()) | 276 if (!isHorizontalWritingMode()) |
| 275 return result; | 277 result += (style()->writingMode() == LeftToRightWritingMode ? intrinsicP
addingBefore() : intrinsicPaddingAfter()); |
| 276 return result + (style()->writingMode() == LeftToRightWritingMode ? intrinsi
cPaddingBefore() : intrinsicPaddingAfter()); | 278 // TODO(leviw): The floor call should be removed when Table is sub-pixel awa
re. crbug.com/377847 |
| 279 return LayoutUnit(result.floor()); |
| 277 } | 280 } |
| 278 | 281 |
| 279 LayoutUnit LayoutTableCell::paddingRight() const | 282 LayoutUnit LayoutTableCell::paddingRight() const |
| 280 { | 283 { |
| 281 int result = computedCSSPaddingRight(); | 284 LayoutUnit result = computedCSSPaddingRight(); |
| 282 if (isHorizontalWritingMode()) | 285 if (!isHorizontalWritingMode()) |
| 283 return result; | 286 result += (style()->writingMode() == LeftToRightWritingMode ? intrinsicP
addingAfter() : intrinsicPaddingBefore()); |
| 284 return result + (style()->writingMode() == LeftToRightWritingMode ? intrinsi
cPaddingAfter() : intrinsicPaddingBefore()); | 287 // TODO(leviw): The floor call should be removed when Table is sub-pixel awa
re. crbug.com/377847 |
| 288 return LayoutUnit(result.floor()); |
| 285 } | 289 } |
| 286 | 290 |
| 287 LayoutUnit LayoutTableCell::paddingBefore() const | 291 LayoutUnit LayoutTableCell::paddingBefore() const |
| 288 { | 292 { |
| 289 return static_cast<int>(computedCSSPaddingBefore()) + intrinsicPaddingBefore
(); | 293 return LayoutUnit(computedCSSPaddingBefore().floor() + intrinsicPaddingBefor
e()); |
| 290 } | 294 } |
| 291 | 295 |
| 292 LayoutUnit LayoutTableCell::paddingAfter() const | 296 LayoutUnit LayoutTableCell::paddingAfter() const |
| 293 { | 297 { |
| 294 return static_cast<int>(computedCSSPaddingAfter()) + intrinsicPaddingAfter()
; | 298 return LayoutUnit(computedCSSPaddingAfter().floor() + intrinsicPaddingAfter(
)); |
| 295 } | 299 } |
| 296 | 300 |
| 297 void LayoutTableCell::setOverrideLogicalContentHeightFromRowHeight(LayoutUnit ro
wHeight) | 301 void LayoutTableCell::setOverrideLogicalContentHeightFromRowHeight(LayoutUnit ro
wHeight) |
| 298 { | 302 { |
| 299 clearIntrinsicPadding(); | 303 clearIntrinsicPadding(); |
| 300 setOverrideLogicalContentHeight((rowHeight - borderAndPaddingLogicalHeight()
).clampNegativeToZero()); | 304 setOverrideLogicalContentHeight((rowHeight - borderAndPaddingLogicalHeight()
).clampNegativeToZero()); |
| 301 } | 305 } |
| 302 | 306 |
| 303 LayoutSize LayoutTableCell::offsetFromContainer(const LayoutObject* o, const Lay
outPoint& point, bool* offsetDependsOnPoint) const | 307 LayoutSize LayoutTableCell::offsetFromContainer(const LayoutObject* o, const Lay
outPoint& point, bool* offsetDependsOnPoint) const |
| 304 { | 308 { |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 343 left = std::max(left, above->borderHalfLeft(true)); | 347 left = std::max(left, above->borderHalfLeft(true)); |
| 344 right = std::max(right, above->borderHalfRight(true)); | 348 right = std::max(right, above->borderHalfRight(true)); |
| 345 } | 349 } |
| 346 } | 350 } |
| 347 if (bottom) { | 351 if (bottom) { |
| 348 if (LayoutTableCell* below = table()->cellBelow(this)) { | 352 if (LayoutTableCell* below = table()->cellBelow(this)) { |
| 349 left = std::max(left, below->borderHalfLeft(true)); | 353 left = std::max(left, below->borderHalfLeft(true)); |
| 350 right = std::max(right, below->borderHalfRight(true)); | 354 right = std::max(right, below->borderHalfRight(true)); |
| 351 } | 355 } |
| 352 } | 356 } |
| 353 LayoutPoint location(std::max<LayoutUnit>(left, -visualOverflowRect().x()),
std::max<LayoutUnit>(top, -visualOverflowRect().y())); | 357 LayoutPoint location(std::max(LayoutUnit(left), -visualOverflowRect().x()),
std::max(LayoutUnit(top), -visualOverflowRect().y())); |
| 354 LayoutRect r(-location.x(), -location.y(), location.x() + std::max(size().wi
dth() + right, visualOverflowRect().maxX()), location.y() + std::max(size().heig
ht() + bottom, visualOverflowRect().maxY())); | 358 LayoutRect r(-location.x(), -location.y(), location.x() + std::max(size().wi
dth() + right, visualOverflowRect().maxX()), location.y() + std::max(size().heig
ht() + bottom, visualOverflowRect().maxY())); |
| 355 | 359 |
| 356 mapToVisibleRectInAncestorSpace(paintInvalidationContainer, r, paintInvalida
tionState); | 360 mapToVisibleRectInAncestorSpace(paintInvalidationContainer, r, paintInvalida
tionState); |
| 357 return r; | 361 return r; |
| 358 } | 362 } |
| 359 | 363 |
| 360 void LayoutTableCell::mapToVisibleRectInAncestorSpace(const LayoutBoxModelObject
* ancestor, LayoutRect& r, const PaintInvalidationState* paintInvalidationState)
const | 364 void LayoutTableCell::mapToVisibleRectInAncestorSpace(const LayoutBoxModelObject
* ancestor, LayoutRect& r, const PaintInvalidationState* paintInvalidationState)
const |
| 361 { | 365 { |
| 362 if (ancestor == this) | 366 if (ancestor == this) |
| 363 return; | 367 return; |
| 364 r.setY(r.y()); | 368 r.setY(r.y()); |
| 365 if ((!paintInvalidationState || !paintInvalidationState->canMapToContainer(a
ncestor)) && parent()) | 369 if ((!paintInvalidationState || !paintInvalidationState->canMapToContainer(a
ncestor)) && parent()) |
| 366 r.moveBy(-parentBox()->location()); // Rows are in the same coordinate s
pace, so don't add their offset in. | 370 r.moveBy(-parentBox()->location()); // Rows are in the same coordinate s
pace, so don't add their offset in. |
| 367 LayoutBlockFlow::mapToVisibleRectInAncestorSpace(ancestor, r, paintInvalidat
ionState); | 371 LayoutBlockFlow::mapToVisibleRectInAncestorSpace(ancestor, r, paintInvalidat
ionState); |
| 368 } | 372 } |
| 369 | 373 |
| 370 LayoutUnit LayoutTableCell::cellBaselinePosition() const | 374 int LayoutTableCell::cellBaselinePosition() const |
| 371 { | 375 { |
| 372 // <http://www.w3.org/TR/2007/CR-CSS21-20070719/tables.html#height-layout>:
The baseline of a cell is the baseline of | 376 // <http://www.w3.org/TR/2007/CR-CSS21-20070719/tables.html#height-layout>:
The baseline of a cell is the baseline of |
| 373 // the first in-flow line box in the cell, or the first in-flow table-row in
the cell, whichever comes first. If there | 377 // the first in-flow line box in the cell, or the first in-flow table-row in
the cell, whichever comes first. If there |
| 374 // is no such line box or table-row, the baseline is the bottom of content e
dge of the cell box. | 378 // is no such line box or table-row, the baseline is the bottom of content e
dge of the cell box. |
| 375 LayoutUnit firstLineBaseline = firstLineBoxBaseline(); | 379 int firstLineBaseline = firstLineBoxBaseline(); |
| 376 if (firstLineBaseline != -1) | 380 if (firstLineBaseline != -1) |
| 377 return firstLineBaseline; | 381 return firstLineBaseline; |
| 378 return borderBefore() + paddingBefore() + contentLogicalHeight(); | 382 return borderBefore() + paddingBefore() + contentLogicalHeight(); |
| 379 } | 383 } |
| 380 | 384 |
| 381 void LayoutTableCell::styleDidChange(StyleDifference diff, const ComputedStyle*
oldStyle) | 385 void LayoutTableCell::styleDidChange(StyleDifference diff, const ComputedStyle*
oldStyle) |
| 382 { | 386 { |
| 383 ASSERT(style()->display() == TABLE_CELL); | 387 ASSERT(style()->display() == TABLE_CELL); |
| 384 | 388 |
| 385 LayoutBlockFlow::styleDidChange(diff, oldStyle); | 389 LayoutBlockFlow::styleDidChange(diff, oldStyle); |
| (...skipping 579 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 965 TableCellPainter(*this).paintMask(paintInfo, paintOffset); | 969 TableCellPainter(*this).paintMask(paintInfo, paintOffset); |
| 966 } | 970 } |
| 967 | 971 |
| 968 bool LayoutTableCell::boxShadowShouldBeAppliedToBackground(BackgroundBleedAvoida
nce, const InlineFlowBox*) const | 972 bool LayoutTableCell::boxShadowShouldBeAppliedToBackground(BackgroundBleedAvoida
nce, const InlineFlowBox*) const |
| 969 { | 973 { |
| 970 return false; | 974 return false; |
| 971 } | 975 } |
| 972 | 976 |
| 973 void LayoutTableCell::scrollbarsChanged(bool horizontalScrollbarChanged, bool ve
rticalScrollbarChanged) | 977 void LayoutTableCell::scrollbarsChanged(bool horizontalScrollbarChanged, bool ve
rticalScrollbarChanged) |
| 974 { | 978 { |
| 975 LayoutUnit scrollbarHeight = scrollbarLogicalHeight(); | 979 int scrollbarHeight = scrollbarLogicalHeight(); |
| 976 if (!scrollbarHeight) | 980 if (!scrollbarHeight) |
| 977 return; // Not sure if we should be doing something when a scrollbar goe
s away or not. | 981 return; // Not sure if we should be doing something when a scrollbar goe
s away or not. |
| 978 | 982 |
| 979 // We only care if the scrollbar that affects our intrinsic padding has been
added. | 983 // We only care if the scrollbar that affects our intrinsic padding has been
added. |
| 980 if ((isHorizontalWritingMode() && !horizontalScrollbarChanged) | 984 if ((isHorizontalWritingMode() && !horizontalScrollbarChanged) |
| 981 || (!isHorizontalWritingMode() && !verticalScrollbarChanged)) | 985 || (!isHorizontalWritingMode() && !verticalScrollbarChanged)) |
| 982 return; | 986 return; |
| 983 | 987 |
| 984 // Shrink our intrinsic padding as much as possible to accommodate the scrol
lbar. | 988 // Shrink our intrinsic padding as much as possible to accommodate the scrol
lbar. |
| 985 if (style()->verticalAlign() == MIDDLE) { | 989 if (style()->verticalAlign() == MIDDLE) { |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1013 bool LayoutTableCell::backgroundIsKnownToBeOpaqueInRect(const LayoutRect& localR
ect) const | 1017 bool LayoutTableCell::backgroundIsKnownToBeOpaqueInRect(const LayoutRect& localR
ect) const |
| 1014 { | 1018 { |
| 1015 // If this object has layer, the area of collapsed borders should be transpa
rent | 1019 // If this object has layer, the area of collapsed borders should be transpa
rent |
| 1016 // to expose the collapsed borders painted on the underlying layer. | 1020 // to expose the collapsed borders painted on the underlying layer. |
| 1017 if (hasLayer() && table()->collapseBorders()) | 1021 if (hasLayer() && table()->collapseBorders()) |
| 1018 return false; | 1022 return false; |
| 1019 return LayoutBlockFlow::backgroundIsKnownToBeOpaqueInRect(localRect); | 1023 return LayoutBlockFlow::backgroundIsKnownToBeOpaqueInRect(localRect); |
| 1020 } | 1024 } |
| 1021 | 1025 |
| 1022 } // namespace blink | 1026 } // namespace blink |
| OLD | NEW |