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

Side by Side Diff: Source/core/rendering/RenderBlockFlow.cpp

Issue 399423006: Move widow-avoiding code from RenderBlock down to RenderBlockFlow. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 5 months 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/rendering/RenderBlockFlow.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 ColumnInfo* colInfo = columnInfo(); 273 ColumnInfo* colInfo = columnInfo();
274 if (pageLogicalHeight) 274 if (pageLogicalHeight)
275 colInfo->setColumnCountAndHeight(count, pageLogicalHeight); 275 colInfo->setColumnCountAndHeight(count, pageLogicalHeight);
276 276
277 if (columnCount(colInfo)) { 277 if (columnCount(colInfo)) {
278 setLogicalHeight(borderBefore() + paddingBefore() + colInfo->columnHeigh t() + borderAfter() + paddingAfter() + scrollbarLogicalHeight()); 278 setLogicalHeight(borderBefore() + paddingBefore() + colInfo->columnHeigh t() + borderAfter() + paddingAfter() + scrollbarLogicalHeight());
279 m_overflow.clear(); 279 m_overflow.clear();
280 } 280 }
281 } 281 }
282 282
283 void RenderBlockFlow::setBreakAtLineToAvoidWidow(int lineToBreak)
284 {
285 ASSERT(lineToBreak >= 0);
286 ensureRareData();
287 ASSERT(!m_rareData->m_didBreakAtLineToAvoidWidow);
288 m_rareData->m_lineBreakToAvoidWidow = lineToBreak;
289 }
290
291 void RenderBlockFlow::setDidBreakAtLineToAvoidWidow()
292 {
293 ASSERT(!shouldBreakAtLineToAvoidWidow());
294
295 // This function should be called only after a break was applied to avoid wi dows
296 // so assert |m_rareData| exists.
297 ASSERT(m_rareData);
298
299 m_rareData->m_didBreakAtLineToAvoidWidow = true;
300 }
301
302 void RenderBlockFlow::clearDidBreakAtLineToAvoidWidow()
303 {
304 if (!m_rareData)
305 return;
306
307 m_rareData->m_didBreakAtLineToAvoidWidow = false;
308 }
309
310 void RenderBlockFlow::clearShouldBreakAtLineToAvoidWidow() const
311 {
312 ASSERT(shouldBreakAtLineToAvoidWidow());
313 if (!m_rareData)
314 return;
315
316 m_rareData->m_lineBreakToAvoidWidow = -1;
317 }
318
283 bool RenderBlockFlow::isSelfCollapsingBlock() const 319 bool RenderBlockFlow::isSelfCollapsingBlock() const
284 { 320 {
285 m_hasOnlySelfCollapsingChildren = RenderBlock::isSelfCollapsingBlock(); 321 m_hasOnlySelfCollapsingChildren = RenderBlock::isSelfCollapsingBlock();
286 return m_hasOnlySelfCollapsingChildren; 322 return m_hasOnlySelfCollapsingChildren;
287 } 323 }
288 324
289 void RenderBlockFlow::layoutBlock(bool relayoutChildren) 325 void RenderBlockFlow::layoutBlock(bool relayoutChildren)
290 { 326 {
291 ASSERT(needsLayout()); 327 ASSERT(needsLayout());
292 ASSERT(isInlineBlockOrInlineTable() || !isInline()); 328 ASSERT(isInlineBlockOrInlineTable() || !isInline());
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
550 if (paginated) { 586 if (paginated) {
551 logicalTopAfterClear = adjustBlockChildForPagination(logicalTopAfterClea r, estimateWithoutPagination, child, 587 logicalTopAfterClear = adjustBlockChildForPagination(logicalTopAfterClea r, estimateWithoutPagination, child,
552 atBeforeSideOfBlock && logicalTopBeforeClear == logicalTopAfterClear ); 588 atBeforeSideOfBlock && logicalTopBeforeClear == logicalTopAfterClear );
553 } 589 }
554 590
555 setLogicalTopForChild(child, logicalTopAfterClear); 591 setLogicalTopForChild(child, logicalTopAfterClear);
556 592
557 // Now we have a final top position. See if it really does end up being diff erent from our estimate. 593 // Now we have a final top position. See if it really does end up being diff erent from our estimate.
558 // clearFloatsIfNeeded can also mark the child as needing a layout even thou gh we didn't move. This happens 594 // clearFloatsIfNeeded can also mark the child as needing a layout even thou gh we didn't move. This happens
559 // when collapseMargins dynamically adds overhanging floats because of a chi ld with negative margins. 595 // when collapseMargins dynamically adds overhanging floats because of a chi ld with negative margins.
560 if (logicalTopAfterClear != logicalTopEstimate || child->needsLayout() || (p aginated && childRenderBlock && childRenderBlock->shouldBreakAtLineToAvoidWidow( ))) { 596 if (logicalTopAfterClear != logicalTopEstimate || child->needsLayout() || (p aginated && childRenderBlockFlow && childRenderBlockFlow->shouldBreakAtLineToAvo idWidow())) {
561 SubtreeLayoutScope layoutScope(*child); 597 SubtreeLayoutScope layoutScope(*child);
562 if (child->shrinkToAvoidFloats()) { 598 if (child->shrinkToAvoidFloats()) {
563 // The child's width depends on the line width. 599 // The child's width depends on the line width.
564 // When the child shifts to clear an item, its width can 600 // When the child shifts to clear an item, its width can
565 // change (because it has more available line width). 601 // change (because it has more available line width).
566 // So go ahead and mark the item as dirty. 602 // So go ahead and mark the item as dirty.
567 layoutScope.setChildNeedsLayout(child); 603 layoutScope.setChildNeedsLayout(child);
568 } 604 }
569 605
570 if (childRenderBlock) { 606 if (childRenderBlock) {
(...skipping 2329 matching lines...) Expand 10 before | Expand all | Expand 10 after
2900 RenderBlockFlow::RenderBlockFlowRareData& RenderBlockFlow::ensureRareData() 2936 RenderBlockFlow::RenderBlockFlowRareData& RenderBlockFlow::ensureRareData()
2901 { 2937 {
2902 if (m_rareData) 2938 if (m_rareData)
2903 return *m_rareData; 2939 return *m_rareData;
2904 2940
2905 m_rareData = adoptPtr(new RenderBlockFlowRareData(this)); 2941 m_rareData = adoptPtr(new RenderBlockFlowRareData(this));
2906 return *m_rareData; 2942 return *m_rareData;
2907 } 2943 }
2908 2944
2909 } // namespace WebCore 2945 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/rendering/RenderBlockFlow.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698