Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(14)

Side by Side Diff: third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp

Issue 2847823002: Make leading OOF objects to be handled by block layout in LayoutNG (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 2966 matching lines...) Expand 10 before | Expand all | Expand 10 after
2977 AddChildBeforeDescendant(new_child, before_child); 2977 AddChildBeforeDescendant(new_child, before_child);
2978 return; 2978 return;
2979 } 2979 }
2980 2980
2981 bool made_boxes_non_inline = false; 2981 bool made_boxes_non_inline = false;
2982 2982
2983 // A block has to either have all of its children inline, or all of its 2983 // A block has to either have all of its children inline, or all of its
2984 // children as blocks. 2984 // children as blocks.
2985 // So, if our children are currently inline and a block child has to be 2985 // So, if our children are currently inline and a block child has to be
2986 // inserted, we move all our inline children into anonymous block boxes. 2986 // inserted, we move all our inline children into anonymous block boxes.
2987 bool child_is_block_level = 2987 bool child_is_block_level = !new_child->IsInline();
2988 !new_child->IsInline() && !new_child->IsFloatingOrOutOfFlowPositioned(); 2988
2989 // ** LayoutNG **
2990 // We want to use the block layout for out of flow positioned
2991 // objects when they go in front of inline blocks or if they are just
2992 // standalone objects.
2993 // Example 1:
2994 // <div id="zero"><div id="oof"></div></div>
2995 // Legacy Layout: #oof is in inline context.
2996 // LayoutNG: #oof is in block context.
2997 //
2998 // Example 2:
2999 // <div id=container><oof></oof>Hello!</div>
3000 // Legacy Layout: oof is in inline context.
3001 // LayoutNG: oof is in block context.
3002 //
3003 // Example 3:
3004 // <div id=container>Hello!<oof></oof></div>
3005 // Legacy Layout: oof is in inline context.
3006 // LayoutNG: oof is in inline context.
ikilpatrick 2017/04/27 20:34:23 did we want the end children in the inline context
3007 bool layout_ng_enabled = RuntimeEnabledFeatures::layoutNGEnabled();
3008 if (new_child->IsFloatingOrOutOfFlowPositioned())
3009 child_is_block_level = layout_ng_enabled && !FirstChild();
3010
2989 if (ChildrenInline()) { 3011 if (ChildrenInline()) {
2990 if (child_is_block_level) { 3012 if (child_is_block_level) {
2991 // Wrap the inline content in anonymous blocks, to allow for the new block 3013 // Wrap the inline content in anonymous blocks, to allow for the new block
2992 // child to be inserted. 3014 // child to be inserted.
2993 MakeChildrenNonInline(before_child); 3015 MakeChildrenNonInline(before_child);
2994 made_boxes_non_inline = true; 3016 made_boxes_non_inline = true;
2995 3017
2996 if (before_child && before_child->Parent() != this) { 3018 if (before_child && before_child->Parent() != this) {
2997 before_child = before_child->Parent(); 3019 before_child = before_child->Parent();
2998 DCHECK(before_child->IsAnonymousBlock()); 3020 DCHECK(before_child->IsAnonymousBlock());
(...skipping 1656 matching lines...) Expand 10 before | Expand all | Expand 10 after
4655 return LayoutBlock::InvalidatePaintIfNeeded(paint_invalidation_state); 4677 return LayoutBlock::InvalidatePaintIfNeeded(paint_invalidation_state);
4656 } 4678 }
4657 4679
4658 void LayoutBlockFlow::InvalidateDisplayItemClients( 4680 void LayoutBlockFlow::InvalidateDisplayItemClients(
4659 PaintInvalidationReason invalidation_reason) const { 4681 PaintInvalidationReason invalidation_reason) const {
4660 BlockFlowPaintInvalidator(*this).InvalidateDisplayItemClients( 4682 BlockFlowPaintInvalidator(*this).InvalidateDisplayItemClients(
4661 invalidation_reason); 4683 invalidation_reason);
4662 } 4684 }
4663 4685
4664 } // namespace blink 4686 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698