| Index: third_party/WebKit/Source/core/layout/ng/ng_box.cc
|
| diff --git a/third_party/WebKit/Source/core/layout/ng/ng_box.cc b/third_party/WebKit/Source/core/layout/ng/ng_box.cc
|
| index c5664492f8c7902d716e90967233c1b5a5c55ec8..72f3af367574b0289697a268044e420b502fdce1 100644
|
| --- a/third_party/WebKit/Source/core/layout/ng/ng_box.cc
|
| +++ b/third_party/WebKit/Source/core/layout/ng/ng_box.cc
|
| @@ -55,58 +55,11 @@ bool NGBox::Layout(const NGConstraintSpace* constraint_space,
|
| fragment_ = fragment;
|
|
|
| if (layout_box_) {
|
| - layout_box_->setWidth(fragment_->Width());
|
| - layout_box_->setHeight(fragment_->Height());
|
| - NGBoxStrut border_and_padding =
|
| - computeBorders(*Style()) +
|
| - computePadding(*constraint_space, *Style());
|
| - LayoutUnit intrinsic_logical_height =
|
| - layout_box_->style()->isHorizontalWritingMode()
|
| - ? fragment_->HeightOverflow()
|
| - : fragment_->WidthOverflow();
|
| - intrinsic_logical_height -= border_and_padding.BlockSum();
|
| - layout_box_->setIntrinsicContentLogicalHeight(intrinsic_logical_height);
|
| -
|
| - // Ensure the position of the children are copied across to the
|
| - // LayoutObject tree.
|
| - for (NGBox* box = FirstChild(); box; box = box->NextSibling()) {
|
| - if (box->fragment_)
|
| - box->PositionUpdated();
|
| - }
|
| -
|
| - if (layout_box_->isLayoutBlock())
|
| - toLayoutBlock(layout_box_)->layoutPositionedObjects(true);
|
| - layout_box_->clearNeedsLayout();
|
| - if (layout_box_->isLayoutBlockFlow()) {
|
| - toLayoutBlockFlow(layout_box_)->updateIsSelfCollapsing();
|
| - }
|
| + CopyFragmentDataToLayoutBox(*constraint_space);
|
| }
|
| } else {
|
| DCHECK(layout_box_);
|
| - // TODO(layout-ng): If fixedSize is true, set the override width/height too
|
| - NGLogicalSize container_size = constraint_space->ContainerSize();
|
| - layout_box_->setOverrideContainingBlockContentLogicalWidth(
|
| - container_size.inline_size);
|
| - layout_box_->setOverrideContainingBlockContentLogicalHeight(
|
| - container_size.block_size);
|
| - if (layout_box_->isLayoutNGBlockFlow() && layout_box_->needsLayout()) {
|
| - toLayoutNGBlockFlow(layout_box_)->LayoutBlockFlow::layoutBlock(true);
|
| - } else {
|
| - layout_box_->forceLayout();
|
| - }
|
| - LayoutRect overflow = layout_box_->layoutOverflowRect();
|
| - // TODO(layout-ng): This does not handle writing modes correctly (for
|
| - // overflow)
|
| - NGFragmentBuilder builder(NGPhysicalFragmentBase::FragmentBox);
|
| - builder.SetInlineSize(layout_box_->logicalWidth())
|
| - .SetBlockSize(layout_box_->logicalHeight())
|
| - .SetDirection(
|
| - FromPlatformDirection(layout_box_->styleRef().direction()))
|
| - .SetWritingMode(
|
| - FromPlatformWritingMode(layout_box_->styleRef().getWritingMode()))
|
| - .SetInlineOverflow(overflow.width())
|
| - .SetBlockOverflow(overflow.height());
|
| - fragment_ = builder.ToFragment();
|
| + fragment_ = RunOldLayout(*constraint_space);
|
| }
|
| *out = new NGFragment(constraint_space->WritingMode(),
|
| FromPlatformDirection(Style()->direction()),
|
| @@ -165,4 +118,61 @@ bool NGBox::CanUseNewLayout() {
|
| const LayoutBlockFlow* block_flow = toLayoutBlockFlow(layout_box_);
|
| return !block_flow->childrenInline() || !block_flow->firstChild();
|
| }
|
| +
|
| +void NGBox::CopyFragmentDataToLayoutBox(
|
| + const NGConstraintSpace& constraint_space) {
|
| + DCHECK(layout_box_);
|
| + layout_box_->setWidth(fragment_->Width());
|
| + layout_box_->setHeight(fragment_->Height());
|
| + NGBoxStrut border_and_padding =
|
| + computeBorders(*Style()) + computePadding(constraint_space, *Style());
|
| + LayoutUnit intrinsic_logical_height =
|
| + layout_box_->style()->isHorizontalWritingMode()
|
| + ? fragment_->HeightOverflow()
|
| + : fragment_->WidthOverflow();
|
| + intrinsic_logical_height -= border_and_padding.BlockSum();
|
| + layout_box_->setIntrinsicContentLogicalHeight(intrinsic_logical_height);
|
| +
|
| + // Ensure the position of the children are copied across to the
|
| + // LayoutObject tree.
|
| + for (NGBox* box = FirstChild(); box; box = box->NextSibling()) {
|
| + if (box->fragment_)
|
| + box->PositionUpdated();
|
| + }
|
| +
|
| + if (layout_box_->isLayoutBlock())
|
| + toLayoutBlock(layout_box_)->layoutPositionedObjects(true);
|
| + layout_box_->clearNeedsLayout();
|
| + if (layout_box_->isLayoutBlockFlow()) {
|
| + toLayoutBlockFlow(layout_box_)->updateIsSelfCollapsing();
|
| + }
|
| +}
|
| +
|
| +NGPhysicalFragment* NGBox::RunOldLayout(
|
| + const NGConstraintSpace& constraint_space) {
|
| + // TODO(layout-ng): If fixedSize is true, set the override width/height too
|
| + NGLogicalSize container_size = constraint_space.ContainerSize();
|
| + layout_box_->setOverrideContainingBlockContentLogicalWidth(
|
| + container_size.inline_size);
|
| + layout_box_->setOverrideContainingBlockContentLogicalHeight(
|
| + container_size.block_size);
|
| + if (layout_box_->isLayoutNGBlockFlow() && layout_box_->needsLayout()) {
|
| + toLayoutNGBlockFlow(layout_box_)->LayoutBlockFlow::layoutBlock(true);
|
| + } else {
|
| + layout_box_->forceLayout();
|
| + }
|
| + LayoutRect overflow = layout_box_->layoutOverflowRect();
|
| + // TODO(layout-ng): This does not handle writing modes correctly (for
|
| + // overflow)
|
| + NGFragmentBuilder builder(NGPhysicalFragmentBase::FragmentBox);
|
| + builder.SetInlineSize(layout_box_->logicalWidth())
|
| + .SetBlockSize(layout_box_->logicalHeight())
|
| + .SetDirection(FromPlatformDirection(layout_box_->styleRef().direction()))
|
| + .SetWritingMode(
|
| + FromPlatformWritingMode(layout_box_->styleRef().getWritingMode()))
|
| + .SetInlineOverflow(overflow.width())
|
| + .SetBlockOverflow(overflow.height());
|
| + return builder.ToFragment();
|
| +}
|
| +
|
| } // namespace blink
|
|
|