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

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

Issue 883293004: [New Multicolumn] Preparatory work for nested multicol support. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Place the new files in ../layout/ , since that's where they'll end up soon anyway. Created 5 years, 10 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2012 Apple Inc. All rights reserved. 2 * Copyright (C) 2012 Apple 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 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 if (!m_needsColumnHeightsRecalculation) 269 if (!m_needsColumnHeightsRecalculation)
270 return false; 270 return false;
271 271
272 // Column heights may change here because of balancing. We may have to do mu ltiple layout 272 // Column heights may change here because of balancing. We may have to do mu ltiple layout
273 // passes, depending on how the contents is fitted to the changed column hei ghts. In most 273 // passes, depending on how the contents is fitted to the changed column hei ghts. In most
274 // cases, laying out again twice or even just once will suffice. Sometimes w e need more 274 // cases, laying out again twice or even just once will suffice. Sometimes w e need more
275 // passes than that, though, but the number of retries should not exceed the number of 275 // passes than that, though, but the number of retries should not exceed the number of
276 // columns, unless we have a bug. 276 // columns, unless we have a bug.
277 bool needsRelayout = false; 277 bool needsRelayout = false;
278 for (RenderMultiColumnSet* multicolSet = firstMultiColumnSet(); multicolSet; multicolSet = multicolSet->nextSiblingMultiColumnSet()) { 278 for (RenderMultiColumnSet* multicolSet = firstMultiColumnSet(); multicolSet; multicolSet = multicolSet->nextSiblingMultiColumnSet()) {
279 needsRelayout |= multicolSet->recalculateColumnHeight(m_inBalancingPass ? RenderMultiColumnSet::StretchBySpaceShortage : RenderMultiColumnSet::GuessFrom FlowThreadPortion); 279 needsRelayout |= multicolSet->recalculateColumnHeight(m_inBalancingPass ? StretchBySpaceShortage : GuessFromFlowThreadPortion);
280 if (needsRelayout) { 280 if (needsRelayout) {
281 // Once a column set gets a new column height, that column set and a ll successive column 281 // Once a column set gets a new column height, that column set and a ll successive column
282 // sets need to be laid out over again, since their logical top will be affected by 282 // sets need to be laid out over again, since their logical top will be affected by
283 // this, and therefore their column heights may change as well, at l east if the multicol 283 // this, and therefore their column heights may change as well, at l east if the multicol
284 // height is constrained. 284 // height is constrained.
285 multicolSet->setChildNeedsLayout(MarkOnlyThis); 285 multicolSet->setChildNeedsLayout(MarkOnlyThis);
286 } 286 }
287 } 287 }
288 288
289 if (needsRelayout) 289 if (needsRelayout)
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after
640 void RenderMultiColumnFlowThread::setPageBreak(LayoutUnit offset, LayoutUnit spa ceShortage) 640 void RenderMultiColumnFlowThread::setPageBreak(LayoutUnit offset, LayoutUnit spa ceShortage)
641 { 641 {
642 // Only positive values are interesting (and allowed) here. Zero space short age may be reported 642 // Only positive values are interesting (and allowed) here. Zero space short age may be reported
643 // when we're at the top of a column and the element has zero height. Ignore this, and also 643 // when we're at the top of a column and the element has zero height. Ignore this, and also
644 // ignore any negative values, which may occur when we set an early break in order to honor 644 // ignore any negative values, which may occur when we set an early break in order to honor
645 // widows in the next column. 645 // widows in the next column.
646 if (spaceShortage <= 0) 646 if (spaceShortage <= 0)
647 return; 647 return;
648 648
649 if (RenderMultiColumnSet* multicolSet = columnSetAtBlockOffset(offset)) 649 if (RenderMultiColumnSet* multicolSet = columnSetAtBlockOffset(offset))
650 multicolSet->recordSpaceShortage(spaceShortage); 650 multicolSet->recordSpaceShortage(offset, spaceShortage);
651 } 651 }
652 652
653 void RenderMultiColumnFlowThread::updateMinimumPageHeight(LayoutUnit offset, Lay outUnit minHeight) 653 void RenderMultiColumnFlowThread::updateMinimumPageHeight(LayoutUnit offset, Lay outUnit minHeight)
654 { 654 {
655 if (RenderMultiColumnSet* multicolSet = columnSetAtBlockOffset(offset)) 655 if (RenderMultiColumnSet* multicolSet = columnSetAtBlockOffset(offset))
656 multicolSet->updateMinimumColumnHeight(minHeight); 656 multicolSet->updateMinimumColumnHeight(offset, minHeight);
657 } 657 }
658 658
659 bool RenderMultiColumnFlowThread::addForcedRegionBreak(LayoutUnit offset, Layout Object* /*breakChild*/, bool /*isBefore*/, LayoutUnit* offsetBreakAdjustment) 659 bool RenderMultiColumnFlowThread::addForcedRegionBreak(LayoutUnit offset, Layout Object* /*breakChild*/, bool /*isBefore*/, LayoutUnit* offsetBreakAdjustment)
660 { 660 {
661 if (RenderMultiColumnSet* multicolSet = columnSetAtBlockOffset(offset)) { 661 if (RenderMultiColumnSet* multicolSet = columnSetAtBlockOffset(offset)) {
662 multicolSet->addContentRun(offset); 662 multicolSet->addContentRun(offset);
663 if (offsetBreakAdjustment) 663 if (offsetBreakAdjustment)
664 *offsetBreakAdjustment = pageLogicalHeightForOffset(offset) ? pageRe mainingLogicalHeightForOffset(offset, IncludePageBoundary) : LayoutUnit(); 664 *offsetBreakAdjustment = pageLogicalHeightForOffset(offset) ? pageRe mainingLogicalHeightForOffset(offset, IncludePageBoundary) : LayoutUnit();
665 return true; 665 return true;
666 } 666 }
667 return false; 667 return false;
668 } 668 }
669 669
670 bool RenderMultiColumnFlowThread::isPageLogicalHeightKnown() const 670 bool RenderMultiColumnFlowThread::isPageLogicalHeightKnown() const
671 { 671 {
672 if (RenderMultiColumnSet* columnSet = lastMultiColumnSet()) 672 if (RenderMultiColumnSet* columnSet = lastMultiColumnSet())
673 return columnSet->pageLogicalHeight(); 673 return columnSet->pageLogicalHeight();
674 return false; 674 return false;
675 } 675 }
676 676
677 } 677 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698