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 "config.h" | 5 #include "config.h" |
6 | 6 |
7 #include "core/layout/MultiColumnFragmentainerGroup.h" | 7 #include "core/layout/MultiColumnFragmentainerGroup.h" |
8 | 8 |
9 #include "core/layout/LayoutMultiColumnSet.h" | 9 #include "core/layout/LayoutMultiColumnSet.h" |
10 | 10 |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
106 } | 106 } |
107 | 107 |
108 // We can get rid of the content runs now, if we haven't already done so. Th
ey are only needed | 108 // We can get rid of the content runs now, if we haven't already done so. Th
ey are only needed |
109 // to calculate the initial balanced column height. In fact, we have to get
rid of them before | 109 // to calculate the initial balanced column height. In fact, we have to get
rid of them before |
110 // the next layout pass, since each pass will rebuild this. | 110 // the next layout pass, since each pass will rebuild this. |
111 m_contentRuns.clear(); | 111 m_contentRuns.clear(); |
112 | 112 |
113 if (m_columnHeight == oldColumnHeight) | 113 if (m_columnHeight == oldColumnHeight) |
114 return false; // No change. We're done. | 114 return false; // No change. We're done. |
115 | 115 |
116 m_minSpaceShortage = LayoutFlowThread::maxLogicalHeight(); | 116 m_minSpaceShortage = LayoutUnit::max(); |
117 return true; // Need another pass. | 117 return true; // Need another pass. |
118 } | 118 } |
119 | 119 |
120 void MultiColumnFragmentainerGroup::expandToEncompassFlowThreadOverflow() | 120 void MultiColumnFragmentainerGroup::expandToEncompassFlowThreadOverflow() |
121 { | 121 { |
122 ASSERT(isLastGroup()); | 122 ASSERT(isLastGroup()); |
123 // Get the offset within the flow thread in its block progression direction.
Then get the | 123 // Get the offset within the flow thread in its block progression direction.
Then get the |
124 // flow thread's remaining logical height including its overflow and expand
our rect | 124 // flow thread's remaining logical height including its overflow and expand
our rect |
125 // to encompass that remaining height and overflow. The idea is that we will
generate | 125 // to encompass that remaining height and overflow. The idea is that we will
generate |
126 // additional columns and pages to hold that overflow, since people do write
bad | 126 // additional columns and pages to hold that overflow, since people do write
bad |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
330 } | 330 } |
331 height -= logicalTop(); | 331 height -= logicalTop(); |
332 return max(height, LayoutUnit(1)); // Let's avoid zero height, as that would
probably cause an infinite amount of columns to be created. | 332 return max(height, LayoutUnit(1)); // Let's avoid zero height, as that would
probably cause an infinite amount of columns to be created. |
333 } | 333 } |
334 | 334 |
335 LayoutUnit MultiColumnFragmentainerGroup::calculateMaxColumnHeight() const | 335 LayoutUnit MultiColumnFragmentainerGroup::calculateMaxColumnHeight() const |
336 { | 336 { |
337 LayoutBlockFlow* multicolBlock = m_columnSet.multiColumnBlockFlow(); | 337 LayoutBlockFlow* multicolBlock = m_columnSet.multiColumnBlockFlow(); |
338 const ComputedStyle& multicolStyle = multicolBlock->styleRef(); | 338 const ComputedStyle& multicolStyle = multicolBlock->styleRef(); |
339 LayoutUnit availableHeight = m_columnSet.multiColumnFlowThread()->columnHeig
htAvailable(); | 339 LayoutUnit availableHeight = m_columnSet.multiColumnFlowThread()->columnHeig
htAvailable(); |
340 LayoutUnit maxColumnHeight = availableHeight ? availableHeight : LayoutFlowT
hread::maxLogicalHeight(); | 340 LayoutUnit maxColumnHeight = availableHeight ? availableHeight : LayoutUnit:
:max(); |
341 if (!multicolStyle.logicalMaxHeight().isMaxSizeNone()) { | 341 if (!multicolStyle.logicalMaxHeight().isMaxSizeNone()) { |
342 LayoutUnit logicalMaxHeight = multicolBlock->computeContentLogicalHeight
(MaxSize, multicolStyle.logicalMaxHeight(), -1); | 342 LayoutUnit logicalMaxHeight = multicolBlock->computeContentLogicalHeight
(MaxSize, multicolStyle.logicalMaxHeight(), -1); |
343 if (logicalMaxHeight != -1 && maxColumnHeight > logicalMaxHeight) | 343 if (logicalMaxHeight != -1 && maxColumnHeight > logicalMaxHeight) |
344 maxColumnHeight = logicalMaxHeight; | 344 maxColumnHeight = logicalMaxHeight; |
345 } | 345 } |
346 return heightAdjustedForRowOffset(maxColumnHeight); | 346 return heightAdjustedForRowOffset(maxColumnHeight); |
347 } | 347 } |
348 | 348 |
349 void MultiColumnFragmentainerGroup::setAndConstrainColumnHeight(LayoutUnit newHe
ight) | 349 void MultiColumnFragmentainerGroup::setAndConstrainColumnHeight(LayoutUnit newHe
ight) |
350 { | 350 { |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
426 // We cannot stretch any further. We'll just have to live with the overf
lowing columns. This | 426 // We cannot stretch any further. We'll just have to live with the overf
lowing columns. This |
427 // typically happens if the max column height is less than the height of
the tallest piece | 427 // typically happens if the max column height is less than the height of
the tallest piece |
428 // of unbreakable content (e.g. lines). | 428 // of unbreakable content (e.g. lines). |
429 return m_columnHeight; | 429 return m_columnHeight; |
430 } | 430 } |
431 | 431 |
432 // If the initial guessed column height wasn't enough, stretch it now. Stret
ch by the lowest | 432 // If the initial guessed column height wasn't enough, stretch it now. Stret
ch by the lowest |
433 // amount of space shortage found during layout. | 433 // amount of space shortage found during layout. |
434 | 434 |
435 ASSERT(m_minSpaceShortage > 0); // We should never _shrink_ the height! | 435 ASSERT(m_minSpaceShortage > 0); // We should never _shrink_ the height! |
436 ASSERT(m_minSpaceShortage != LayoutFlowThread::maxLogicalHeight()); // If th
is happens, we probably have a bug. | 436 ASSERT(m_minSpaceShortage != LayoutUnit::max()); // If this happens, we prob
ably have a bug. |
437 if (m_minSpaceShortage == LayoutFlowThread::maxLogicalHeight()) | 437 if (m_minSpaceShortage == LayoutUnit::max()) |
438 return m_columnHeight; // So bail out rather than looping infinitely. | 438 return m_columnHeight; // So bail out rather than looping infinitely. |
439 | 439 |
440 return m_columnHeight + m_minSpaceShortage; | 440 return m_columnHeight + m_minSpaceShortage; |
441 } | 441 } |
442 | 442 |
443 LayoutRect MultiColumnFragmentainerGroup::columnRectAt(unsigned columnIndex) con
st | 443 LayoutRect MultiColumnFragmentainerGroup::columnRectAt(unsigned columnIndex) con
st |
444 { | 444 { |
445 LayoutUnit columnLogicalWidth = m_columnSet.pageLogicalWidth(); | 445 LayoutUnit columnLogicalWidth = m_columnSet.pageLogicalWidth(); |
446 LayoutUnit columnLogicalHeight = m_columnHeight; | 446 LayoutUnit columnLogicalHeight = m_columnHeight; |
447 LayoutUnit columnLogicalTop; | 447 LayoutUnit columnLogicalTop; |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
578 append(MultiColumnFragmentainerGroup(m_columnSet)); | 578 append(MultiColumnFragmentainerGroup(m_columnSet)); |
579 return last(); | 579 return last(); |
580 } | 580 } |
581 | 581 |
582 void MultiColumnFragmentainerGroupList::deleteExtraGroups() | 582 void MultiColumnFragmentainerGroupList::deleteExtraGroups() |
583 { | 583 { |
584 shrink(1); | 584 shrink(1); |
585 } | 585 } |
586 | 586 |
587 } // namespace blink | 587 } // namespace blink |
OLD | NEW |