| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google 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 are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * 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 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 1125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1136 } | 1136 } |
| 1137 } | 1137 } |
| 1138 | 1138 |
| 1139 void LayoutBlockFlow::layoutBlockChildren(bool relayoutChildren, SubtreeLayoutSc
ope& layoutScope, LayoutUnit beforeEdge, LayoutUnit afterEdge) | 1139 void LayoutBlockFlow::layoutBlockChildren(bool relayoutChildren, SubtreeLayoutSc
ope& layoutScope, LayoutUnit beforeEdge, LayoutUnit afterEdge) |
| 1140 { | 1140 { |
| 1141 dirtyForLayoutFromPercentageHeightDescendants(layoutScope); | 1141 dirtyForLayoutFromPercentageHeightDescendants(layoutScope); |
| 1142 | 1142 |
| 1143 BlockChildrenLayoutInfo layoutInfo(this, beforeEdge, afterEdge); | 1143 BlockChildrenLayoutInfo layoutInfo(this, beforeEdge, afterEdge); |
| 1144 MarginInfo& marginInfo = layoutInfo.marginInfo(); | 1144 MarginInfo& marginInfo = layoutInfo.marginInfo(); |
| 1145 | 1145 |
| 1146 // Fieldsets need to find their legend and position it inside the border of
the object. | |
| 1147 // The legend then gets skipped during normal layout. The same is true for r
uby text. | |
| 1148 // It doesn't get included in the normal layout process but is instead skipp
ed. | |
| 1149 LayoutObject* childToExclude = layoutSpecialExcludedChild(relayoutChildren,
layoutScope); | 1146 LayoutObject* childToExclude = layoutSpecialExcludedChild(relayoutChildren,
layoutScope); |
| 1150 | 1147 |
| 1151 LayoutBox* next = firstChildBox(); | 1148 LayoutBox* next = firstChildBox(); |
| 1152 LayoutBox* lastNormalFlowChild = nullptr; | 1149 LayoutBox* lastNormalFlowChild = nullptr; |
| 1153 | 1150 |
| 1154 while (next) { | 1151 while (next) { |
| 1155 LayoutBox* child = next; | 1152 LayoutBox* child = next; |
| 1156 next = child->nextSiblingBox(); | 1153 next = child->nextSiblingBox(); |
| 1157 | 1154 |
| 1158 child->setMayNeedPaintInvalidation(); | 1155 child->setMayNeedPaintInvalidation(); |
| 1159 | 1156 |
| 1160 if (childToExclude == child) | 1157 if (childToExclude == child) |
| 1161 continue; // Skip this child, since it will be positioned by the spe
cialized subclass (fieldsets and ruby runs). | 1158 continue; // Skip this child, since it will be positioned by the spe
cialized subclass (ruby runs). |
| 1162 | 1159 |
| 1163 updateBlockChildDirtyBitsBeforeLayout(relayoutChildren, *child); | 1160 updateBlockChildDirtyBitsBeforeLayout(relayoutChildren, *child); |
| 1164 | 1161 |
| 1165 if (child->isOutOfFlowPositioned()) { | 1162 if (child->isOutOfFlowPositioned()) { |
| 1166 child->containingBlock()->insertPositionedObject(child); | 1163 child->containingBlock()->insertPositionedObject(child); |
| 1167 adjustPositionedBlock(*child, layoutInfo); | 1164 adjustPositionedBlock(*child, layoutInfo); |
| 1168 continue; | 1165 continue; |
| 1169 } | 1166 } |
| 1170 if (child->isFloating()) { | 1167 if (child->isFloating()) { |
| 1171 insertFloatingObject(*child); | 1168 insertFloatingObject(*child); |
| (...skipping 1218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2390 newBlock->addChild(newChild); | 2387 newBlock->addChild(newChild); |
| 2391 newBlock->reparentSubsequentFloatingOrOutOfFlowSiblings(); | 2388 newBlock->reparentSubsequentFloatingOrOutOfFlowSiblings(); |
| 2392 return; | 2389 return; |
| 2393 } | 2390 } |
| 2394 } | 2391 } |
| 2395 | 2392 |
| 2396 // Skip the LayoutBlock override, since that one deals with anonymous child
insertion in a way | 2393 // Skip the LayoutBlock override, since that one deals with anonymous child
insertion in a way |
| 2397 // that isn't sufficient for us, and can only cause trouble at this point. | 2394 // that isn't sufficient for us, and can only cause trouble at this point. |
| 2398 LayoutBox::addChild(newChild, beforeChild); | 2395 LayoutBox::addChild(newChild, beforeChild); |
| 2399 | 2396 |
| 2400 if (madeBoxesNonInline && parent() && isAnonymousBlock() && parent()->isLayo
utBlock()) { | 2397 if (madeBoxesNonInline && parent() && isAnonymousBlock() && parent()->isLayo
utBlock() && !parent()->createsAnonymousWrapper()) { |
| 2401 toLayoutBlock(parent())->removeLeftoverAnonymousBlock(this); | 2398 toLayoutBlock(parent())->removeLeftoverAnonymousBlock(this); |
| 2402 // |this| may be dead now. | 2399 // |this| may be dead now. |
| 2403 } | 2400 } |
| 2404 } | 2401 } |
| 2405 | 2402 |
| 2406 static bool isMergeableAnonymousBlock(const LayoutBlockFlow* block) | 2403 static bool isMergeableAnonymousBlock(const LayoutBlockFlow* block) |
| 2407 { | 2404 { |
| 2408 return block->isAnonymousBlock() && !block->continuation() && !block->beingD
estroyed() && !block->isRubyRun() && !block->isRubyBase(); | 2405 return block->isAnonymousBlock() && !block->continuation() && !block->beingD
estroyed() && !block->isRubyRun() && !block->isRubyBase(); |
| 2409 } | 2406 } |
| 2410 | 2407 |
| (...skipping 1105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3516 } | 3513 } |
| 3517 | 3514 |
| 3518 if (type == NoFlowThread || multiColumnFlowThread()) | 3515 if (type == NoFlowThread || multiColumnFlowThread()) |
| 3519 return; | 3516 return; |
| 3520 | 3517 |
| 3521 // Ruby elements manage child insertion in a special way, and would mess up
insertion of the | 3518 // Ruby elements manage child insertion in a special way, and would mess up
insertion of the |
| 3522 // flow thread. The flow thread needs to be a direct child of the multicol b
lock (|this|). | 3519 // flow thread. The flow thread needs to be a direct child of the multicol b
lock (|this|). |
| 3523 if (isRuby()) | 3520 if (isRuby()) |
| 3524 return; | 3521 return; |
| 3525 | 3522 |
| 3526 // Fieldsets look for a legend special child (layoutSpecialExcludedChild()).
We currently only | |
| 3527 // support one special child per layout object, and the flow thread would ma
ke for a second one. | |
| 3528 if (isFieldset()) | |
| 3529 return; | |
| 3530 | |
| 3531 // Form controls are replaced content, and are therefore not supposed to sup
port multicol. | 3523 // Form controls are replaced content, and are therefore not supposed to sup
port multicol. |
| 3532 if (isFileUploadControl() || isTextControl() || isListBox()) | 3524 if (isFileUploadControl() || isTextControl() || isListBox()) |
| 3533 return; | 3525 return; |
| 3534 | 3526 |
| 3535 LayoutMultiColumnFlowThread* flowThread = createMultiColumnFlowThread(type); | 3527 LayoutMultiColumnFlowThread* flowThread = createMultiColumnFlowThread(type); |
| 3536 addChild(flowThread); | 3528 addChild(flowThread); |
| 3537 | 3529 |
| 3538 // Check that addChild() put the flow thread as a direct child, and didn't d
o fancy things. | 3530 // Check that addChild() put the flow thread as a direct child, and didn't d
o fancy things. |
| 3539 ASSERT(flowThread->parent() == this); | 3531 ASSERT(flowThread->parent() == this); |
| 3540 | 3532 |
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3775 if (!rect.isEmpty()) | 3767 if (!rect.isEmpty()) |
| 3776 rects.append(rect); | 3768 rects.append(rect); |
| 3777 } | 3769 } |
| 3778 } | 3770 } |
| 3779 | 3771 |
| 3780 if (inlineElementContinuation) | 3772 if (inlineElementContinuation) |
| 3781 inlineElementContinuation->addOutlineRects(rects, additionalOffset + (in
lineElementContinuation->containingBlock()->location() - location()), includeBlo
ckOverflows); | 3773 inlineElementContinuation->addOutlineRects(rects, additionalOffset + (in
lineElementContinuation->containingBlock()->location() - location()), includeBlo
ckOverflows); |
| 3782 } | 3774 } |
| 3783 | 3775 |
| 3784 } // namespace blink | 3776 } // namespace blink |
| OLD | NEW |