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

Side by Side Diff: third_party/WebKit/Source/core/layout/LayoutMultiColumnFlowThread.cpp

Issue 1895003002: Append fragmentainer groups in outer multicols first. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 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 492 matching lines...) Expand 10 before | Expand all | Expand 10 after
503 } 503 }
504 504
505 if (!columnSet->hasFragmentainerGroupForColumnAt(offsetInFlowThread, pageBou ndaryRule)) { 505 if (!columnSet->hasFragmentainerGroupForColumnAt(offsetInFlowThread, pageBou ndaryRule)) {
506 FragmentationContext* enclosingFragmentationContext = this->enclosingFra gmentationContext(); 506 FragmentationContext* enclosingFragmentationContext = this->enclosingFra gmentationContext();
507 if (!enclosingFragmentationContext) 507 if (!enclosingFragmentationContext)
508 return; // Not nested. We'll never need more rows than the one we al ready have then. 508 return; // Not nested. We'll never need more rows than the one we al ready have then.
509 ASSERT(!isLayoutPagedFlowThread()); 509 ASSERT(!isLayoutPagedFlowThread());
510 510
511 // We have run out of columns here, so we need to add at least one more row to hold more 511 // We have run out of columns here, so we need to add at least one more row to hold more
512 // columns. 512 // columns.
513 LayoutMultiColumnFlowThread* enclosingFlowThread = enclosingFragmentatio nContext->associatedFlowThread();
513 do { 514 do {
515 if (enclosingFlowThread) {
516 // When we add a new row here, it implicitly means that we're in serting another
517 // column in our enclosing multicol container. That in turn may mean that we've run
518 // out of columns there too. Need to insert additional rows in a ncestral multicol
519 // containers before doing it in the descendants, in order to ge t the height
520 // constraints right down there.
521 const MultiColumnFragmentainerGroup& lastRow = columnSet->lastFr agmentainerGroup();
522 // The top offset where where the new fragmentainer group will s tart in this column
523 // set, converted to the coordinate space of the enclosing multi col container.
524 LayoutUnit logicalOffsetInOuter = lastRow.blockOffsetInEnclosing FragmentationContext() + lastRow.logicalHeight();
525 enclosingFlowThread->appendNewFragmentainerGroupIfNeeded(logical OffsetInOuter, AssociateWithLatterPage);
526 }
527
514 const MultiColumnFragmentainerGroup& newRow = columnSet->appendNewFr agmentainerGroup(); 528 const MultiColumnFragmentainerGroup& newRow = columnSet->appendNewFr agmentainerGroup();
515 // Zero-height rows should really not occur here, but if it does any way, break, so that 529 // Zero-height rows should really not occur here, but if it does any way, break, so that
516 // we don't get stuck in an infinite loop. 530 // we don't get stuck in an infinite loop.
517 ASSERT(newRow.logicalHeight() > 0); 531 ASSERT(newRow.logicalHeight() > 0);
518 if (newRow.logicalHeight() <= 0) 532 if (newRow.logicalHeight() <= 0)
519 break; 533 break;
520 } while (!columnSet->hasFragmentainerGroupForColumnAt(offsetInFlowThread , pageBoundaryRule)); 534 } while (!columnSet->hasFragmentainerGroupForColumnAt(offsetInFlowThread , pageBoundaryRule));
521
522 if (LayoutMultiColumnFlowThread* enclosingFlowThread = enclosingFragment ationContext->associatedFlowThread()) {
523 // When we add a new row here, it implicitly means that we're insert ing another column
524 // in our enclosing multicol container. That in turn may mean that w e've run out of
525 // columns there too.
526 const MultiColumnFragmentainerGroup& lastRow = columnSet->lastFragme ntainerGroup();
527 enclosingFlowThread->appendNewFragmentainerGroupIfNeeded(lastRow.blo ckOffsetInEnclosingFragmentationContext(), AssociateWithLatterPage);
528 }
529 } 535 }
530 } 536 }
531 537
532 bool LayoutMultiColumnFlowThread::isFragmentainerLogicalHeightKnown() 538 bool LayoutMultiColumnFlowThread::isFragmentainerLogicalHeightKnown()
533 { 539 {
534 return isPageLogicalHeightKnown(); 540 return isPageLogicalHeightKnown();
535 } 541 }
536 542
537 LayoutUnit LayoutMultiColumnFlowThread::fragmentainerLogicalHeightAt(LayoutUnit blockOffset) 543 LayoutUnit LayoutMultiColumnFlowThread::fragmentainerLogicalHeightAt(LayoutUnit blockOffset)
538 { 544 {
(...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after
1014 } 1020 }
1015 if (canContainSpannerInParentFragmentationContext(*object)) 1021 if (canContainSpannerInParentFragmentationContext(*object))
1016 next = object->nextInPreOrder(&root); 1022 next = object->nextInPreOrder(&root);
1017 else 1023 else
1018 next = object->nextInPreOrderAfterChildren(&root); 1024 next = object->nextInPreOrderAfterChildren(&root);
1019 } 1025 }
1020 return true; 1026 return true;
1021 } 1027 }
1022 1028
1023 } // namespace blink 1029 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/LayoutTests/fast/multicol/doubly-nested-with-increasing-row-heights-crash-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698