OLD | NEW |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |