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 1145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1156 } | 1156 } |
1157 } | 1157 } |
1158 | 1158 |
1159 void LayoutBlockFlow::layoutBlockChildren(bool relayoutChildren, SubtreeLayoutSc
ope& layoutScope, LayoutUnit beforeEdge, LayoutUnit afterEdge) | 1159 void LayoutBlockFlow::layoutBlockChildren(bool relayoutChildren, SubtreeLayoutSc
ope& layoutScope, LayoutUnit beforeEdge, LayoutUnit afterEdge) |
1160 { | 1160 { |
1161 dirtyForLayoutFromPercentageHeightDescendants(layoutScope); | 1161 dirtyForLayoutFromPercentageHeightDescendants(layoutScope); |
1162 | 1162 |
1163 BlockChildrenLayoutInfo layoutInfo(this, beforeEdge, afterEdge); | 1163 BlockChildrenLayoutInfo layoutInfo(this, beforeEdge, afterEdge); |
1164 MarginInfo& marginInfo = layoutInfo.marginInfo(); | 1164 MarginInfo& marginInfo = layoutInfo.marginInfo(); |
1165 | 1165 |
1166 // Fieldsets need to find their legend and position it inside the border of
the object. | |
1167 // The legend then gets skipped during normal layout. The same is true for r
uby text. | |
1168 // It doesn't get included in the normal layout process but is instead skipp
ed. | |
1169 LayoutObject* childToExclude = layoutSpecialExcludedChild(relayoutChildren,
layoutScope); | 1166 LayoutObject* childToExclude = layoutSpecialExcludedChild(relayoutChildren,
layoutScope); |
1170 | 1167 |
1171 LayoutBox* next = firstChildBox(); | 1168 LayoutBox* next = firstChildBox(); |
1172 LayoutBox* lastNormalFlowChild = nullptr; | 1169 LayoutBox* lastNormalFlowChild = nullptr; |
1173 | 1170 |
1174 while (next) { | 1171 while (next) { |
1175 LayoutBox* child = next; | 1172 LayoutBox* child = next; |
1176 next = child->nextSiblingBox(); | 1173 next = child->nextSiblingBox(); |
1177 | 1174 |
1178 child->setMayNeedPaintInvalidation(); | 1175 child->setMayNeedPaintInvalidation(); |
1179 | 1176 |
1180 if (childToExclude == child) | 1177 if (childToExclude == child) |
1181 continue; // Skip this child, since it will be positioned by the spe
cialized subclass (fieldsets and ruby runs). | 1178 continue; // Skip this child, since it will be positioned by the spe
cialized subclass (ruby runs). |
1182 | 1179 |
1183 updateBlockChildDirtyBitsBeforeLayout(relayoutChildren, *child); | 1180 updateBlockChildDirtyBitsBeforeLayout(relayoutChildren, *child); |
1184 | 1181 |
1185 if (child->isOutOfFlowPositioned()) { | 1182 if (child->isOutOfFlowPositioned()) { |
1186 child->containingBlock()->insertPositionedObject(child); | 1183 child->containingBlock()->insertPositionedObject(child); |
1187 adjustPositionedBlock(*child, layoutInfo); | 1184 adjustPositionedBlock(*child, layoutInfo); |
1188 continue; | 1185 continue; |
1189 } | 1186 } |
1190 if (child->isFloating()) { | 1187 if (child->isFloating()) { |
1191 insertFloatingObject(*child); | 1188 insertFloatingObject(*child); |
(...skipping 1211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2403 newBlock->addChild(newChild); | 2400 newBlock->addChild(newChild); |
2404 newBlock->reparentSubsequentFloatingOrOutOfFlowSiblings(); | 2401 newBlock->reparentSubsequentFloatingOrOutOfFlowSiblings(); |
2405 return; | 2402 return; |
2406 } | 2403 } |
2407 } | 2404 } |
2408 | 2405 |
2409 // Skip the LayoutBlock override, since that one deals with anonymous child
insertion in a way | 2406 // Skip the LayoutBlock override, since that one deals with anonymous child
insertion in a way |
2410 // that isn't sufficient for us, and can only cause trouble at this point. | 2407 // that isn't sufficient for us, and can only cause trouble at this point. |
2411 LayoutBox::addChild(newChild, beforeChild); | 2408 LayoutBox::addChild(newChild, beforeChild); |
2412 | 2409 |
2413 if (madeBoxesNonInline && parent() && isAnonymousBlock() && parent()->isLayo
utBlock()) { | 2410 if (madeBoxesNonInline && parent() && isAnonymousBlock() && parent()->isLayo
utBlock() && !parent()->createsAnonymousWrapper()) { |
2414 toLayoutBlock(parent())->removeLeftoverAnonymousBlock(this); | 2411 toLayoutBlock(parent())->removeLeftoverAnonymousBlock(this); |
2415 // |this| may be dead now. | 2412 // |this| may be dead now. |
2416 } | 2413 } |
2417 } | 2414 } |
2418 | 2415 |
2419 static bool isMergeableAnonymousBlock(const LayoutBlockFlow* block) | 2416 static bool isMergeableAnonymousBlock(const LayoutBlockFlow* block) |
2420 { | 2417 { |
2421 return block->isAnonymousBlock() && !block->continuation() && !block->beingD
estroyed() && !block->isRubyRun() && !block->isRubyBase(); | 2418 return block->isAnonymousBlock() && !block->continuation() && !block->beingD
estroyed() && !block->isRubyRun() && !block->isRubyBase(); |
2422 } | 2419 } |
2423 | 2420 |
(...skipping 1057 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3481 } | 3478 } |
3482 | 3479 |
3483 if (type == NoFlowThread || multiColumnFlowThread()) | 3480 if (type == NoFlowThread || multiColumnFlowThread()) |
3484 return; | 3481 return; |
3485 | 3482 |
3486 // Ruby elements manage child insertion in a special way, and would mess up
insertion of the | 3483 // Ruby elements manage child insertion in a special way, and would mess up
insertion of the |
3487 // flow thread. The flow thread needs to be a direct child of the multicol b
lock (|this|). | 3484 // flow thread. The flow thread needs to be a direct child of the multicol b
lock (|this|). |
3488 if (isRuby()) | 3485 if (isRuby()) |
3489 return; | 3486 return; |
3490 | 3487 |
3491 // Fieldsets look for a legend special child (layoutSpecialExcludedChild()).
We currently only | |
3492 // support one special child per layout object, and the flow thread would ma
ke for a second one. | |
3493 if (isFieldset()) | |
3494 return; | |
3495 | |
3496 // Form controls are replaced content, and are therefore not supposed to sup
port multicol. | 3488 // Form controls are replaced content, and are therefore not supposed to sup
port multicol. |
3497 if (isFileUploadControl() || isTextControl() || isListBox()) | 3489 if (isFileUploadControl() || isTextControl() || isListBox()) |
3498 return; | 3490 return; |
3499 | 3491 |
3500 LayoutMultiColumnFlowThread* flowThread = createMultiColumnFlowThread(type); | 3492 LayoutMultiColumnFlowThread* flowThread = createMultiColumnFlowThread(type); |
3501 addChild(flowThread); | 3493 addChild(flowThread); |
3502 | 3494 |
3503 // Check that addChild() put the flow thread as a direct child, and didn't d
o fancy things. | 3495 // Check that addChild() put the flow thread as a direct child, and didn't d
o fancy things. |
3504 ASSERT(flowThread->parent() == this); | 3496 ASSERT(flowThread->parent() == this); |
3505 | 3497 |
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3753 | 3745 |
3754 return LayoutBlock::invalidatePaintIfNeeded(paintInvalidationState); | 3746 return LayoutBlock::invalidatePaintIfNeeded(paintInvalidationState); |
3755 } | 3747 } |
3756 | 3748 |
3757 void LayoutBlockFlow::invalidateDisplayItemClients(PaintInvalidationReason inval
idationReason) const | 3749 void LayoutBlockFlow::invalidateDisplayItemClients(PaintInvalidationReason inval
idationReason) const |
3758 { | 3750 { |
3759 BlockFlowPaintInvalidator(*this).invalidateDisplayItemClients(invalidationRe
ason); | 3751 BlockFlowPaintInvalidator(*this).invalidateDisplayItemClients(invalidationRe
ason); |
3760 } | 3752 } |
3761 | 3753 |
3762 } // namespace blink | 3754 } // namespace blink |
OLD | NEW |