Commit 3584222f authored by Christian Biesinger's avatar Christian Biesinger Committed by Commit Bot

[layoutng] Store borders on fragments as well

This avoids recomputing them later.

Also, changes RunOldLayout to use legacy layout to
compute border/padding to store on the fragment,
which seems more correct.

R=eae@chromium.org

Bug: 635619
Cq-Include-Trybots: luci.chromium.try:linux_layout_tests_layout_ng
Change-Id: Id659d7c92eae81431d8e75a26ac3973421afc3d0
Reviewed-on: https://chromium-review.googlesource.com/1169634
Commit-Queue: Christian Biesinger <cbiesinger@chromium.org>
Reviewed-by: default avatarEmil A Eklund <eae@chromium.org>
Cr-Commit-Position: refs/heads/master@{#582339}
parent f5e8bf69
......@@ -149,6 +149,8 @@ void LayoutNGBlockFlow::UpdateOutOfFlowBlockLayout() {
container_builder.SetInlineSize(container_border_box_logical_width);
container_builder.SetBlockSize(container_border_box_logical_height);
container_builder.SetBorders(
ComputeBorders(*constraint_space, *container_style));
container_builder.SetPadding(
ComputePadding(*constraint_space, *container_style));
......
......@@ -635,6 +635,7 @@ scoped_refptr<NGLayoutResult> NGBlockLayoutAlgorithm::Layout() {
container_builder_.SetEndMarginStrut(end_margin_strut);
container_builder_.SetIntrinsicBlockSize(intrinsic_block_size_);
container_builder_.SetPadding(padding);
container_builder_.SetBorders(borders);
// We only finalize for fragmentation if the fragment has a BFC block offset.
// This may occur with a zero block size fragment. We need to know the BFC
......
......@@ -446,7 +446,7 @@ void NGBlockNode::CopyFragmentDataToLayoutBox(
logical_height += fragment_logical_size.block_size;
intrinsic_content_logical_height += layout_result.IntrinsicBlockSize();
NGBoxStrut borders = ComputeBorders(constraint_space, Style());
NGBoxStrut borders = fragment.Borders();
NGBoxStrut scrollbars = GetScrollbarSizes();
NGBoxStrut padding = fragment.Padding();
NGBoxStrut border_scrollbar_padding = borders + scrollbars + padding;
......@@ -724,7 +724,12 @@ scoped_refptr<NGLayoutResult> NGBlockNode::RunOldLayout(
builder.SetIsOldLayoutRoot();
builder.SetInlineSize(box_size.inline_size);
builder.SetBlockSize(box_size.block_size);
builder.SetPadding(ComputePadding(constraint_space, box_->StyleRef()));
NGBoxStrut borders(box_->BorderStart(), box_->BorderEnd(),
box_->BorderBefore(), box_->BorderAfter());
builder.SetBorders(borders);
NGBoxStrut padding(box_->PaddingStart(), box_->PaddingEnd(),
box_->PaddingBefore(), box_->PaddingAfter());
builder.SetPadding(padding);
CopyBaselinesFromOldLayout(constraint_space, &builder);
UpdateShapeOutsideInfoIfNeeded(
......
......@@ -83,6 +83,12 @@ NGLineHeightMetrics NGBoxFragment::BaselineMetrics(
return NGLineHeightMetrics(block_size - block_size / 2, block_size / 2);
}
NGBoxStrut NGBoxFragment::Borders() const {
const auto& physical_fragment = ToNGPhysicalBoxFragment(physical_fragment_);
return physical_fragment.Borders().ConvertToLogical(GetWritingMode(),
direction_);
}
NGBoxStrut NGBoxFragment::Padding() const {
const auto& physical_fragment = ToNGPhysicalBoxFragment(physical_fragment_);
return physical_fragment.Padding().ConvertToLogical(GetWritingMode(),
......
......@@ -36,9 +36,10 @@ class CORE_EXPORT NGBoxFragment final : public NGFragment {
NGLineHeightMetrics BaselineMetrics(const NGBaselineRequest&,
const NGConstraintSpace&) const;
NGBoxStrut Borders() const;
NGBoxStrut Padding() const;
private:
protected:
TextDirection direction_;
};
......
......@@ -183,6 +183,7 @@ scoped_refptr<NGLayoutResult> NGColumnLayoutAlgorithm::Layout() {
}
container_builder_.SetInlineSize(border_box_size.inline_size);
container_builder_.SetBlockSize(border_box_size.block_size);
container_builder_.SetBorders(ComputeBorders(ConstraintSpace(), Style()));
container_builder_.SetPadding(ComputePadding(ConstraintSpace(), Style()));
return container_builder_.ToBoxFragment();
......
......@@ -158,6 +158,8 @@ scoped_refptr<NGLayoutResult> NGFlexLayoutAlgorithm::Layout() {
ConstraintSpace(), Style(), intrinsic_block_size);
container_builder_.SetBlockSize(block_size);
container_builder_.SetInlineSize(flex_container_border_box_inline_size);
container_builder_.SetBorders(ComputeBorders(ConstraintSpace(), Style()));
container_builder_.SetPadding(ComputePadding(ConstraintSpace(), Style()));
return container_builder_.ToBoxFragment();
}
......
......@@ -68,6 +68,12 @@ NGFragmentBuilder& NGFragmentBuilder::SetIntrinsicBlockSize(
return *this;
}
NGFragmentBuilder& NGFragmentBuilder::SetBorders(const NGBoxStrut& border) {
DCHECK_NE(BoxType(), NGPhysicalFragment::kInlineBox);
borders_ = border;
return *this;
}
NGFragmentBuilder& NGFragmentBuilder::SetPadding(const NGBoxStrut& padding) {
DCHECK_NE(BoxType(), NGPhysicalFragment::kInlineBox);
padding_ = padding;
......@@ -308,6 +314,7 @@ scoped_refptr<NGLayoutResult> NGFragmentBuilder::ToBoxFragment(
scoped_refptr<NGPhysicalBoxFragment> fragment =
base::AdoptRef(new NGPhysicalBoxFragment(
layout_object_, Style(), style_variant_, physical_size, children_,
borders_.ConvertToPhysical(GetWritingMode(), Direction()),
padding_.ConvertToPhysical(GetWritingMode(), Direction()),
contents_ink_overflow, baselines_, BoxType(), is_old_layout_root_,
border_edges_.ToPhysical(GetWritingMode()), std::move(break_token)));
......
......@@ -40,6 +40,7 @@ class CORE_EXPORT NGFragmentBuilder final : public NGContainerFragmentBuilder {
~NGFragmentBuilder() override;
NGFragmentBuilder& SetIntrinsicBlockSize(LayoutUnit);
NGFragmentBuilder& SetBorders(const NGBoxStrut&);
NGFragmentBuilder& SetPadding(const NGBoxStrut&);
NGFragmentBuilder& SetPadding(const NGLineBoxStrut&);
......@@ -186,6 +187,7 @@ class CORE_EXPORT NGFragmentBuilder final : public NGContainerFragmentBuilder {
LayoutObject* layout_object_;
LayoutUnit intrinsic_block_size_;
NGBoxStrut borders_;
NGBoxStrut padding_;
NGPhysicalFragment::NGBoxType box_type_;
......
......@@ -71,6 +71,7 @@ scoped_refptr<NGLayoutResult> NGPageLayoutAlgorithm::Layout() {
border_box_size.block_size = ComputeBlockSizeForFragment(
ConstraintSpace(), Style(), intrinsic_block_size);
container_builder_.SetBlockSize(border_box_size.block_size);
container_builder_.SetBorders(ComputeBorders(ConstraintSpace(), Style()));
container_builder_.SetPadding(ComputePadding(ConstraintSpace(), Style()));
NGOutOfFlowLayoutPart(&container_builder_, Node().IsAbsoluteContainer(),
......
......@@ -22,6 +22,7 @@ NGPhysicalBoxFragment::NGPhysicalBoxFragment(
NGStyleVariant style_variant,
NGPhysicalSize size,
Vector<scoped_refptr<NGPhysicalFragment>>& children,
const NGPhysicalBoxStrut& borders,
const NGPhysicalBoxStrut& padding,
const NGPhysicalOffsetRect& contents_ink_overflow,
Vector<NGBaseline>& baselines,
......@@ -39,6 +40,7 @@ NGPhysicalBoxFragment::NGPhysicalBoxFragment(
contents_ink_overflow,
std::move(break_token)),
baselines_(std::move(baselines)),
borders_(borders),
padding_(padding) {
DCHECK(baselines.IsEmpty()); // Ensure move semantics is used.
is_old_layout_root_ = is_old_layout_root;
......@@ -248,7 +250,7 @@ scoped_refptr<NGPhysicalFragment> NGPhysicalBoxFragment::CloneWithoutOffset()
scoped_refptr<NGPhysicalFragment> physical_fragment =
base::AdoptRef(new NGPhysicalBoxFragment(
layout_object_, Style(), StyleVariant(), size_, children_copy,
padding_, contents_ink_overflow_, baselines_copy, BoxType(),
borders_, padding_, contents_ink_overflow_, baselines_copy, BoxType(),
is_old_layout_root_, border_edge_, break_token_));
return physical_fragment;
}
......
......@@ -22,6 +22,7 @@ class CORE_EXPORT NGPhysicalBoxFragment final
NGStyleVariant style_variant,
NGPhysicalSize size,
Vector<scoped_refptr<NGPhysicalFragment>>& children,
const NGPhysicalBoxStrut& border,
const NGPhysicalBoxStrut& padding,
const NGPhysicalOffsetRect& contents_ink_overflow,
Vector<NGBaseline>& baselines,
......@@ -32,7 +33,10 @@ class CORE_EXPORT NGPhysicalBoxFragment final
const NGBaseline* Baseline(const NGBaselineRequest&) const;
const NGPhysicalBoxStrut& Padding() const { return padding_; }
const NGPhysicalBoxStrut Borders() const { return borders_; }
const NGPhysicalBoxStrut Padding() const { return padding_; }
NGPixelSnappedPhysicalBoxStrut PixelSnappedPadding() const {
return padding_.SnapToDevicePixels();
}
......@@ -72,6 +76,7 @@ class CORE_EXPORT NGPhysicalBoxFragment final
private:
Vector<NGBaseline> baselines_;
NGPhysicalBoxStrut borders_;
NGPhysicalBoxStrut padding_;
NGPhysicalOffsetRect descendant_outlines_;
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment