OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2008 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 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
227 | 227 |
228 return false; | 228 return false; |
229 } | 229 } |
230 | 230 |
231 void LineBoxList::dirtyLinesFromChangedChild(LineLayoutItem container, LineLayou
tItem child) | 231 void LineBoxList::dirtyLinesFromChangedChild(LineLayoutItem container, LineLayou
tItem child) |
232 { | 232 { |
233 if (!container.parent() || (container.isLayoutBlock() && (container.selfNeed
sLayout() || !container.isLayoutBlockFlow()))) | 233 if (!container.parent() || (container.isLayoutBlock() && (container.selfNeed
sLayout() || !container.isLayoutBlockFlow()))) |
234 return; | 234 return; |
235 | 235 |
236 LineLayoutInline inlineContainer = container.isLayoutInline() ? LineLayoutIn
line(container) : LineLayoutInline(); | 236 LineLayoutInline inlineContainer = container.isLayoutInline() ? LineLayoutIn
line(container) : LineLayoutInline(); |
| 237 |
| 238 // If we are attaching children dirtying lines is unnecessary as we will do
a full layout |
| 239 // of the inline's contents anyway. |
| 240 if (inlineContainer && inlineContainer.node() && inlineContainer.node()->nee
dsAttach()) |
| 241 return; |
| 242 |
237 InlineBox* firstBox = inlineContainer ? inlineContainer.firstLineBoxIncludin
gCulling() : firstLineBox(); | 243 InlineBox* firstBox = inlineContainer ? inlineContainer.firstLineBoxIncludin
gCulling() : firstLineBox(); |
238 | 244 |
239 // If we have no first line box, then just bail early. | 245 // If we have no first line box, then just bail early. |
240 if (!firstBox) { | 246 if (!firstBox) { |
241 // For an empty inline, go ahead and propagate the check up to our paren
t, unless the parent | 247 // For an empty inline, go ahead and propagate the check up to our paren
t, unless the parent |
242 // is already dirty. | 248 // is already dirty. |
243 if (container.isInline() && !container.ancestorLineBoxDirty()) { | 249 if (container.isInline() && !container.ancestorLineBoxDirty()) { |
244 container.parent().dirtyLinesFromChangedChild(container); | 250 container.parent().dirtyLinesFromChangedChild(container); |
245 container.setAncestorLineBoxDirty(); // Mark the container to avoid
dirtying the same lines again across multiple destroy() calls of the same subtre
e. | 251 container.setAncestorLineBoxDirty(); // Mark the container to avoid
dirtying the same lines again across multiple destroy() calls of the same subtre
e. |
246 } | 252 } |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
318 ASSERT(child->prevLineBox() == prev); | 324 ASSERT(child->prevLineBox() == prev); |
319 prev = child; | 325 prev = child; |
320 } | 326 } |
321 ASSERT(prev == m_lastLineBox); | 327 ASSERT(prev == m_lastLineBox); |
322 #endif | 328 #endif |
323 } | 329 } |
324 | 330 |
325 #endif | 331 #endif |
326 | 332 |
327 } // namespace blink | 333 } // namespace blink |
OLD | NEW |