| 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 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 88 } | 88 } |
| 89 | 89 |
| 90 void RenderMultiColumnBlock::checkForPaginationLogicalHeightChange(LayoutUnit& /
*pageLogicalHeight*/, bool& /*pageLogicalHeightChanged*/, bool& /*hasSpecifiedPa
geLogicalHeight*/) | 90 void RenderMultiColumnBlock::checkForPaginationLogicalHeightChange(LayoutUnit& /
*pageLogicalHeight*/, bool& /*pageLogicalHeightChanged*/, bool& /*hasSpecifiedPa
geLogicalHeight*/) |
| 91 { | 91 { |
| 92 // We don't actually update any of the variables. We just subclassed to adju
st our column height. | 92 // We don't actually update any of the variables. We just subclassed to adju
st our column height. |
| 93 updateLogicalHeight(); | 93 updateLogicalHeight(); |
| 94 m_columnHeightAvailable = max<LayoutUnit>(contentLogicalHeight(), 0); | 94 m_columnHeightAvailable = max<LayoutUnit>(contentLogicalHeight(), 0); |
| 95 setLogicalHeight(0); | 95 setLogicalHeight(0); |
| 96 } | 96 } |
| 97 | 97 |
| 98 bool RenderMultiColumnBlock::relayoutForPagination(bool, LayoutUnit, LayoutState
Maintainer& statePusher) | 98 bool RenderMultiColumnBlock::shouldRelayoutMultiColumnBlock() const |
| 99 { | 99 { |
| 100 if (m_inBalancingPass || !requiresBalancing()) | 100 if (!requiresBalancing()) |
| 101 return false; | 101 return false; |
| 102 m_inBalancingPass = true; // Prevent re-entering this method (and recursion
into layout). | |
| 103 | 102 |
| 104 bool needsRelayout; | 103 // Column heights may change here because of balancing. We may have to do mu
ltiple layout |
| 105 bool neededRelayout = false; | 104 // passes, depending on how the contents is fitted to the changed column hei
ghts. In most |
| 106 bool firstPass = true; | 105 // cases, laying out again twice or even just once will suffice. Sometimes w
e need more |
| 107 do { | 106 // passes than that, though, but the number of retries should not exceed the
number of |
| 108 // Column heights may change here because of balancing. We may have to d
o multiple layout | 107 // columns, unless we have a bug. |
| 109 // passes, depending on how the contents is fitted to the changed column
heights. In most | 108 bool needsRelayout = false; |
| 110 // cases, laying out again twice or even just once will suffice. Sometim
es we need more | 109 for (RenderBox* childBox = firstChildBox(); childBox; childBox = childBox->n
extSiblingBox()) { |
| 111 // passes than that, though, but the number of retries should not exceed
the number of | 110 if (childBox != m_flowThread && childBox->isRenderMultiColumnSet()) { |
| 112 // columns, unless we have a bug. | 111 RenderMultiColumnSet* multicolSet = toRenderMultiColumnSet(childBox)
; |
| 113 needsRelayout = false; | 112 if (multicolSet->calculateBalancedHeight(!m_inBalancingPass)) { |
| 114 for (RenderBox* childBox = firstChildBox(); childBox; childBox = childBo
x->nextSiblingBox()) { | 113 multicolSet->setChildNeedsLayout(MarkOnlyThis); |
| 115 if (childBox != m_flowThread && childBox->isRenderMultiColumnSet())
{ | 114 needsRelayout = true; |
| 116 RenderMultiColumnSet* multicolSet = toRenderMultiColumnSet(child
Box); | |
| 117 if (multicolSet->calculateBalancedHeight(firstPass)) { | |
| 118 multicolSet->setChildNeedsLayout(MarkOnlyThis); | |
| 119 needsRelayout = true; | |
| 120 } | |
| 121 } | 115 } |
| 122 } | 116 } |
| 117 } |
| 123 | 118 |
| 124 if (needsRelayout) { | 119 if (needsRelayout) |
| 125 // Layout again. Column balancing resulted in a new height. | 120 m_flowThread->setChildNeedsLayout(MarkOnlyThis); |
| 126 neededRelayout = true; | 121 |
| 127 m_flowThread->setChildNeedsLayout(MarkOnlyThis); | 122 |
| 128 setChildNeedsLayout(MarkOnlyThis); | 123 m_inBalancingPass = needsRelayout; |
| 129 if (firstPass) | 124 return needsRelayout; |
| 130 statePusher.pop(); | |
| 131 layoutBlock(false); | |
| 132 } | |
| 133 firstPass = false; | |
| 134 } while (needsRelayout); | |
| 135 m_inBalancingPass = false; | |
| 136 return neededRelayout; | |
| 137 } | 125 } |
| 138 | 126 |
| 139 void RenderMultiColumnBlock::addChild(RenderObject* newChild, RenderObject* befo
reChild) | 127 void RenderMultiColumnBlock::addChild(RenderObject* newChild, RenderObject* befo
reChild) |
| 140 { | 128 { |
| 141 if (!m_flowThread) { | 129 if (!m_flowThread) { |
| 142 m_flowThread = RenderMultiColumnFlowThread::createAnonymous(&document())
; | 130 m_flowThread = RenderMultiColumnFlowThread::createAnonymous(&document())
; |
| 143 m_flowThread->setStyle(RenderStyle::createAnonymousStyleWithDisplay(styl
e(), BLOCK)); | 131 m_flowThread->setStyle(RenderStyle::createAnonymousStyleWithDisplay(styl
e(), BLOCK)); |
| 144 RenderBlock::addChild(m_flowThread); | 132 RenderBlock::addChild(m_flowThread); |
| 145 } | 133 } |
| 146 m_flowThread->addChild(newChild, beforeChild); | 134 m_flowThread->addChild(newChild, beforeChild); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 191 if (isPseudoElement()) | 179 if (isPseudoElement()) |
| 192 return "RenderMultiColumnBlock (generated)"; | 180 return "RenderMultiColumnBlock (generated)"; |
| 193 if (isAnonymous()) | 181 if (isAnonymous()) |
| 194 return "RenderMultiColumnBlock (generated)"; | 182 return "RenderMultiColumnBlock (generated)"; |
| 195 if (isRelPositioned()) | 183 if (isRelPositioned()) |
| 196 return "RenderMultiColumnBlock (relative positioned)"; | 184 return "RenderMultiColumnBlock (relative positioned)"; |
| 197 return "RenderMultiColumnBlock"; | 185 return "RenderMultiColumnBlock"; |
| 198 } | 186 } |
| 199 | 187 |
| 200 } | 188 } |
| OLD | NEW |