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

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

Issue 2709013007: Allow flow thread portion logical bottom to be above its logical top. (Closed)
Patch Set: Add clarifying comment in logicalHeightInFlowThread() Created 3 years, 9 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 477 matching lines...) Expand 10 before | Expand all | Expand 10 after
488 columnSet = previousSet; 488 columnSet = previousSet;
489 } 489 }
490 // Avoid returning zero-height column sets, if possible. We found a column set 490 // Avoid returning zero-height column sets, if possible. We found a column set
491 // based on a flow thread coordinate. If multiple column sets share that 491 // based on a flow thread coordinate. If multiple column sets share that
492 // coordinate (because we have zero-height column sets between column 492 // coordinate (because we have zero-height column sets between column
493 // spanners, for instance), look for one that has a height. 493 // spanners, for instance), look for one that has a height.
494 for (LayoutMultiColumnSet* walker = columnSet; walker; 494 for (LayoutMultiColumnSet* walker = columnSet; walker;
495 walker = walker->nextSiblingMultiColumnSet()) { 495 walker = walker->nextSiblingMultiColumnSet()) {
496 if (!walker->isPageLogicalHeightKnown()) 496 if (!walker->isPageLogicalHeightKnown())
497 continue; 497 continue;
498 if (walker->logicalTopInFlowThread() == offset) 498 if (pageBoundaryRule == AssociateWithFormerPage) {
499 if (walker->logicalTopInFlowThread() < offset &&
500 walker->logicalBottomInFlowThread() >= offset)
501 return walker;
502 }
503 if (walker->logicalTopInFlowThread() <= offset &&
504 walker->logicalBottomInFlowThread() > offset)
499 return walker; 505 return walker;
500 break; 506 break;
501 } 507 }
502 return columnSet; 508 return columnSet;
503 } 509 }
504 510
505 void LayoutMultiColumnFlowThread::layoutColumns( 511 void LayoutMultiColumnFlowThread::layoutColumns(
506 SubtreeLayoutScope& layoutScope) { 512 SubtreeLayoutScope& layoutScope) {
507 // Since we ended up here, it means that the multicol container (our parent) 513 // Since we ended up here, it means that the multicol container (our parent)
508 // needed layout. Since contents of the multicol container are diverted to the 514 // needed layout. Since contents of the multicol container are diverted to the
(...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after
889 LayoutFlowThread::willBeRemovedFromTree(); 895 LayoutFlowThread::willBeRemovedFromTree();
890 } 896 }
891 897
892 void LayoutMultiColumnFlowThread::skipColumnSpanner( 898 void LayoutMultiColumnFlowThread::skipColumnSpanner(
893 LayoutBox* layoutObject, 899 LayoutBox* layoutObject,
894 LayoutUnit logicalTopInFlowThread) { 900 LayoutUnit logicalTopInFlowThread) {
895 ASSERT(layoutObject->isColumnSpanAll()); 901 ASSERT(layoutObject->isColumnSpanAll());
896 LayoutMultiColumnSpannerPlaceholder* placeholder = 902 LayoutMultiColumnSpannerPlaceholder* placeholder =
897 layoutObject->spannerPlaceholder(); 903 layoutObject->spannerPlaceholder();
898 LayoutBox* previousColumnBox = placeholder->previousSiblingMultiColumnBox(); 904 LayoutBox* previousColumnBox = placeholder->previousSiblingMultiColumnBox();
899 if (previousColumnBox && previousColumnBox->isLayoutMultiColumnSet()) { 905 if (previousColumnBox && previousColumnBox->isLayoutMultiColumnSet())
900 LayoutMultiColumnSet* columnSet = toLayoutMultiColumnSet(previousColumnBox); 906 toLayoutMultiColumnSet(previousColumnBox)->endFlow(logicalTopInFlowThread);
901 // Negative margins may cause this.
902 if (logicalTopInFlowThread < columnSet->logicalTopInFlowThread())
903 logicalTopInFlowThread = columnSet->logicalTopInFlowThread();
904 columnSet->endFlow(logicalTopInFlowThread);
905 }
906 LayoutBox* nextColumnBox = placeholder->nextSiblingMultiColumnBox(); 907 LayoutBox* nextColumnBox = placeholder->nextSiblingMultiColumnBox();
907 if (nextColumnBox && nextColumnBox->isLayoutMultiColumnSet()) { 908 if (nextColumnBox && nextColumnBox->isLayoutMultiColumnSet()) {
908 LayoutMultiColumnSet* nextSet = toLayoutMultiColumnSet(nextColumnBox); 909 LayoutMultiColumnSet* nextSet = toLayoutMultiColumnSet(nextColumnBox);
909 m_lastSetWorkedOn = nextSet; 910 m_lastSetWorkedOn = nextSet;
910 nextSet->beginFlow(logicalTopInFlowThread); 911 nextSet->beginFlow(logicalTopInFlowThread);
911 } 912 }
912 913
913 // We'll lay out of spanners after flow thread layout has finished (during 914 // We'll lay out of spanners after flow thread layout has finished (during
914 // layout of the spanner placeholders). There may be containing blocks for 915 // layout of the spanner placeholders). There may be containing blocks for
915 // out-of-flow positioned descendants of the spanner in the flow thread, so 916 // out-of-flow positioned descendants of the spanner in the flow thread, so
(...skipping 453 matching lines...) Expand 10 before | Expand all | Expand 10 after
1369 const { 1370 const {
1370 return MultiColumnLayoutState(m_lastSetWorkedOn); 1371 return MultiColumnLayoutState(m_lastSetWorkedOn);
1371 } 1372 }
1372 1373
1373 void LayoutMultiColumnFlowThread::restoreMultiColumnLayoutState( 1374 void LayoutMultiColumnFlowThread::restoreMultiColumnLayoutState(
1374 const MultiColumnLayoutState& state) { 1375 const MultiColumnLayoutState& state) {
1375 m_lastSetWorkedOn = state.columnSet(); 1376 m_lastSetWorkedOn = state.columnSet();
1376 } 1377 }
1377 1378
1378 } // namespace blink 1379 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698