OLD | NEW |
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 418 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
429 spannerObjectInFlowThread->containingBlock()->setNeedsLayoutAndPrefWidthsRec
alc(LayoutInvalidationReason::ColumnsChanged); | 429 spannerObjectInFlowThread->containingBlock()->setNeedsLayoutAndPrefWidthsRec
alc(LayoutInvalidationReason::ColumnsChanged); |
430 | 430 |
431 // Now generate a column set for this ex-spanner, if needed and none is ther
e for us already. | 431 // Now generate a column set for this ex-spanner, if needed and none is ther
e for us already. |
432 flowThreadDescendantWasInserted(spannerObjectInFlowThread); | 432 flowThreadDescendantWasInserted(spannerObjectInFlowThread); |
433 | 433 |
434 return true; | 434 return true; |
435 } | 435 } |
436 | 436 |
437 LayoutMultiColumnFlowThread* LayoutMultiColumnFlowThread::enclosingFlowThread()
const | 437 LayoutMultiColumnFlowThread* LayoutMultiColumnFlowThread::enclosingFlowThread()
const |
438 { | 438 { |
| 439 if (isLayoutPagedFlowThread()) { |
| 440 // Paged overflow containers should never be fragmented by enclosing fra
gmentation |
| 441 // contexts. They are to be treated as unbreakable content. |
| 442 return nullptr; |
| 443 } |
439 if (multiColumnBlockFlow()->isInsideFlowThread()) | 444 if (multiColumnBlockFlow()->isInsideFlowThread()) |
440 return toLayoutMultiColumnFlowThread(locateFlowThreadContainingBlockOf(*
multiColumnBlockFlow())); | 445 return toLayoutMultiColumnFlowThread(locateFlowThreadContainingBlockOf(*
multiColumnBlockFlow())); |
441 return nullptr; | 446 return nullptr; |
442 } | 447 } |
443 | 448 |
444 FragmentationContext* LayoutMultiColumnFlowThread::enclosingFragmentationContext
() const | 449 FragmentationContext* LayoutMultiColumnFlowThread::enclosingFragmentationContext
() const |
445 { | 450 { |
446 if (LayoutMultiColumnFlowThread* enclosingFlowThread = this->enclosingFlowTh
read()) | 451 if (LayoutMultiColumnFlowThread* enclosingFlowThread = this->enclosingFlowTh
read()) |
447 return enclosingFlowThread; | 452 return enclosingFlowThread; |
448 return view()->fragmentationContext(); | 453 return view()->fragmentationContext(); |
(...skipping 14 matching lines...) Expand all Loading... |
463 // We only insert additional fragmentainer groups in the initial layout
pass. We only want | 468 // We only insert additional fragmentainer groups in the initial layout
pass. We only want |
464 // to balance columns in the last fragmentainer group (if we need to bal
ance at all), so we | 469 // to balance columns in the last fragmentainer group (if we need to bal
ance at all), so we |
465 // want that last fragmentainer group to be the same one in all layout p
asses that follow. | 470 // want that last fragmentainer group to be the same one in all layout p
asses that follow. |
466 return; | 471 return; |
467 } | 472 } |
468 | 473 |
469 if (!columnSet->hasFragmentainerGroupForColumnAt(offsetInFlowThread)) { | 474 if (!columnSet->hasFragmentainerGroupForColumnAt(offsetInFlowThread)) { |
470 FragmentationContext* enclosingFragmentationContext = this->enclosingFra
gmentationContext(); | 475 FragmentationContext* enclosingFragmentationContext = this->enclosingFra
gmentationContext(); |
471 if (!enclosingFragmentationContext) | 476 if (!enclosingFragmentationContext) |
472 return; // Not nested. We'll never need more rows than the one we al
ready have then. | 477 return; // Not nested. We'll never need more rows than the one we al
ready have then. |
473 | 478 ASSERT(!isLayoutPagedFlowThread()); |
474 // We have run out of columns here, so we add another row to hold more c
olumns. When we add | 479 // We have run out of columns here, so we add another row to hold more c
olumns. When we add |
475 // a new row, it implicitly means that we're inserting another column in
our enclosing | 480 // a new row, it implicitly means that we're inserting another column in
our enclosing |
476 // multicol container. That in turn may mean that we've run out of colum
ns there too. | 481 // multicol container. That in turn may mean that we've run out of colum
ns there too. |
477 const MultiColumnFragmentainerGroup& newRow = columnSet->appendNewFragme
ntainerGroup(); | 482 const MultiColumnFragmentainerGroup& newRow = columnSet->appendNewFragme
ntainerGroup(); |
478 if (LayoutMultiColumnFlowThread* enclosingFlowThread = enclosingFragment
ationContext->associatedFlowThread()) | 483 if (LayoutMultiColumnFlowThread* enclosingFlowThread = enclosingFragment
ationContext->associatedFlowThread()) |
479 enclosingFlowThread->appendNewFragmentainerGroupIfNeeded(newRow.bloc
kOffsetInEnclosingFragmentationContext()); | 484 enclosingFlowThread->appendNewFragmentainerGroupIfNeeded(newRow.bloc
kOffsetInEnclosingFragmentationContext()); |
480 } | 485 } |
481 } | 486 } |
482 | 487 |
483 bool LayoutMultiColumnFlowThread::isFragmentainerLogicalHeightKnown() | 488 bool LayoutMultiColumnFlowThread::isFragmentainerLogicalHeightKnown() |
(...skipping 461 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
945 // the "mayBe"), if we're in an out-of-flow subtree and have an outer multic
ol container that | 950 // the "mayBe"), if we're in an out-of-flow subtree and have an outer multic
ol container that |
946 // doesn't affect us, but that's okay. We'll discover that further down the
road when trying to | 951 // doesn't affect us, but that's okay. We'll discover that further down the
road when trying to |
947 // locate our enclosing flow thread for real. | 952 // locate our enclosing flow thread for real. |
948 bool mayBeNested = multiColumnBlockFlow()->isInsideFlowThread() || view()->f
ragmentationContext(); | 953 bool mayBeNested = multiColumnBlockFlow()->isInsideFlowThread() || view()->f
ragmentationContext(); |
949 if (!mayBeNested) | 954 if (!mayBeNested) |
950 return; | 955 return; |
951 appendNewFragmentainerGroupIfNeeded(logicalTopInFlowThreadAfterPagination); | 956 appendNewFragmentainerGroupIfNeeded(logicalTopInFlowThreadAfterPagination); |
952 } | 957 } |
953 | 958 |
954 } | 959 } |
OLD | NEW |