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

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

Issue 2655783006: Top down version of algorithm to position margins and floats in LayoutNG (Closed)
Patch Set: git rebase-update Created 3 years, 10 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_constraint_space_builder.h" 5 #include "core/layout/ng/ng_constraint_space_builder.h"
6 6
7 #include "core/layout/ng/ng_length_utils.h" 7 #include "core/layout/ng/ng_length_utils.h"
8 8
9 namespace blink { 9 namespace blink {
10 10
11 NGConstraintSpaceBuilder::NGConstraintSpaceBuilder( 11 NGConstraintSpaceBuilder::NGConstraintSpaceBuilder(
12 const NGConstraintSpace* parent_space) 12 const NGConstraintSpace* parent_space)
13 : available_size_(parent_space->AvailableSize()), 13 : available_size_(parent_space->AvailableSize()),
14 percentage_resolution_size_(parent_space->PercentageResolutionSize()), 14 percentage_resolution_size_(parent_space->PercentageResolutionSize()),
15 fragmentainer_space_available_(NGSizeIndefinite), 15 fragmentainer_space_available_(NGSizeIndefinite),
16 writing_mode_(parent_space->WritingMode()), 16 writing_mode_(parent_space->WritingMode()),
17 parent_writing_mode_(writing_mode_), 17 parent_writing_mode_(writing_mode_),
18 is_fixed_size_inline_(false), 18 is_fixed_size_inline_(false),
19 is_fixed_size_block_(false), 19 is_fixed_size_block_(false),
20 is_shrink_to_fit_(false), 20 is_shrink_to_fit_(false),
21 is_inline_direction_triggers_scrollbar_(false), 21 is_inline_direction_triggers_scrollbar_(false),
22 is_block_direction_triggers_scrollbar_(false), 22 is_block_direction_triggers_scrollbar_(false),
23 fragmentation_type_(parent_space->BlockFragmentationType()), 23 fragmentation_type_(parent_space->BlockFragmentationType()),
24 is_new_fc_(parent_space->IsNewFormattingContext()), 24 is_new_fc_(parent_space->IsNewFormattingContext()),
25 text_direction_(static_cast<unsigned>(parent_space->Direction())), 25 text_direction_(static_cast<unsigned>(parent_space->Direction())),
26 bfc_offset_(parent_space->bfc_offset_),
26 exclusions_(parent_space->Exclusions()) {} 27 exclusions_(parent_space->Exclusions()) {}
27 28
28 NGConstraintSpaceBuilder::NGConstraintSpaceBuilder(NGWritingMode writing_mode) 29 NGConstraintSpaceBuilder::NGConstraintSpaceBuilder(NGWritingMode writing_mode)
29 : fragmentainer_space_available_(NGSizeIndefinite), 30 : fragmentainer_space_available_(NGSizeIndefinite),
30 writing_mode_(writing_mode), 31 writing_mode_(writing_mode),
31 parent_writing_mode_(writing_mode_), 32 parent_writing_mode_(writing_mode_),
32 is_fixed_size_inline_(false), 33 is_fixed_size_inline_(false),
33 is_fixed_size_block_(false), 34 is_fixed_size_block_(false),
34 is_shrink_to_fit_(false), 35 is_shrink_to_fit_(false),
35 is_inline_direction_triggers_scrollbar_(false), 36 is_inline_direction_triggers_scrollbar_(false),
(...skipping 14 matching lines...) Expand all
50 percentage_resolution_size_ = percentage_resolution_size; 51 percentage_resolution_size_ = percentage_resolution_size;
51 return *this; 52 return *this;
52 } 53 }
53 54
54 NGConstraintSpaceBuilder& NGConstraintSpaceBuilder::SetTextDirection( 55 NGConstraintSpaceBuilder& NGConstraintSpaceBuilder::SetTextDirection(
55 TextDirection text_direction) { 56 TextDirection text_direction) {
56 text_direction_ = static_cast<unsigned>(text_direction); 57 text_direction_ = static_cast<unsigned>(text_direction);
57 return *this; 58 return *this;
58 } 59 }
59 60
61 NGConstraintSpaceBuilder& NGConstraintSpaceBuilder::SetMarginStrut(
62 const NGMarginStrut& margin_strut) {
63 margin_strut_ = margin_strut;
64 return *this;
65 }
66
60 NGConstraintSpaceBuilder& NGConstraintSpaceBuilder::SetIsFixedSizeInline( 67 NGConstraintSpaceBuilder& NGConstraintSpaceBuilder::SetIsFixedSizeInline(
61 bool is_fixed_size_inline) { 68 bool is_fixed_size_inline) {
62 is_fixed_size_inline_ = is_fixed_size_inline; 69 is_fixed_size_inline_ = is_fixed_size_inline;
63 return *this; 70 return *this;
64 } 71 }
65 72
66 NGConstraintSpaceBuilder& NGConstraintSpaceBuilder::SetIsFixedSizeBlock( 73 NGConstraintSpaceBuilder& NGConstraintSpaceBuilder::SetIsFixedSizeBlock(
67 bool is_fixed_size_block) { 74 bool is_fixed_size_block) {
68 is_fixed_size_block_ = is_fixed_size_block; 75 is_fixed_size_block_ = is_fixed_size_block;
69 return *this; 76 return *this;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 NGConstraintSpace* NGConstraintSpaceBuilder::ToConstraintSpace() { 119 NGConstraintSpace* NGConstraintSpaceBuilder::ToConstraintSpace() {
113 // Exclusions do not pass the formatting context boundary. 120 // Exclusions do not pass the formatting context boundary.
114 std::shared_ptr<NGExclusions> exclusions( 121 std::shared_ptr<NGExclusions> exclusions(
115 is_new_fc_ ? std::make_shared<NGExclusions>() : exclusions_); 122 is_new_fc_ ? std::make_shared<NGExclusions>() : exclusions_);
116 123
117 // Whether the child and the containing block are parallel to each other. 124 // Whether the child and the containing block are parallel to each other.
118 // Example: vertical-rl and vertical-lr 125 // Example: vertical-rl and vertical-lr
119 bool is_in_parallel_flow = (parent_writing_mode_ == kHorizontalTopBottom) == 126 bool is_in_parallel_flow = (parent_writing_mode_ == kHorizontalTopBottom) ==
120 (writing_mode_ == kHorizontalTopBottom); 127 (writing_mode_ == kHorizontalTopBottom);
121 128
129 NGMarginStrut margin_strut = is_new_fc_ ? NGMarginStrut() : margin_strut_;
130 NGLogicalOffset bfc_offset = is_new_fc_ ? NGLogicalOffset() : bfc_offset_;
131
122 if (is_in_parallel_flow) { 132 if (is_in_parallel_flow) {
123 return new NGConstraintSpace( 133 return new NGConstraintSpace(
124 static_cast<NGWritingMode>(writing_mode_), 134 static_cast<NGWritingMode>(writing_mode_),
125 static_cast<TextDirection>(text_direction_), 135 static_cast<TextDirection>(text_direction_),
126 {available_size_.inline_size, available_size_.block_size}, 136 {available_size_.inline_size, available_size_.block_size},
127 {percentage_resolution_size_.inline_size, 137 {percentage_resolution_size_.inline_size,
128 percentage_resolution_size_.block_size}, 138 percentage_resolution_size_.block_size},
129 fragmentainer_space_available_, is_fixed_size_inline_, 139 fragmentainer_space_available_, is_fixed_size_inline_,
130 is_fixed_size_block_, is_shrink_to_fit_, 140 is_fixed_size_block_, is_shrink_to_fit_,
131 is_inline_direction_triggers_scrollbar_, 141 is_inline_direction_triggers_scrollbar_,
132 is_block_direction_triggers_scrollbar_, 142 is_block_direction_triggers_scrollbar_,
133 static_cast<NGFragmentationType>(fragmentation_type_), is_new_fc_, 143 static_cast<NGFragmentationType>(fragmentation_type_), is_new_fc_,
134 exclusions); 144 margin_strut, bfc_offset, exclusions);
135 } 145 }
136 146
137 return new NGConstraintSpace( 147 return new NGConstraintSpace(
138 static_cast<NGWritingMode>(writing_mode_), 148 static_cast<NGWritingMode>(writing_mode_),
139 static_cast<TextDirection>(text_direction_), 149 static_cast<TextDirection>(text_direction_),
140 {available_size_.block_size, available_size_.inline_size}, 150 {available_size_.block_size, available_size_.inline_size},
141 {percentage_resolution_size_.block_size, 151 {percentage_resolution_size_.block_size,
142 percentage_resolution_size_.inline_size}, 152 percentage_resolution_size_.inline_size},
143 fragmentainer_space_available_, is_fixed_size_block_, 153 fragmentainer_space_available_, is_fixed_size_block_,
144 is_fixed_size_inline_, is_shrink_to_fit_, 154 is_fixed_size_inline_, is_shrink_to_fit_,
145 is_block_direction_triggers_scrollbar_, 155 is_block_direction_triggers_scrollbar_,
146 is_inline_direction_triggers_scrollbar_, 156 is_inline_direction_triggers_scrollbar_,
147 static_cast<NGFragmentationType>(fragmentation_type_), is_new_fc_, 157 static_cast<NGFragmentationType>(fragmentation_type_), is_new_fc_,
148 exclusions); 158 margin_strut, bfc_offset, exclusions);
149 } 159 }
150 160
151 } // namespace blink 161 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698