OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv
ed. | 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv
ed. |
4 * | 4 * |
5 * This library is free software; you can redistribute it and/or | 5 * This library is free software; you can redistribute it and/or |
6 * modify it under the terms of the GNU Library General Public | 6 * modify it under the terms of the GNU Library General Public |
7 * License as published by the Free Software Foundation; either | 7 * License as published by the Free Software Foundation; either |
8 * version 2 of the License, or (at your option) any later version. | 8 * version 2 of the License, or (at your option) any later version. |
9 * | 9 * |
10 * This library is distributed in the hope that it will be useful, | 10 * This library is distributed in the hope that it will be useful, |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
113 { | 113 { |
114 return child->isBox(); | 114 return child->isBox(); |
115 } | 115 } |
116 | 116 |
117 void RenderView::layoutContent(const LayoutState& state) | 117 void RenderView::layoutContent(const LayoutState& state) |
118 { | 118 { |
119 UNUSED_PARAM(state); | 119 UNUSED_PARAM(state); |
120 ASSERT(needsLayout()); | 120 ASSERT(needsLayout()); |
121 | 121 |
122 RenderBlock::layout(); | 122 RenderBlock::layout(); |
| 123 |
| 124 if (m_frameView->partialLayout().isStopping()) |
| 125 return; |
| 126 |
123 if (hasRenderNamedFlowThreads()) | 127 if (hasRenderNamedFlowThreads()) |
124 flowThreadController()->layoutRenderNamedFlowThreads(); | 128 flowThreadController()->layoutRenderNamedFlowThreads(); |
| 129 |
125 #ifndef NDEBUG | 130 #ifndef NDEBUG |
126 checkLayoutState(state); | 131 checkLayoutState(state); |
127 #endif | 132 #endif |
128 } | 133 } |
129 | 134 |
130 #ifndef NDEBUG | 135 #ifndef NDEBUG |
131 void RenderView::checkLayoutState(const LayoutState& state) | 136 void RenderView::checkLayoutState(const LayoutState& state) |
132 { | 137 { |
133 ASSERT(layoutDeltaMatches(LayoutSize())); | 138 ASSERT(layoutDeltaMatches(LayoutSize())); |
134 ASSERT(!m_layoutStateDisableCount); | 139 ASSERT(!m_layoutStateDisableCount); |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
205 // 1. The flows are laid out from the outer flow to the inner flow. This success
fully computes the outer non-auto-height regions size so the | 210 // 1. The flows are laid out from the outer flow to the inner flow. This success
fully computes the outer non-auto-height regions size so the |
206 // inner flows have the necessary information to correctly fragment the content. | 211 // inner flows have the necessary information to correctly fragment the content. |
207 // 2. The flows are laid out from the inner flow to the outer flow. After an inn
er flow is laid out it goes into the constrained layout phase | 212 // 2. The flows are laid out from the inner flow to the outer flow. After an inn
er flow is laid out it goes into the constrained layout phase |
208 // and marks the auto-height regions they need layout. This means the outer flow
s will relayout if they depend on regions with auto-height regions | 213 // and marks the auto-height regions they need layout. This means the outer flow
s will relayout if they depend on regions with auto-height regions |
209 // belonging to inner flows. This step will correctly set the computedAutoHeight
for the auto-height regions. It's possible for non-auto-height | 214 // belonging to inner flows. This step will correctly set the computedAutoHeight
for the auto-height regions. It's possible for non-auto-height |
210 // regions to relayout if they depend on auto-height regions. This will invalida
te the inner flow threads and mark them as needing layout. | 215 // regions to relayout if they depend on auto-height regions. This will invalida
te the inner flow threads and mark them as needing layout. |
211 // 3. The last step is to do one last layout if there are pathological dependenc
ies between non-auto-height regions and auto-height regions | 216 // 3. The last step is to do one last layout if there are pathological dependenc
ies between non-auto-height regions and auto-height regions |
212 // as detected in the previous step. | 217 // as detected in the previous step. |
213 void RenderView::layoutContentInAutoLogicalHeightRegions(const LayoutState& stat
e) | 218 void RenderView::layoutContentInAutoLogicalHeightRegions(const LayoutState& stat
e) |
214 { | 219 { |
| 220 if (!m_frameView->partialLayout().isStopping()) { |
| 221 // Disable partial layout for any two-pass layout algorithm. |
| 222 m_frameView->partialLayout().reset(); |
| 223 } |
| 224 |
215 // We need to invalidate all the flows with auto-height regions if one such
flow needs layout. | 225 // We need to invalidate all the flows with auto-height regions if one such
flow needs layout. |
216 // If none is found we do a layout a check back again afterwards. | 226 // If none is found we do a layout a check back again afterwards. |
217 if (!flowThreadController()->updateFlowThreadsNeedingLayout()) { | 227 if (!flowThreadController()->updateFlowThreadsNeedingLayout()) { |
218 // Do a first layout of the content. In some cases more layouts are not
needed (e.g. only flows with non-auto-height regions have changed). | 228 // Do a first layout of the content. In some cases more layouts are not
needed (e.g. only flows with non-auto-height regions have changed). |
219 layoutContent(state); | 229 layoutContent(state); |
220 | 230 |
221 // If we find no named flow needing a two step layout after the first la
yout, exit early. | 231 // If we find no named flow needing a two step layout after the first la
yout, exit early. |
222 // Otherwise, initiate the two step layout algorithm and recompute all t
he flows. | 232 // Otherwise, initiate the two step layout algorithm and recompute all t
he flows. |
223 if (!flowThreadController()->updateFlowThreadsNeedingTwoStepLayout()) | 233 if (!flowThreadController()->updateFlowThreadsNeedingTwoStepLayout()) |
224 return; | 234 return; |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
273 bool isSeamlessAncestorInFlowThread = initializeLayoutState(state); | 283 bool isSeamlessAncestorInFlowThread = initializeLayoutState(state); |
274 | 284 |
275 m_pageLogicalHeightChanged = false; | 285 m_pageLogicalHeightChanged = false; |
276 m_layoutState = &state; | 286 m_layoutState = &state; |
277 | 287 |
278 if (checkTwoPassLayoutForAutoHeightRegions()) | 288 if (checkTwoPassLayoutForAutoHeightRegions()) |
279 layoutContentInAutoLogicalHeightRegions(state); | 289 layoutContentInAutoLogicalHeightRegions(state); |
280 else | 290 else |
281 layoutContent(state); | 291 layoutContent(state); |
282 | 292 |
| 293 if (m_frameView->partialLayout().isStopping()) { |
| 294 m_layoutState = 0; |
| 295 return; |
| 296 } |
| 297 |
283 #ifndef NDEBUG | 298 #ifndef NDEBUG |
284 checkLayoutState(state); | 299 checkLayoutState(state); |
285 #endif | 300 #endif |
286 m_layoutState = 0; | 301 m_layoutState = 0; |
287 clearNeedsLayout(); | 302 clearNeedsLayout(); |
288 | 303 |
289 if (isSeamlessAncestorInFlowThread) | 304 if (isSeamlessAncestorInFlowThread) |
290 flowThreadController()->setCurrentRenderFlowThread(0); | 305 flowThreadController()->setCurrentRenderFlowThread(0); |
291 } | 306 } |
292 | 307 |
(...skipping 856 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1149 #endif | 1164 #endif |
1150 | 1165 |
1151 if (layoutState) | 1166 if (layoutState) |
1152 layoutState->m_isPaginated = m_fragmenting; | 1167 layoutState->m_isPaginated = m_fragmenting; |
1153 | 1168 |
1154 if (m_flowThreadState != RenderObject::NotInsideFlowThread) | 1169 if (m_flowThreadState != RenderObject::NotInsideFlowThread) |
1155 m_root->setFlowThreadStateIncludingDescendants(m_flowThreadState); | 1170 m_root->setFlowThreadStateIncludingDescendants(m_flowThreadState); |
1156 } | 1171 } |
1157 | 1172 |
1158 } // namespace WebCore | 1173 } // namespace WebCore |
OLD | NEW |