Index: third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc |
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc b/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc |
index 1da0c530ef4f5112401a89a38d93b2fedd1c54b9..1c96bc0f9fd4f70ec55328af5010f3268e58ff3e 100644 |
--- a/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc |
+++ b/third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc |
@@ -37,17 +37,20 @@ bool NGBlockLayoutAlgorithm::Layout(const NGConstraintSpace* constraint_space, |
NGPhysicalFragment** out) { |
switch (state_) { |
case kStateInit: { |
+ border_and_padding_ = |
+ computeBorders(*style_) + computePadding(*constraint_space, *style_); |
+ |
LayoutUnit inline_size = |
computeInlineSizeForFragment(*constraint_space, *style_); |
// TODO(layout-ng): For quirks mode, should we pass blockSize instead of |
// -1? |
LayoutUnit block_size = computeBlockSizeForFragment( |
*constraint_space, *style_, LayoutUnit(-1)); |
- constraint_space_for_children_ = |
- new NGConstraintSpace(*constraint_space, NGLogicalOffset(), |
- NGLogicalSize(inline_size, block_size)); |
- content_size_ = |
- computeBorderAndPaddingBlockStart(*constraint_space, *style_); |
+ constraint_space_for_children_ = new NGConstraintSpace( |
+ *constraint_space, NGLogicalOffset(), |
+ NGLogicalSize(inline_size - border_and_padding_.InlineSum(), |
+ block_size - border_and_padding_.BlockSum())); |
+ content_size_ = border_and_padding_.block_start; |
builder_ = new NGFragmentBuilder(NGPhysicalFragmentBase::FragmentBox); |
builder_->SetInlineSize(inline_size).SetBlockSize(block_size); |
@@ -66,21 +69,17 @@ bool NGBlockLayoutAlgorithm::Layout(const NGConstraintSpace* constraint_space, |
LayoutUnit margin_block_start = |
CollapseMargins(child_margins, fragment->MarginStrut()); |
- // TODO(layout-ng): This is probably something we shouldn't calculate |
- // over and over again for each child. |
- LayoutUnit content_inline_start_edge = |
- computeBorderAndPaddingInlineStart(*constraint_space, *style_); |
- |
// TODO(layout-ng): Support auto margins |
builder_->AddChild(fragment, |
- NGLogicalOffset(content_inline_start_edge + |
+ NGLogicalOffset(border_and_padding_.inline_start + |
child_margins.inline_start, |
content_size_ + margin_block_start)); |
content_size_ += fragment->BlockSize() + margin_block_start; |
max_inline_size_ = |
- std::max(max_inline_size_, |
- fragment->InlineSize() + child_margins.InlineSum()); |
+ std::max(max_inline_size_, fragment->InlineSize() + |
+ child_margins.InlineSum() + |
+ border_and_padding_.InlineSum()); |
current_child_ = current_child_->NextSibling(); |
if (current_child_) |
return false; |
@@ -89,6 +88,7 @@ bool NGBlockLayoutAlgorithm::Layout(const NGConstraintSpace* constraint_space, |
return false; |
} |
case kStateFinalize: { |
+ content_size_ += border_and_padding_.block_end; |
// Recompute the block-axis size now that we know our content size. |
LayoutUnit block_size = computeBlockSizeForFragment( |
*constraint_space, *style_, content_size_); |