| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "core/layout/MultiColumnFragmentainerGroup.h" | 5 #include "core/layout/MultiColumnFragmentainerGroup.h" |
| 6 | 6 |
| 7 #include "core/layout/ColumnBalancer.h" | 7 #include "core/layout/ColumnBalancer.h" |
| 8 #include "core/layout/FragmentationContext.h" | 8 #include "core/layout/FragmentationContext.h" |
| 9 #include "core/layout/LayoutMultiColumnSet.h" | 9 #include "core/layout/LayoutMultiColumnSet.h" |
| 10 | 10 |
| (...skipping 28 matching lines...) Expand all Loading... |
| 39 | 39 |
| 40 void MultiColumnFragmentainerGroup::resetColumnHeight() { | 40 void MultiColumnFragmentainerGroup::resetColumnHeight() { |
| 41 m_maxColumnHeight = calculateMaxColumnHeight(); | 41 m_maxColumnHeight = calculateMaxColumnHeight(); |
| 42 | 42 |
| 43 LayoutMultiColumnFlowThread* flowThread = m_columnSet.multiColumnFlowThread(); | 43 LayoutMultiColumnFlowThread* flowThread = m_columnSet.multiColumnFlowThread(); |
| 44 if (m_columnSet.heightIsAuto()) { | 44 if (m_columnSet.heightIsAuto()) { |
| 45 FragmentationContext* enclosingFragmentationContext = | 45 FragmentationContext* enclosingFragmentationContext = |
| 46 flowThread->enclosingFragmentationContext(); | 46 flowThread->enclosingFragmentationContext(); |
| 47 if (enclosingFragmentationContext && | 47 if (enclosingFragmentationContext && |
| 48 enclosingFragmentationContext->isFragmentainerLogicalHeightKnown()) { | 48 enclosingFragmentationContext->isFragmentainerLogicalHeightKnown()) { |
| 49 // Even if height is auto, we set an initial height, in order to tell how | 49 // Set an initial height, based on the fragmentainer height in the outer |
| 50 // much content this MultiColumnFragmentainerGroup can hold, and when we | 50 // fragmentation context, in order to tell how much content this |
| 51 // need to append a new one. | 51 // MultiColumnFragmentainerGroup can hold, and when we need to append a |
| 52 // new one. |
| 52 m_columnHeight = m_maxColumnHeight; | 53 m_columnHeight = m_maxColumnHeight; |
| 53 } else { | 54 return; |
| 54 m_columnHeight = LayoutUnit(); | |
| 55 } | 55 } |
| 56 } |
| 57 // If the multicol container has a definite height, use it as the column |
| 58 // height. This even applies when we are to balance the columns. We'll still |
| 59 // use the definite height as an initial height, and lay out once at that |
| 60 // column height. If it turns out that the content needs less than this |
| 61 // height, we have to balance and shrink the height and lay out the columns |
| 62 // over again. |
| 63 if (LayoutUnit logicalHeight = flowThread->columnHeightAvailable()) { |
| 64 setAndConstrainColumnHeight(heightAdjustedForRowOffset(logicalHeight)); |
| 56 } else { | 65 } else { |
| 57 setAndConstrainColumnHeight( | 66 m_columnHeight = LayoutUnit(); |
| 58 heightAdjustedForRowOffset(flowThread->columnHeightAvailable())); | |
| 59 } | 67 } |
| 60 } | 68 } |
| 61 | 69 |
| 62 bool MultiColumnFragmentainerGroup::recalculateColumnHeight( | 70 bool MultiColumnFragmentainerGroup::recalculateColumnHeight( |
| 63 LayoutMultiColumnSet& columnSet) { | 71 LayoutMultiColumnSet& columnSet) { |
| 64 LayoutUnit oldColumnHeight = m_columnHeight; | 72 LayoutUnit oldColumnHeight = m_columnHeight; |
| 65 | 73 |
| 66 m_maxColumnHeight = calculateMaxColumnHeight(); | 74 m_maxColumnHeight = calculateMaxColumnHeight(); |
| 67 | 75 |
| 68 // Only the last row may have auto height, and thus be balanced. There are no | 76 // Only the last row may have auto height, and thus be balanced. There are no |
| (...skipping 517 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 586 MultiColumnFragmentainerGroupList::addExtraGroup() { | 594 MultiColumnFragmentainerGroupList::addExtraGroup() { |
| 587 append(MultiColumnFragmentainerGroup(m_columnSet)); | 595 append(MultiColumnFragmentainerGroup(m_columnSet)); |
| 588 return last(); | 596 return last(); |
| 589 } | 597 } |
| 590 | 598 |
| 591 void MultiColumnFragmentainerGroupList::deleteExtraGroups() { | 599 void MultiColumnFragmentainerGroupList::deleteExtraGroups() { |
| 592 shrink(1); | 600 shrink(1); |
| 593 } | 601 } |
| 594 | 602 |
| 595 } // namespace blink | 603 } // namespace blink |
| OLD | NEW |