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

Side by Side Diff: third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc

Issue 2840883002: Check if fragment's block size fits into a layout opportunity. (Closed)
Patch Set: git rebase-update 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 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/layout/ng/ng_block_layout_algorithm.h" 5 #include "core/layout/ng/ng_block_layout_algorithm.h"
6 6
7 #include "core/layout/ng/inline/ng_inline_node.h" 7 #include "core/layout/ng/inline/ng_inline_node.h"
8 #include "core/layout/ng/ng_absolute_utils.h" 8 #include "core/layout/ng/ng_absolute_utils.h"
9 #include "core/layout/ng/ng_block_child_iterator.h" 9 #include "core/layout/ng/ng_block_child_iterator.h"
10 #include "core/layout/ng/ng_constraint_space.h" 10 #include "core/layout/ng/ng_constraint_space.h"
(...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after
409 const NGBoxFragment& fragment, 409 const NGBoxFragment& fragment,
410 const NGConstraintSpace& child_space) { 410 const NGConstraintSpace& child_space) {
411 // 1. Position all pending floats to a temporary space. 411 // 1. Position all pending floats to a temporary space.
412 RefPtr<NGConstraintSpace> tmp_space = 412 RefPtr<NGConstraintSpace> tmp_space =
413 NGConstraintSpaceBuilder(&child_space) 413 NGConstraintSpaceBuilder(&child_space)
414 .SetIsNewFormattingContext(false) 414 .SetIsNewFormattingContext(false)
415 .ToConstraintSpace(child_space.WritingMode()); 415 .ToConstraintSpace(child_space.WritingMode());
416 PositionFloats(curr_bfc_offset_.block_offset, curr_bfc_offset_.block_offset, 416 PositionFloats(curr_bfc_offset_.block_offset, curr_bfc_offset_.block_offset,
417 container_builder_.UnpositionedFloats(), tmp_space.Get()); 417 container_builder_.UnpositionedFloats(), tmp_space.Get());
418 418
419 NGLogicalOffset origin_offset = curr_bfc_offset_;
420 origin_offset.inline_offset += border_and_padding_.inline_start;
421
419 // 2. Find an estimated layout opportunity for our fragment. 422 // 2. Find an estimated layout opportunity for our fragment.
420 NGLayoutOpportunity opportunity = FindLayoutOpportunityForFragment( 423 NGLayoutOpportunity opportunity = FindLayoutOpportunityForFragment(
421 tmp_space->Exclusions().get(), child_space.AvailableSize(), 424 tmp_space->Exclusions().get(), child_space.AvailableSize(), origin_offset,
422 curr_bfc_offset_, curr_child_margins_, fragment); 425 curr_child_margins_, fragment);
423 426
424 // 3. If the found opportunity lies on the same line with our estimated 427 // 3. If the found opportunity lies on the same line with our estimated
425 // child's BFC offset then merge fragment's margins with the current 428 // child's BFC offset then merge fragment's margins with the current
426 // MarginStrut. 429 // MarginStrut.
427 if (opportunity.offset.block_offset == curr_bfc_offset_.block_offset) 430 if (opportunity.offset.block_offset == curr_bfc_offset_.block_offset)
428 curr_margin_strut_.Append(curr_child_margins_.block_start); 431 curr_margin_strut_.Append(curr_child_margins_.block_start);
429 curr_bfc_offset_.block_offset += curr_margin_strut_.Sum(); 432 curr_bfc_offset_.block_offset += curr_margin_strut_.Sum();
430 curr_margin_strut_ = {}; 433 curr_margin_strut_ = {};
431 434
432 // 4. The child's BFC block offset is known here. 435 // 4. The child's BFC block offset is known here.
433 MaybeUpdateFragmentBfcOffset(ConstraintSpace(), curr_bfc_offset_, 436 MaybeUpdateFragmentBfcOffset(ConstraintSpace(), curr_bfc_offset_,
434 &container_builder_); 437 &container_builder_);
435 PositionPendingFloats(curr_bfc_offset_.block_offset, &container_builder_, 438 PositionPendingFloats(curr_bfc_offset_.block_offset, &container_builder_,
436 MutableConstraintSpace()); 439 MutableConstraintSpace());
437 440
441 origin_offset = curr_bfc_offset_;
442 origin_offset.inline_offset += border_and_padding_.inline_start;
443
438 // 5. Find the final layout opportunity for the fragment after all pending 444 // 5. Find the final layout opportunity for the fragment after all pending
439 // floats are positioned at the correct BFC block's offset. 445 // floats are positioned at the correct BFC block's offset.
440 opportunity = FindLayoutOpportunityForFragment( 446 opportunity = FindLayoutOpportunityForFragment(
441 MutableConstraintSpace()->Exclusions().get(), child_space.AvailableSize(), 447 MutableConstraintSpace()->Exclusions().get(), child_space.AvailableSize(),
442 curr_bfc_offset_, curr_child_margins_, fragment); 448 origin_offset, curr_child_margins_, fragment);
443 449
444 curr_bfc_offset_ = opportunity.offset; 450 curr_bfc_offset_ = opportunity.offset;
445 return curr_bfc_offset_; 451 return curr_bfc_offset_;
446 } 452 }
447 453
448 NGLogicalOffset NGBlockLayoutAlgorithm::PositionWithBfcOffset( 454 NGLogicalOffset NGBlockLayoutAlgorithm::PositionWithBfcOffset(
449 const NGBoxFragment& fragment) { 455 const NGBoxFragment& fragment) {
450 DCHECK(fragment.BfcOffset()); 456 DCHECK(fragment.BfcOffset());
451 curr_bfc_offset_.block_offset = fragment.BfcOffset().value().block_offset; 457 curr_bfc_offset_.block_offset = fragment.BfcOffset().value().block_offset;
452 MaybeUpdateFragmentBfcOffset(ConstraintSpace(), curr_bfc_offset_, 458 MaybeUpdateFragmentBfcOffset(ConstraintSpace(), curr_bfc_offset_,
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
585 if (is_new_bfc) { 591 if (is_new_bfc) {
586 space_available -= child_bfc_offset.block_offset; 592 space_available -= child_bfc_offset.block_offset;
587 } 593 }
588 } 594 }
589 space_builder_.SetFragmentainerSpaceAvailable(space_available); 595 space_builder_.SetFragmentainerSpaceAvailable(space_available);
590 596
591 return space_builder_.ToConstraintSpace( 597 return space_builder_.ToConstraintSpace(
592 FromPlatformWritingMode(child_style.GetWritingMode())); 598 FromPlatformWritingMode(child_style.GetWritingMode()));
593 } 599 }
594 } // namespace blink 600 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698