| 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 2968 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2979 AddChildBeforeDescendant(new_child, before_child); | 2979 AddChildBeforeDescendant(new_child, before_child); |
| 2980 return; | 2980 return; |
| 2981 } | 2981 } |
| 2982 | 2982 |
| 2983 bool made_boxes_non_inline = false; | 2983 bool made_boxes_non_inline = false; |
| 2984 | 2984 |
| 2985 // A block has to either have all of its children inline, or all of its | 2985 // A block has to either have all of its children inline, or all of its |
| 2986 // children as blocks. | 2986 // children as blocks. |
| 2987 // So, if our children are currently inline and a block child has to be | 2987 // So, if our children are currently inline and a block child has to be |
| 2988 // inserted, we move all our inline children into anonymous block boxes. | 2988 // inserted, we move all our inline children into anonymous block boxes. |
| 2989 bool child_is_block_level = | 2989 bool child_is_block_level = !new_child->IsInline(); |
| 2990 !new_child->IsInline() && !new_child->IsFloatingOrOutOfFlowPositioned(); | 2990 |
| 2991 // ** LayoutNG ** |
| 2992 // We want to use the block layout for out of flow positioned |
| 2993 // objects when they go in front of inline blocks or if they are just |
| 2994 // standalone objects. |
| 2995 // Example 1: |
| 2996 // <div id="zero"><div id="oof"></div></div> |
| 2997 // Legacy Layout: #oof is in inline context. |
| 2998 // LayoutNG: #oof is in block context. |
| 2999 // |
| 3000 // Example 2: |
| 3001 // <div id=container><oof></oof>Hello!</div> |
| 3002 // Legacy Layout: oof is in inline context. |
| 3003 // LayoutNG: oof is in block context. |
| 3004 // |
| 3005 // Example 3: |
| 3006 // <div id=container>Hello!<oof></oof></div> |
| 3007 // Legacy Layout: oof is in inline context. |
| 3008 // LayoutNG: oof is in inline context. |
| 3009 bool layout_ng_enabled = RuntimeEnabledFeatures::layoutNGEnabled(); |
| 3010 if (new_child->IsFloatingOrOutOfFlowPositioned()) |
| 3011 child_is_block_level = layout_ng_enabled && !FirstChild(); |
| 3012 |
| 2991 if (ChildrenInline()) { | 3013 if (ChildrenInline()) { |
| 2992 if (child_is_block_level) { | 3014 if (child_is_block_level) { |
| 2993 // Wrap the inline content in anonymous blocks, to allow for the new block | 3015 // Wrap the inline content in anonymous blocks, to allow for the new block |
| 2994 // child to be inserted. | 3016 // child to be inserted. |
| 2995 MakeChildrenNonInline(before_child); | 3017 MakeChildrenNonInline(before_child); |
| 2996 made_boxes_non_inline = true; | 3018 made_boxes_non_inline = true; |
| 2997 | 3019 |
| 2998 if (before_child && before_child->Parent() != this) { | 3020 if (before_child && before_child->Parent() != this) { |
| 2999 before_child = before_child->Parent(); | 3021 before_child = before_child->Parent(); |
| 3000 DCHECK(before_child->IsAnonymousBlock()); | 3022 DCHECK(before_child->IsAnonymousBlock()); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 3014 if (after_child && after_child->IsAnonymousBlock()) { | 3036 if (after_child && after_child->IsAnonymousBlock()) { |
| 3015 after_child->AddChild(new_child); | 3037 after_child->AddChild(new_child); |
| 3016 return; | 3038 return; |
| 3017 } | 3039 } |
| 3018 | 3040 |
| 3019 if (new_child->IsInline()) { | 3041 if (new_child->IsInline()) { |
| 3020 // No suitable existing anonymous box - create a new one. | 3042 // No suitable existing anonymous box - create a new one. |
| 3021 LayoutBlockFlow* new_block = ToLayoutBlockFlow(CreateAnonymousBlock()); | 3043 LayoutBlockFlow* new_block = ToLayoutBlockFlow(CreateAnonymousBlock()); |
| 3022 LayoutBox::AddChild(new_block, before_child); | 3044 LayoutBox::AddChild(new_block, before_child); |
| 3023 // Reparent adjacent floating or out-of-flow siblings to the new box. | 3045 // Reparent adjacent floating or out-of-flow siblings to the new box. |
| 3024 new_block->ReparentPrecedingFloatingOrOutOfFlowSiblings(); | 3046 if (!layout_ng_enabled) |
| 3047 new_block->ReparentPrecedingFloatingOrOutOfFlowSiblings(); |
| 3025 new_block->AddChild(new_child); | 3048 new_block->AddChild(new_child); |
| 3026 new_block->ReparentSubsequentFloatingOrOutOfFlowSiblings(); | 3049 new_block->ReparentSubsequentFloatingOrOutOfFlowSiblings(); |
| 3027 return; | 3050 return; |
| 3028 } | 3051 } |
| 3029 } | 3052 } |
| 3030 | 3053 |
| 3031 // Skip the LayoutBlock override, since that one deals with anonymous child | 3054 // Skip the LayoutBlock override, since that one deals with anonymous child |
| 3032 // insertion in a way that isn't sufficient for us, and can only cause trouble | 3055 // insertion in a way that isn't sufficient for us, and can only cause trouble |
| 3033 // at this point. | 3056 // at this point. |
| 3034 LayoutBox::AddChild(new_child, before_child); | 3057 LayoutBox::AddChild(new_child, before_child); |
| (...skipping 1634 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4669 return LayoutBlock::DeprecatedInvalidatePaint(paint_invalidation_state); | 4692 return LayoutBlock::DeprecatedInvalidatePaint(paint_invalidation_state); |
| 4670 } | 4693 } |
| 4671 | 4694 |
| 4672 void LayoutBlockFlow::InvalidateDisplayItemClients( | 4695 void LayoutBlockFlow::InvalidateDisplayItemClients( |
| 4673 PaintInvalidationReason invalidation_reason) const { | 4696 PaintInvalidationReason invalidation_reason) const { |
| 4674 BlockFlowPaintInvalidator(*this).InvalidateDisplayItemClients( | 4697 BlockFlowPaintInvalidator(*this).InvalidateDisplayItemClients( |
| 4675 invalidation_reason); | 4698 invalidation_reason); |
| 4676 } | 4699 } |
| 4677 | 4700 |
| 4678 } // namespace blink | 4701 } // namespace blink |
| OLD | NEW |