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

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

Issue 2945213004: [LayoutNG] Float behavior simplification before larger patch. (Closed)
Patch Set: update test expectations. Created 3 years, 5 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/inline/ng_line_breaker.h" 5 #include "core/layout/ng/inline/ng_line_breaker.h"
6 6
7 #include "core/layout/ng/inline/ng_inline_break_token.h" 7 #include "core/layout/ng/inline/ng_inline_break_token.h"
8 #include "core/layout/ng/inline/ng_inline_layout_algorithm.h" 8 #include "core/layout/ng/inline/ng_inline_layout_algorithm.h"
9 #include "core/layout/ng/inline/ng_inline_node.h" 9 #include "core/layout/ng/inline/ng_inline_node.h"
10 #include "core/layout/ng/inline/ng_text_fragment.h" 10 #include "core/layout/ng/inline/ng_text_fragment.h"
(...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 const ComputedStyle& float_style = node.Style(); 410 const ComputedStyle& float_style = node.Style();
411 NGBoxStrut margins = ComputeMargins(*constraint_space_, float_style, 411 NGBoxStrut margins = ComputeMargins(*constraint_space_, float_style,
412 constraint_space_->WritingMode(), 412 constraint_space_->WritingMode(),
413 constraint_space_->Direction()); 413 constraint_space_->Direction());
414 414
415 // TODO(ikilpatrick): Add support for float break tokens inside an inline 415 // TODO(ikilpatrick): Add support for float break tokens inside an inline
416 // layout context. 416 // layout context.
417 RefPtr<NGUnpositionedFloat> unpositioned_float = NGUnpositionedFloat::Create( 417 RefPtr<NGUnpositionedFloat> unpositioned_float = NGUnpositionedFloat::Create(
418 constraint_space_->AvailableSize(), 418 constraint_space_->AvailableSize(),
419 constraint_space_->PercentageResolutionSize(), 419 constraint_space_->PercentageResolutionSize(),
420 constraint_space_->BfcOffset(), constraint_space_->BfcOffset(), margins, 420 constraint_space_->BfcOffset().inline_offset,
421 node, /* break_token */ nullptr); 421 constraint_space_->BfcOffset().inline_offset, margins, node,
422 /* break_token */ nullptr);
422 423
423 LayoutUnit inline_size = ComputeInlineSizeForUnpositionedFloat( 424 LayoutUnit inline_size = ComputeInlineSizeForUnpositionedFloat(
424 constraint_space_, unpositioned_float.Get()); 425 constraint_space_, unpositioned_float.Get());
425 426
426 // We can only determine if our float will fit if we have an available_width 427 // We can only determine if our float will fit if we have an available_width
427 // I.e. we may not have come across any text yet, in order to be able to 428 // I.e. we may not have come across any text yet, in order to be able to
428 // resolve the BFC position. 429 // resolve the BFC position.
429 bool float_does_not_fit = 430 bool float_does_not_fit =
430 !HasAvailableWidth() || 431 !HasAvailableWidth() ||
431 position_ + inline_size + margins.InlineSum() > AvailableWidth(); 432 position_ + inline_size + margins.InlineSum() > AvailableWidth();
432 433
433 // Check if we already have a pending float. That's because a float cannot be 434 // Check if we already have a pending float. That's because a float cannot be
434 // higher than any block or floated box generated before. 435 // higher than any block or floated box generated before.
435 if (!container_builder_->UnpositionedFloats().IsEmpty() || 436 if (!container_builder_->UnpositionedFloats().IsEmpty() ||
436 float_does_not_fit) { 437 float_does_not_fit) {
437 container_builder_->AddUnpositionedFloat(unpositioned_float); 438 container_builder_->AddUnpositionedFloat(unpositioned_float);
438 } else { 439 } else {
439 NGLogicalOffset container_bfc_offset = 440 NGLogicalOffset container_bfc_offset =
440 container_builder_->BfcOffset().value(); 441 container_builder_->BfcOffset().value();
441 unpositioned_float->origin_offset = container_bfc_offset + content_offset_; 442 LayoutUnit origin_block_offset =
442 unpositioned_float->from_offset.block_offset = 443 container_bfc_offset.block_offset + content_offset_.block_offset;
443 container_bfc_offset.block_offset;
444 unpositioned_float->parent_bfc_block_offset =
445 container_bfc_offset.block_offset;
446 444
447 container_builder_->AddPositionedFloat( 445 container_builder_->AddPositionedFloat(
448 PositionFloat(unpositioned_float.Get(), constraint_space_)); 446 PositionFloat(origin_block_offset, container_bfc_offset.block_offset,
447 unpositioned_float.Get(), constraint_space_));
449 448
450 // We need to recalculate the available_width as the float probably 449 // We need to recalculate the available_width as the float probably
451 // consumed space on the line. 450 // consumed space on the line.
452 UpdateAvailableWidth(); 451 UpdateAvailableWidth();
453 } 452 }
454 453
455 // Floats are already positioned in the container_builder. 454 // Floats are already positioned in the container_builder.
456 item_results->pop_back(); 455 item_results->pop_back();
457 MoveToNextOf(item); 456 MoveToNextOf(item);
458 } 457 }
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
685 } 684 }
686 685
687 RefPtr<NGInlineBreakToken> NGLineBreaker::CreateBreakToken() const { 686 RefPtr<NGInlineBreakToken> NGLineBreaker::CreateBreakToken() const {
688 const Vector<NGInlineItem>& items = node_.Items(); 687 const Vector<NGInlineItem>& items = node_.Items();
689 if (item_index_ >= items.size()) 688 if (item_index_ >= items.size())
690 return nullptr; 689 return nullptr;
691 return NGInlineBreakToken::Create(node_, item_index_, offset_); 690 return NGInlineBreakToken::Create(node_, item_index_, offset_);
692 } 691 }
693 692
694 } // namespace blink 693 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/LayoutTests/TestExpectations ('k') | third_party/WebKit/Source/core/layout/ng/ng_block_layout_algorithm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698