| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 20 matching lines...) Expand all Loading... |
| 31 #include "config.h" | 31 #include "config.h" |
| 32 #include "core/rendering/RenderBlockFlow.h" | 32 #include "core/rendering/RenderBlockFlow.h" |
| 33 | 33 |
| 34 #include "core/accessibility/AXObjectCache.h" | 34 #include "core/accessibility/AXObjectCache.h" |
| 35 #include "core/frame/FrameView.h" | 35 #include "core/frame/FrameView.h" |
| 36 #include "core/rendering/FastTextAutosizer.h" | 36 #include "core/rendering/FastTextAutosizer.h" |
| 37 #include "core/rendering/HitTestLocation.h" | 37 #include "core/rendering/HitTestLocation.h" |
| 38 #include "core/rendering/LayoutRectRecorder.h" | 38 #include "core/rendering/LayoutRectRecorder.h" |
| 39 #include "core/rendering/LayoutRepainter.h" | 39 #include "core/rendering/LayoutRepainter.h" |
| 40 #include "core/rendering/RenderLayer.h" | 40 #include "core/rendering/RenderLayer.h" |
| 41 #include "core/rendering/RenderMultiColumnBlock.h" |
| 41 #include "core/rendering/RenderNamedFlowFragment.h" | 42 #include "core/rendering/RenderNamedFlowFragment.h" |
| 42 #include "core/rendering/RenderNamedFlowThread.h" | 43 #include "core/rendering/RenderNamedFlowThread.h" |
| 43 #include "core/rendering/RenderText.h" | 44 #include "core/rendering/RenderText.h" |
| 44 #include "core/rendering/RenderView.h" | 45 #include "core/rendering/RenderView.h" |
| 45 #include "core/rendering/line/LineWidth.h" | 46 #include "core/rendering/line/LineWidth.h" |
| 46 #include "core/rendering/svg/SVGTextRunRenderingContext.h" | 47 #include "core/rendering/svg/SVGTextRunRenderingContext.h" |
| 47 #include "platform/text/BidiTextRun.h" | 48 #include "platform/text/BidiTextRun.h" |
| 48 | 49 |
| 49 using namespace std; | 50 using namespace std; |
| 50 | 51 |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 212 if (!hasSpecifiedPageLogicalHeight && !pageLogicalHeight) | 213 if (!hasSpecifiedPageLogicalHeight && !pageLogicalHeight) |
| 213 colInfo->clearForcedBreaks(); | 214 colInfo->clearForcedBreaks(); |
| 214 | 215 |
| 215 colInfo->setPaginationUnit(paginationUnit()); | 216 colInfo->setPaginationUnit(paginationUnit()); |
| 216 } else if (isRenderFlowThread()) { | 217 } else if (isRenderFlowThread()) { |
| 217 pageLogicalHeight = 1; // This is just a hack to always make sure we hav
e a page logical height. | 218 pageLogicalHeight = 1; // This is just a hack to always make sure we hav
e a page logical height. |
| 218 pageLogicalHeightChanged = toRenderFlowThread(this)->pageLogicalSizeChan
ged(); | 219 pageLogicalHeightChanged = toRenderFlowThread(this)->pageLogicalSizeChan
ged(); |
| 219 } | 220 } |
| 220 } | 221 } |
| 221 | 222 |
| 222 bool RenderBlockFlow::relayoutForPagination(bool hasSpecifiedPageLogicalHeight,
LayoutUnit pageLogicalHeight, LayoutStateMaintainer& statePusher) | 223 bool RenderBlockFlow::shouldRelayoutForPagination(LayoutUnit& pageLogicalHeight,
LayoutUnit layoutOverflowLogicalBottom) const |
| 223 { | 224 { |
| 224 if (!hasColumns()) | |
| 225 return false; | |
| 226 | |
| 227 OwnPtr<RenderOverflow> savedOverflow = m_overflow.release(); | |
| 228 if (childrenInline()) | |
| 229 addOverflowFromInlineChildren(); | |
| 230 else | |
| 231 addOverflowFromBlockChildren(); | |
| 232 LayoutUnit layoutOverflowLogicalBottom = (isHorizontalWritingMode() ? layout
OverflowRect().maxY() : layoutOverflowRect().maxX()) - borderBefore() - paddingB
efore(); | |
| 233 | |
| 234 // FIXME: We don't balance properly at all in the presence of forced page br
eaks. We need to understand what | 225 // FIXME: We don't balance properly at all in the presence of forced page br
eaks. We need to understand what |
| 235 // the distance between forced page breaks is so that we can avoid making th
e minimum column height too tall. | 226 // the distance between forced page breaks is so that we can avoid making th
e minimum column height too tall. |
| 236 ColumnInfo* colInfo = columnInfo(); | 227 ColumnInfo* colInfo = columnInfo(); |
| 237 if (!hasSpecifiedPageLogicalHeight) { | 228 LayoutUnit columnHeight = pageLogicalHeight; |
| 238 LayoutUnit columnHeight = pageLogicalHeight; | 229 const int minColumnCount = colInfo->forcedBreaks() + 1; |
| 239 int minColumnCount = colInfo->forcedBreaks() + 1; | 230 const int desiredColumnCount = colInfo->desiredColumnCount(); |
| 240 int desiredColumnCount = colInfo->desiredColumnCount(); | 231 if (minColumnCount >= desiredColumnCount) { |
| 241 if (minColumnCount >= desiredColumnCount) { | 232 // The forced page breaks are in control of the balancing. Just set the
column height to the |
| 242 // The forced page breaks are in control of the balancing. Just set
the column height to the | 233 // maximum page break distance. |
| 243 // maximum page break distance. | 234 if (!pageLogicalHeight) { |
| 244 if (!pageLogicalHeight) { | 235 LayoutUnit distanceBetweenBreaks = max<LayoutUnit>(colInfo->maximumD
istanceBetweenForcedBreaks(), |
| 245 LayoutUnit distanceBetweenBreaks = max<LayoutUnit>(colInfo->maxi
mumDistanceBetweenForcedBreaks(), | 236 view()->layoutState()->pageLogicalOffset(this, borderBefore() +
paddingBefore() + layoutOverflowLogicalBottom) - colInfo->forcedBreakOffset()); |
| 246 view()->layoutState()->pageLogicalOffset(this, borderBefore(
) + paddingBefore() + layoutOverflowLogicalBottom) - colInfo->forcedBreakOffset(
)); | 237 columnHeight = max(colInfo->minimumColumnHeight(), distanceBetweenBr
eaks); |
| 247 columnHeight = max(colInfo->minimumColumnHeight(), distanceBetwe
enBreaks); | |
| 248 } | |
| 249 } else if (layoutOverflowLogicalBottom > boundedMultiply(pageLogicalHeig
ht, desiredColumnCount)) { | |
| 250 // Now that we know the intrinsic height of the columns, we have to
rebalance them. | |
| 251 columnHeight = max<LayoutUnit>(colInfo->minimumColumnHeight(), ceilf
((float)layoutOverflowLogicalBottom / desiredColumnCount)); | |
| 252 } | 238 } |
| 253 | 239 } else if (layoutOverflowLogicalBottom > boundedMultiply(pageLogicalHeight,
desiredColumnCount)) { |
| 254 if (columnHeight && columnHeight != pageLogicalHeight) { | 240 // Now that we know the intrinsic height of the columns, we have to reba
lance them. |
| 255 statePusher.pop(); | 241 columnHeight = max<LayoutUnit>(colInfo->minimumColumnHeight(), ceilf((fl
oat)layoutOverflowLogicalBottom / desiredColumnCount)); |
| 256 setEverHadLayout(true); | |
| 257 layoutBlockFlow(false, columnHeight); | |
| 258 return true; | |
| 259 } | |
| 260 } | 242 } |
| 261 | 243 |
| 262 if (pageLogicalHeight) | 244 if (columnHeight && columnHeight != pageLogicalHeight) { |
| 263 colInfo->setColumnCountAndHeight(ceilf((float)layoutOverflowLogicalBotto
m / pageLogicalHeight), pageLogicalHeight); | 245 pageLogicalHeight = columnHeight; |
| 264 | 246 return true; |
| 265 if (columnCount(colInfo)) { | |
| 266 setLogicalHeight(borderBefore() + paddingBefore() + colInfo->columnHeigh
t() + borderAfter() + paddingAfter() + scrollbarLogicalHeight()); | |
| 267 m_overflow.clear(); | |
| 268 } else { | |
| 269 m_overflow = savedOverflow.release(); | |
| 270 } | 247 } |
| 271 | 248 |
| 272 return false; | 249 return false; |
| 273 } | 250 } |
| 274 | 251 |
| 252 void RenderBlockFlow::setColumnCountAndHeight(unsigned count, LayoutUnit pageLog
icalHeight) |
| 253 { |
| 254 ColumnInfo* colInfo = columnInfo(); |
| 255 if (pageLogicalHeight) |
| 256 colInfo->setColumnCountAndHeight(count, pageLogicalHeight); |
| 257 |
| 258 if (columnCount(colInfo)) { |
| 259 setLogicalHeight(borderBefore() + paddingBefore() + colInfo->columnHeigh
t() + borderAfter() + paddingAfter() + scrollbarLogicalHeight()); |
| 260 m_overflow.clear(); |
| 261 } |
| 262 } |
| 263 |
| 275 bool RenderBlockFlow::isSelfCollapsingBlock() const | 264 bool RenderBlockFlow::isSelfCollapsingBlock() const |
| 276 { | 265 { |
| 277 m_hasOnlySelfCollapsingChildren = RenderBlock::isSelfCollapsingBlock(); | 266 m_hasOnlySelfCollapsingChildren = RenderBlock::isSelfCollapsingBlock(); |
| 278 return m_hasOnlySelfCollapsingChildren; | 267 return m_hasOnlySelfCollapsingChildren; |
| 279 } | 268 } |
| 280 | 269 |
| 281 void RenderBlockFlow::layoutBlock(bool relayoutChildren) | 270 void RenderBlockFlow::layoutBlock(bool relayoutChildren) |
| 282 { | 271 { |
| 283 layoutBlockFlow(relayoutChildren); | |
| 284 } | |
| 285 | |
| 286 inline void RenderBlockFlow::layoutBlockFlow(bool relayoutChildren, LayoutUnit p
ageLogicalHeight) | |
| 287 { | |
| 288 ASSERT(needsLayout()); | 272 ASSERT(needsLayout()); |
| 289 ASSERT(isInlineBlockOrInlineTable() || !isInline()); | 273 ASSERT(isInlineBlockOrInlineTable() || !isInline()); |
| 290 | 274 |
| 291 // If we are self-collapsing with self-collapsing descendants this will get
set to save us burrowing through our | 275 // If we are self-collapsing with self-collapsing descendants this will get
set to save us burrowing through our |
| 292 // descendants every time in |isSelfCollapsingBlock|. We reset it here so th
at |isSelfCollapsingBlock| attempts to burrow | 276 // descendants every time in |isSelfCollapsingBlock|. We reset it here so th
at |isSelfCollapsingBlock| attempts to burrow |
| 293 // at least once and so that it always gives a reliable result reflecting th
e latest layout. | 277 // at least once and so that it always gives a reliable result reflecting th
e latest layout. |
| 294 m_hasOnlySelfCollapsingChildren = false; | 278 m_hasOnlySelfCollapsingChildren = false; |
| 295 | 279 |
| 296 if (!relayoutChildren && simplifiedLayout()) | 280 if (!relayoutChildren && simplifiedLayout()) |
| 297 return; | 281 return; |
| 298 | 282 |
| 283 SubtreeLayoutScope layoutScope(this); |
| 284 |
| 285 // Multiple passes might be required for column and pagination based layout |
| 286 // In the case of the old column code the number of passes will only be two |
| 287 // however, in the newer column code the number of passes could equal the |
| 288 // number of columns. |
| 289 bool done = false; |
| 290 LayoutUnit pageLogicalHeight = 0; |
| 291 while (!done) |
| 292 done = layoutBlockFlow(relayoutChildren, pageLogicalHeight, layoutScope)
; |
| 293 } |
| 294 |
| 295 inline bool RenderBlockFlow::layoutBlockFlow(bool relayoutChildren, LayoutUnit &
pageLogicalHeight, SubtreeLayoutScope& layoutScope) |
| 296 { |
| 299 LayoutRepainter repainter(*this, checkForRepaintDuringLayout()); | 297 LayoutRepainter repainter(*this, checkForRepaintDuringLayout()); |
| 300 | 298 |
| 301 if (updateLogicalWidthAndColumnWidth()) | 299 if (updateLogicalWidthAndColumnWidth()) |
| 302 relayoutChildren = true; | 300 relayoutChildren = true; |
| 303 | 301 |
| 304 rebuildFloatsFromIntruding(); | 302 rebuildFloatsFromIntruding(); |
| 305 | 303 |
| 306 bool pageLogicalHeightChanged = false; | 304 bool pageLogicalHeightChanged = false; |
| 307 bool hasSpecifiedPageLogicalHeight = false; | 305 bool hasSpecifiedPageLogicalHeight = false; |
| 308 checkForPaginationLogicalHeightChange(pageLogicalHeight, pageLogicalHeightCh
anged, hasSpecifiedPageLogicalHeight); | 306 checkForPaginationLogicalHeightChange(pageLogicalHeight, pageLogicalHeightCh
anged, hasSpecifiedPageLogicalHeight); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 329 // | 327 // |
| 330 // Start out by setting our margin values to our current margins. Table cell
s have | 328 // Start out by setting our margin values to our current margins. Table cell
s have |
| 331 // no margins, so we don't fill in the values for table cells. | 329 // no margins, so we don't fill in the values for table cells. |
| 332 if (!isTableCell()) { | 330 if (!isTableCell()) { |
| 333 initMaxMarginValues(); | 331 initMaxMarginValues(); |
| 334 setHasMarginBeforeQuirk(style()->hasMarginBeforeQuirk()); | 332 setHasMarginBeforeQuirk(style()->hasMarginBeforeQuirk()); |
| 335 setHasMarginAfterQuirk(style()->hasMarginAfterQuirk()); | 333 setHasMarginAfterQuirk(style()->hasMarginAfterQuirk()); |
| 336 setPaginationStrut(0); | 334 setPaginationStrut(0); |
| 337 } | 335 } |
| 338 | 336 |
| 339 SubtreeLayoutScope layoutScope(this); | |
| 340 | |
| 341 LayoutUnit beforeEdge = borderBefore() + paddingBefore(); | 337 LayoutUnit beforeEdge = borderBefore() + paddingBefore(); |
| 342 LayoutUnit afterEdge = borderAfter() + paddingAfter() + scrollbarLogicalHeig
ht(); | 338 LayoutUnit afterEdge = borderAfter() + paddingAfter() + scrollbarLogicalHeig
ht(); |
| 343 LayoutUnit previousHeight = logicalHeight(); | 339 LayoutUnit previousHeight = logicalHeight(); |
| 344 setLogicalHeight(beforeEdge); | 340 setLogicalHeight(beforeEdge); |
| 345 | 341 |
| 346 m_repaintLogicalTop = 0; | 342 m_repaintLogicalTop = 0; |
| 347 m_repaintLogicalBottom = 0; | 343 m_repaintLogicalBottom = 0; |
| 348 LayoutUnit maxFloatLogicalBottom = 0; | 344 LayoutUnit maxFloatLogicalBottom = 0; |
| 349 if (!firstChild() && !isAnonymousBlock()) | 345 if (!firstChild() && !isAnonymousBlock()) |
| 350 setChildrenInline(true); | 346 setChildrenInline(true); |
| 351 | 347 |
| 352 FastTextAutosizer* textAutosizer = document().fastTextAutosizer(); | 348 FastTextAutosizer* textAutosizer = document().fastTextAutosizer(); |
| 353 if (textAutosizer) | 349 if (textAutosizer) |
| 354 textAutosizer->beginLayout(this); | 350 textAutosizer->beginLayout(this); |
| 355 | 351 |
| 356 if (childrenInline()) | 352 if (childrenInline()) |
| 357 layoutInlineChildren(relayoutChildren, m_repaintLogicalTop, m_repaintLog
icalBottom, afterEdge); | 353 layoutInlineChildren(relayoutChildren, m_repaintLogicalTop, m_repaintLog
icalBottom, afterEdge); |
| 358 else | 354 else |
| 359 layoutBlockChildren(relayoutChildren, maxFloatLogicalBottom, layoutScope
, beforeEdge, afterEdge); | 355 layoutBlockChildren(relayoutChildren, maxFloatLogicalBottom, layoutScope
, beforeEdge, afterEdge); |
| 360 | 356 |
| 361 if (textAutosizer) | 357 if (textAutosizer) |
| 362 textAutosizer->endLayout(this); | 358 textAutosizer->endLayout(this); |
| 363 | 359 |
| 364 if (frameView()->partialLayout().isStopping()) { | 360 if (frameView()->partialLayout().isStopping()) { |
| 365 statePusher.pop(); | 361 statePusher.pop(); |
| 366 return; | 362 return true; |
| 367 } | 363 } |
| 368 | 364 |
| 369 // Expand our intrinsic height to encompass floats. | 365 // Expand our intrinsic height to encompass floats. |
| 370 if (lowestFloatLogicalBottom() > (logicalHeight() - afterEdge) && createsBlo
ckFormattingContext()) | 366 if (lowestFloatLogicalBottom() > (logicalHeight() - afterEdge) && createsBlo
ckFormattingContext()) |
| 371 setLogicalHeight(lowestFloatLogicalBottom() + afterEdge); | 367 setLogicalHeight(lowestFloatLogicalBottom() + afterEdge); |
| 372 | 368 |
| 373 if (relayoutForPagination(hasSpecifiedPageLogicalHeight, pageLogicalHeight,
statePusher) || relayoutToAvoidWidows(statePusher)) { | 369 if (isRenderMultiColumnBlock()) { |
| 374 ASSERT(!shouldBreakAtLineToAvoidWidow()); | 370 if (toRenderMultiColumnBlock(this)->shouldRelayoutMultiColumnBlock()) { |
| 375 return; | 371 setChildNeedsLayout(MarkOnlyThis); |
| 372 statePusher.pop(); |
| 373 return false; |
| 374 } |
| 375 } else if (hasColumns()) { |
| 376 OwnPtr<RenderOverflow> savedOverflow = m_overflow.release(); |
| 377 if (childrenInline()) |
| 378 addOverflowFromInlineChildren(); |
| 379 else |
| 380 addOverflowFromBlockChildren(); |
| 381 LayoutUnit layoutOverflowLogicalBottom = (isHorizontalWritingMode() ? la
youtOverflowRect().maxY() : layoutOverflowRect().maxX()) - borderBefore() - padd
ingBefore(); |
| 382 m_overflow = savedOverflow.release(); |
| 383 |
| 384 if (!hasSpecifiedPageLogicalHeight && shouldRelayoutForPagination(pageLo
gicalHeight, layoutOverflowLogicalBottom)) { |
| 385 statePusher.pop(); |
| 386 setEverHadLayout(true); |
| 387 return false; |
| 388 } |
| 389 |
| 390 setColumnCountAndHeight(ceilf((float)layoutOverflowLogicalBottom / pageL
ogicalHeight), pageLogicalHeight); |
| 391 } |
| 392 |
| 393 if (shouldBreakAtLineToAvoidWidow()) { |
| 394 statePusher.pop(); |
| 395 setEverHadLayout(true); |
| 396 return false; |
| 376 } | 397 } |
| 377 | 398 |
| 378 // Calculate our new height. | 399 // Calculate our new height. |
| 379 LayoutUnit oldHeight = logicalHeight(); | 400 LayoutUnit oldHeight = logicalHeight(); |
| 380 LayoutUnit oldClientAfterEdge = clientLogicalBottom(); | 401 LayoutUnit oldClientAfterEdge = clientLogicalBottom(); |
| 381 | 402 |
| 382 // Before updating the final size of the flow thread make sure a forced brea
k is applied after the content. | 403 // Before updating the final size of the flow thread make sure a forced brea
k is applied after the content. |
| 383 // This ensures the size information is correctly computed for the last auto
-height region receiving content. | 404 // This ensures the size information is correctly computed for the last auto
-height region receiving content. |
| 384 if (isRenderFlowThread()) | 405 if (isRenderFlowThread()) |
| 385 toRenderFlowThread(this)->applyBreakAfterContent(oldClientAfterEdge); | 406 toRenderFlowThread(this)->applyBreakAfterContent(oldClientAfterEdge); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 408 updateRegionsAndShapesAfterChildLayout(flowThread, heightChanged); | 429 updateRegionsAndShapesAfterChildLayout(flowThread, heightChanged); |
| 409 | 430 |
| 410 // Add overflow from children (unless we're multi-column, since in that case
all our child overflow is clipped anyway). | 431 // Add overflow from children (unless we're multi-column, since in that case
all our child overflow is clipped anyway). |
| 411 computeOverflow(oldClientAfterEdge); | 432 computeOverflow(oldClientAfterEdge); |
| 412 | 433 |
| 413 statePusher.pop(); | 434 statePusher.pop(); |
| 414 | 435 |
| 415 fitBorderToLinesIfNeeded(); | 436 fitBorderToLinesIfNeeded(); |
| 416 | 437 |
| 417 if (frameView()->partialLayout().isStopping()) | 438 if (frameView()->partialLayout().isStopping()) |
| 418 return; | 439 return true; |
| 419 | 440 |
| 420 if (renderView->layoutState()->m_pageLogicalHeight) | 441 if (renderView->layoutState()->m_pageLogicalHeight) |
| 421 setPageLogicalOffset(renderView->layoutState()->pageLogicalOffset(this,
logicalTop())); | 442 setPageLogicalOffset(renderView->layoutState()->pageLogicalOffset(this,
logicalTop())); |
| 422 | 443 |
| 423 updateLayerTransform(); | 444 updateLayerTransform(); |
| 424 | 445 |
| 425 // Update our scroll information if we're overflow:auto/scroll/hidden now th
at we know if | 446 // Update our scroll information if we're overflow:auto/scroll/hidden now th
at we know if |
| 426 // we overflow or not. | 447 // we overflow or not. |
| 427 updateScrollInfoAfterLayout(); | 448 updateScrollInfoAfterLayout(); |
| 428 | 449 |
| 429 // Repaint with our new bounds if they are different from our old bounds. | 450 // Repaint with our new bounds if they are different from our old bounds. |
| 430 bool didFullRepaint = repainter.repaintAfterLayout(); | 451 bool didFullRepaint = repainter.repaintAfterLayout(); |
| 431 if (!didFullRepaint && m_repaintLogicalTop != m_repaintLogicalBottom && (sty
le()->visibility() == VISIBLE || enclosingLayer()->hasVisibleContent())) { | 452 if (!didFullRepaint && m_repaintLogicalTop != m_repaintLogicalBottom && (sty
le()->visibility() == VISIBLE || enclosingLayer()->hasVisibleContent())) { |
| 432 if (RuntimeEnabledFeatures::repaintAfterLayoutEnabled()) | 453 if (RuntimeEnabledFeatures::repaintAfterLayoutEnabled()) |
| 433 setShouldRepaintOverflowIfNeeded(true); | 454 setShouldRepaintOverflowIfNeeded(true); |
| 434 else | 455 else |
| 435 repaintOverflow(); | 456 repaintOverflow(); |
| 436 } | 457 } |
| 437 | 458 |
| 438 clearNeedsLayout(); | 459 clearNeedsLayout(); |
| 460 return true; |
| 439 } | 461 } |
| 440 | 462 |
| 441 void RenderBlockFlow::layoutBlockChild(RenderBox* child, MarginInfo& marginInfo,
LayoutUnit& previousFloatLogicalBottom, LayoutUnit& maxFloatLogicalBottom) | 463 void RenderBlockFlow::layoutBlockChild(RenderBox* child, MarginInfo& marginInfo,
LayoutUnit& previousFloatLogicalBottom, LayoutUnit& maxFloatLogicalBottom) |
| 442 { | 464 { |
| 443 LayoutUnit oldPosMarginBefore = maxPositiveMarginBefore(); | 465 LayoutUnit oldPosMarginBefore = maxPositiveMarginBefore(); |
| 444 LayoutUnit oldNegMarginBefore = maxNegativeMarginBefore(); | 466 LayoutUnit oldNegMarginBefore = maxNegativeMarginBefore(); |
| 445 | 467 |
| 446 // The child is a normal flow object. Compute the margins we will use for co
llapsing now. | 468 // The child is a normal flow object. Compute the margins we will use for co
llapsing now. |
| 447 child->computeAndSetBlockDirectionMargins(this); | 469 child->computeAndSetBlockDirectionMargins(this); |
| 448 | 470 |
| (...skipping 2405 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2854 RenderBlockFlow::RenderBlockFlowRareData& RenderBlockFlow::ensureRareData() | 2876 RenderBlockFlow::RenderBlockFlowRareData& RenderBlockFlow::ensureRareData() |
| 2855 { | 2877 { |
| 2856 if (m_rareData) | 2878 if (m_rareData) |
| 2857 return *m_rareData; | 2879 return *m_rareData; |
| 2858 | 2880 |
| 2859 m_rareData = adoptPtr(new RenderBlockFlowRareData(this)); | 2881 m_rareData = adoptPtr(new RenderBlockFlowRareData(this)); |
| 2860 return *m_rareData; | 2882 return *m_rareData; |
| 2861 } | 2883 } |
| 2862 | 2884 |
| 2863 } // namespace WebCore | 2885 } // namespace WebCore |
| OLD | NEW |