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 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
136 // column count by one and shrink its columns' height. Repeat until we have
the desired total | 136 // column count by one and shrink its columns' height. Repeat until we have
the desired total |
137 // number of breaks. The largest column height among the runs will then be t
he initial column | 137 // number of breaks. The largest column height among the runs will then be t
he initial column |
138 // height for the balancer to use. | 138 // height for the balancer to use. |
139 while (breakCount < m_computedColumnCount) { | 139 while (breakCount < m_computedColumnCount) { |
140 unsigned index = findRunWithTallestColumns(); | 140 unsigned index = findRunWithTallestColumns(); |
141 m_contentRuns[index].assumeAnotherImplicitBreak(); | 141 m_contentRuns[index].assumeAnotherImplicitBreak(); |
142 breakCount++; | 142 breakCount++; |
143 } | 143 } |
144 } | 144 } |
145 | 145 |
146 LayoutUnit RenderMultiColumnSet::calculateBalancedHeight(bool initial) const | 146 LayoutUnit RenderMultiColumnSet::calculateColumnHeight(bool initial) const |
147 { | 147 { |
148 if (initial) { | 148 if (initial) { |
149 // Start with the lowest imaginable column height. | 149 // Start with the lowest imaginable column height. |
150 unsigned index = findRunWithTallestColumns(); | 150 unsigned index = findRunWithTallestColumns(); |
151 LayoutUnit startOffset = index > 0 ? m_contentRuns[index - 1].breakOffse
t() : LayoutUnit(); | 151 LayoutUnit startOffset = index > 0 ? m_contentRuns[index - 1].breakOffse
t() : LayoutUnit(); |
152 return std::max<LayoutUnit>(m_contentRuns[index].columnLogicalHeight(sta
rtOffset), m_minimumColumnHeight); | 152 return std::max<LayoutUnit>(m_contentRuns[index].columnLogicalHeight(sta
rtOffset), m_minimumColumnHeight); |
153 } | 153 } |
154 | 154 |
155 if (columnCount() <= computedColumnCount()) { | 155 if (columnCount() <= computedColumnCount()) { |
156 // With the current column height, the content fits without creating ove
rflowing columns. We're done. | 156 // With the current column height, the content fits without creating ove
rflowing columns. We're done. |
(...skipping 27 matching lines...) Expand all Loading... |
184 if (!multiColumnFlowThread()->requiresBalancing()) | 184 if (!multiColumnFlowThread()->requiresBalancing()) |
185 return; | 185 return; |
186 if (!m_contentRuns.isEmpty() && offsetFromFirstPage <= m_contentRuns.last().
breakOffset()) | 186 if (!m_contentRuns.isEmpty() && offsetFromFirstPage <= m_contentRuns.last().
breakOffset()) |
187 return; | 187 return; |
188 // Append another item as long as we haven't exceeded used column count. Wha
t ends up in the | 188 // Append another item as long as we haven't exceeded used column count. Wha
t ends up in the |
189 // overflow area shouldn't affect column balancing. | 189 // overflow area shouldn't affect column balancing. |
190 if (m_contentRuns.size() < m_computedColumnCount) | 190 if (m_contentRuns.size() < m_computedColumnCount) |
191 m_contentRuns.append(ContentRun(offsetFromFirstPage)); | 191 m_contentRuns.append(ContentRun(offsetFromFirstPage)); |
192 } | 192 } |
193 | 193 |
194 bool RenderMultiColumnSet::recalculateBalancedHeight(bool initial) | 194 bool RenderMultiColumnSet::recalculateColumnHeight(bool initial) |
195 { | 195 { |
196 ASSERT(multiColumnFlowThread()->requiresBalancing()); | 196 ASSERT(multiColumnFlowThread()->requiresBalancing()); |
197 | 197 |
198 LayoutUnit oldColumnHeight = m_computedColumnHeight; | 198 LayoutUnit oldColumnHeight = m_computedColumnHeight; |
199 if (initial) | 199 if (initial) |
200 distributeImplicitBreaks(); | 200 distributeImplicitBreaks(); |
201 LayoutUnit newColumnHeight = calculateBalancedHeight(initial); | 201 LayoutUnit newColumnHeight = calculateColumnHeight(initial); |
202 setAndConstrainColumnHeight(newColumnHeight); | 202 setAndConstrainColumnHeight(newColumnHeight); |
203 | 203 |
204 // After having calculated an initial column height, the multicol container
typically needs at | 204 // After having calculated an initial column height, the multicol container
typically needs at |
205 // least one more layout pass with a new column height, but if a height was
specified, we only | 205 // least one more layout pass with a new column height, but if a height was
specified, we only |
206 // need to do this if we think that we need less space than specified. Conve
rsely, if we | 206 // need to do this if we think that we need less space than specified. Conve
rsely, if we |
207 // determined that the columns need to be as tall as the specified height of
the container, we | 207 // determined that the columns need to be as tall as the specified height of
the container, we |
208 // have already laid it out correctly, and there's no need for another pass. | 208 // have already laid it out correctly, and there's no need for another pass. |
209 | 209 |
210 if (m_computedColumnHeight == oldColumnHeight) | 210 if (m_computedColumnHeight == oldColumnHeight) |
211 return false; // No change. We're done. | 211 return false; // No change. We're done. |
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
604 fragments.append(fragment); | 604 fragments.append(fragment); |
605 } | 605 } |
606 } | 606 } |
607 | 607 |
608 const char* RenderMultiColumnSet::renderName() const | 608 const char* RenderMultiColumnSet::renderName() const |
609 { | 609 { |
610 return "RenderMultiColumnSet"; | 610 return "RenderMultiColumnSet"; |
611 } | 611 } |
612 | 612 |
613 } | 613 } |
OLD | NEW |