| 
									
										
										
										
											2021-01-18 17:33:46 +01:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Copyright (c) 2021, Andreas Kling <kling@serenityos.org> | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2021-04-22 01:24:48 -07:00
										 |  |  |  * SPDX-License-Identifier: BSD-2-Clause | 
					
						
							| 
									
										
										
										
											2021-01-18 17:33:46 +01:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #pragma once
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-10 15:56:29 +02:00
										 |  |  | #include <LibWeb/Layout/Box.h>
 | 
					
						
							| 
									
										
										
										
											2021-01-18 17:33:46 +01:00
										 |  |  | #include <LibWeb/Layout/FormattingContext.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace Web::Layout { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class FlexFormattingContext final : public FormattingContext { | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2022-07-16 23:30:32 +02:00
										 |  |  |     FlexFormattingContext(LayoutState&, Box const& flex_container, FormattingContext* parent); | 
					
						
							| 
									
										
										
										
											2021-01-18 17:33:46 +01:00
										 |  |  |     ~FlexFormattingContext(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-15 12:19:42 +01:00
										 |  |  |     virtual bool inhibits_floating() const override { return true; } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-27 15:29:17 +02:00
										 |  |  |     virtual void run(Box const&, LayoutMode, AvailableSpace const&) override; | 
					
						
							| 
									
										
										
										
											2023-03-19 09:57:31 +01:00
										 |  |  |     virtual CSSPixels automatic_content_width() const override; | 
					
						
							| 
									
										
										
										
											2022-11-23 17:46:10 +00:00
										 |  |  |     virtual CSSPixels automatic_content_height() const override; | 
					
						
							| 
									
										
										
										
											2021-10-13 19:57:26 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-13 22:52:50 +02:00
										 |  |  |     Box const& flex_container() const { return context_box(); } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-04 18:57:09 +02:00
										 |  |  |     virtual bool can_determine_size_of_child() const override; | 
					
						
							|  |  |  |     virtual void determine_width_of_child(Box const&, AvailableSpace const&) override; | 
					
						
							|  |  |  |     virtual void determine_height_of_child(Box const&, AvailableSpace const&) override; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-23 17:46:10 +00:00
										 |  |  |     virtual CSSPixelPoint calculate_static_position(Box const&) const override; | 
					
						
							| 
									
										
										
										
											2022-10-24 23:17:36 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-13 19:57:26 +02:00
										 |  |  | private: | 
					
						
							| 
									
										
										
										
											2022-11-05 11:38:28 +01:00
										 |  |  |     [[nodiscard]] bool should_treat_main_size_as_auto(Box const&) const; | 
					
						
							|  |  |  |     [[nodiscard]] bool should_treat_cross_size_as_auto(Box const&) const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-10 10:09:29 +02:00
										 |  |  |     [[nodiscard]] CSSPixels adjust_main_size_through_aspect_ratio_for_cross_size_min_max_constraints(Box const&, CSSPixels main_size, CSS::Size const& min_cross_size, CSS::Size const& max_cross_size) const; | 
					
						
							| 
									
										
										
										
											2023-05-24 10:50:57 +02:00
										 |  |  |     [[nodiscard]] CSSPixels calculate_main_size_from_cross_size_and_aspect_ratio(CSSPixels cross_size, double aspect_ratio) const; | 
					
						
							| 
									
										
										
										
											2023-07-05 17:30:48 +02:00
										 |  |  |     [[nodiscard]] CSSPixels calculate_cross_size_from_main_size_and_aspect_ratio(CSSPixels main_size, double aspect_ratio) const; | 
					
						
							| 
									
										
										
										
											2023-05-10 10:09:29 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-03-13 00:03:59 +01:00
										 |  |  |     void dump_items() const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-13 22:44:54 +02:00
										 |  |  |     struct DirectionAgnosticMargins { | 
					
						
							| 
									
										
										
										
											2022-11-03 17:10:17 +00:00
										 |  |  |         CSSPixels main_before { 0 }; | 
					
						
							|  |  |  |         CSSPixels main_after { 0 }; | 
					
						
							|  |  |  |         CSSPixels cross_before { 0 }; | 
					
						
							|  |  |  |         CSSPixels cross_after { 0 }; | 
					
						
							| 
									
										
										
										
											2022-07-07 11:44:35 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         bool main_before_is_auto { false }; | 
					
						
							|  |  |  |         bool main_after_is_auto { false }; | 
					
						
							|  |  |  |         bool cross_before_is_auto { false }; | 
					
						
							|  |  |  |         bool cross_after_is_auto { false }; | 
					
						
							| 
									
										
										
										
											2021-10-13 22:44:54 +02:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     struct FlexItem { | 
					
						
							| 
									
										
										
										
											2023-02-26 16:09:02 -07:00
										 |  |  |         JS::NonnullGCPtr<Box> box; | 
					
						
							| 
									
										
										
										
											2023-06-21 19:39:07 +02:00
										 |  |  |         Optional<CSS::FlexBasis> used_flex_basis {}; | 
					
						
							| 
									
										
										
										
											2022-07-19 13:34:21 +02:00
										 |  |  |         bool used_flex_basis_is_definite { false }; | 
					
						
							| 
									
										
										
										
											2022-11-03 17:10:17 +00:00
										 |  |  |         CSSPixels flex_base_size { 0 }; | 
					
						
							|  |  |  |         CSSPixels hypothetical_main_size { 0 }; | 
					
						
							|  |  |  |         CSSPixels hypothetical_cross_size { 0 }; | 
					
						
							|  |  |  |         CSSPixels hypothetical_cross_size_with_margins() { return hypothetical_cross_size + margins.cross_before + margins.cross_after + borders.cross_after + borders.cross_before + padding.cross_after + padding.cross_before; } | 
					
						
							|  |  |  |         CSSPixels target_main_size { 0 }; | 
					
						
							| 
									
										
										
										
											2021-10-13 22:44:54 +02:00
										 |  |  |         bool frozen { false }; | 
					
						
							| 
									
										
										
										
											2023-05-24 10:50:57 +02:00
										 |  |  |         Optional<double> flex_factor {}; | 
					
						
							|  |  |  |         double scaled_flex_shrink_factor { 0 }; | 
					
						
							|  |  |  |         double desired_flex_fraction { 0 }; | 
					
						
							| 
									
										
										
										
											2023-01-07 19:28:06 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-08 21:18:35 +01:00
										 |  |  |         CSSPixels outer_hypothetical_main_size() const | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             return hypothetical_main_size + margins.main_before + margins.main_after + borders.main_before + borders.main_after + padding.main_before + padding.main_after; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         CSSPixels outer_target_main_size() const | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             return target_main_size + margins.main_before + margins.main_after + borders.main_before + borders.main_after + padding.main_before + padding.main_after; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         CSSPixels outer_flex_base_size() const | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             return flex_base_size + margins.main_before + margins.main_after + borders.main_before + borders.main_after + padding.main_before + padding.main_after; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-01-07 19:28:06 +01:00
										 |  |  |         // The used main size of this flex item. Empty until determined.
 | 
					
						
							|  |  |  |         Optional<CSSPixels> main_size {}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // The used cross size of this flex item. Empty until determined.
 | 
					
						
							|  |  |  |         Optional<CSSPixels> cross_size {}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-03 17:10:17 +00:00
										 |  |  |         CSSPixels main_offset { 0 }; | 
					
						
							|  |  |  |         CSSPixels cross_offset { 0 }; | 
					
						
							| 
									
										
										
										
											2021-10-13 22:44:54 +02:00
										 |  |  |         DirectionAgnosticMargins margins {}; | 
					
						
							| 
									
										
										
										
											2022-03-27 16:14:18 +02:00
										 |  |  |         DirectionAgnosticMargins borders {}; | 
					
						
							|  |  |  |         DirectionAgnosticMargins padding {}; | 
					
						
							| 
									
										
										
										
											2021-10-13 22:44:54 +02:00
										 |  |  |         bool is_min_violation { false }; | 
					
						
							|  |  |  |         bool is_max_violation { false }; | 
					
						
							| 
									
										
										
										
											2022-07-25 15:02:23 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-03 17:10:17 +00:00
										 |  |  |         CSSPixels add_main_margin_box_sizes(CSSPixels content_size) const | 
					
						
							| 
									
										
										
										
											2022-07-25 15:02:23 +02:00
										 |  |  |         { | 
					
						
							|  |  |  |             return content_size + margins.main_before + margins.main_after + borders.main_before + borders.main_after + padding.main_before + padding.main_after; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-03 17:10:17 +00:00
										 |  |  |         CSSPixels add_cross_margin_box_sizes(CSSPixels content_size) const | 
					
						
							| 
									
										
										
										
											2022-07-25 15:02:23 +02:00
										 |  |  |         { | 
					
						
							|  |  |  |             return content_size + margins.cross_before + margins.cross_after + borders.cross_before + borders.cross_after + padding.cross_before + padding.cross_after; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2021-10-13 22:44:54 +02:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     struct FlexLine { | 
					
						
							| 
									
										
										
										
											2023-03-08 17:24:35 +01:00
										 |  |  |         Vector<FlexItem&> items; | 
					
						
							| 
									
										
										
										
											2022-11-03 17:10:17 +00:00
										 |  |  |         CSSPixels cross_size { 0 }; | 
					
						
							|  |  |  |         CSSPixels remaining_free_space { 0 }; | 
					
						
							| 
									
										
										
										
											2023-05-24 10:50:57 +02:00
										 |  |  |         double chosen_flex_fraction { 0 }; | 
					
						
							| 
									
										
										
										
											2023-03-08 21:18:35 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-24 10:50:57 +02:00
										 |  |  |         double sum_of_flex_factor_of_unfrozen_items() const; | 
					
						
							|  |  |  |         double sum_of_scaled_flex_shrink_factor_of_unfrozen_items() const; | 
					
						
							| 
									
										
										
										
											2021-10-13 22:44:54 +02:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-04-14 10:35:26 +02:00
										 |  |  |     CSSPixels main_gap() const; | 
					
						
							|  |  |  |     CSSPixels cross_gap() const; | 
					
						
							| 
									
										
										
										
											2021-10-13 21:24:00 +02:00
										 |  |  |     bool has_definite_main_size(Box const&) const; | 
					
						
							|  |  |  |     bool has_definite_cross_size(Box const&) const; | 
					
						
							| 
									
										
										
										
											2023-03-08 17:36:32 +01:00
										 |  |  |     CSSPixels inner_main_size(Box const&) const; | 
					
						
							|  |  |  |     CSSPixels inner_cross_size(Box const&) const; | 
					
						
							| 
									
										
										
										
											2021-10-13 21:24:00 +02:00
										 |  |  |     bool has_main_min_size(Box const&) const; | 
					
						
							|  |  |  |     bool has_cross_min_size(Box const&) const; | 
					
						
							| 
									
										
										
										
											2023-07-17 21:19:33 +02:00
										 |  |  |     CSSPixels specified_main_max_size(Box const&) const; | 
					
						
							|  |  |  |     CSSPixels specified_cross_max_size(Box const&) const; | 
					
						
							| 
									
										
										
										
											2021-10-13 21:24:00 +02:00
										 |  |  |     bool is_cross_auto(Box const&) const; | 
					
						
							| 
									
										
										
										
											2023-07-17 21:19:33 +02:00
										 |  |  |     CSSPixels specified_main_min_size(Box const&) const; | 
					
						
							|  |  |  |     CSSPixels specified_cross_min_size(Box const&) const; | 
					
						
							| 
									
										
										
										
											2021-10-13 21:24:00 +02:00
										 |  |  |     bool has_main_max_size(Box const&) const; | 
					
						
							|  |  |  |     bool has_cross_max_size(Box const&) const; | 
					
						
							| 
									
										
										
										
											2022-11-03 17:10:17 +00:00
										 |  |  |     CSSPixels automatic_minimum_size(FlexItem const&) const; | 
					
						
							|  |  |  |     CSSPixels content_based_minimum_size(FlexItem const&) const; | 
					
						
							|  |  |  |     Optional<CSSPixels> specified_size_suggestion(FlexItem const&) const; | 
					
						
							|  |  |  |     Optional<CSSPixels> transferred_size_suggestion(FlexItem const&) const; | 
					
						
							|  |  |  |     CSSPixels content_size_suggestion(FlexItem const&) const; | 
					
						
							| 
									
										
										
										
											2022-09-25 15:48:23 +02:00
										 |  |  |     CSS::Size const& computed_main_size(Box const&) const; | 
					
						
							|  |  |  |     CSS::Size const& computed_main_min_size(Box const&) const; | 
					
						
							|  |  |  |     CSS::Size const& computed_main_max_size(Box const&) const; | 
					
						
							|  |  |  |     CSS::Size const& computed_cross_size(Box const&) const; | 
					
						
							|  |  |  |     CSS::Size const& computed_cross_min_size(Box const&) const; | 
					
						
							|  |  |  |     CSS::Size const& computed_cross_max_size(Box const&) const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-07-17 21:19:33 +02:00
										 |  |  |     CSSPixels get_pixel_width(Box const&, CSS::Size const&) const; | 
					
						
							|  |  |  |     CSSPixels get_pixel_height(Box const&, CSS::Size const&) const; | 
					
						
							| 
									
										
										
										
											2022-07-21 00:26:46 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-20 19:06:47 +02:00
										 |  |  |     bool flex_item_is_stretched(FlexItem const&) const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-03 17:10:17 +00:00
										 |  |  |     void set_main_size(Box const&, CSSPixels size); | 
					
						
							|  |  |  |     void set_cross_size(Box const&, CSSPixels size); | 
					
						
							|  |  |  |     void set_offset(Box const&, CSSPixels main_offset, CSSPixels cross_offset); | 
					
						
							|  |  |  |     void set_main_axis_first_margin(FlexItem&, CSSPixels margin); | 
					
						
							|  |  |  |     void set_main_axis_second_margin(FlexItem&, CSSPixels margin); | 
					
						
							| 
									
										
										
										
											2021-10-13 21:24:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-27 23:58:54 +01:00
										 |  |  |     void copy_dimensions_from_flex_items_to_boxes(); | 
					
						
							| 
									
										
										
										
											2022-02-27 09:50:09 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-13 22:52:50 +02:00
										 |  |  |     void generate_anonymous_flex_items(); | 
					
						
							| 
									
										
										
										
											2021-10-13 19:57:26 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-27 15:29:17 +02:00
										 |  |  |     void determine_available_space_for_items(AvailableSpace const&); | 
					
						
							| 
									
										
										
										
											2021-10-13 21:41:35 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-13 22:52:50 +02:00
										 |  |  |     void determine_flex_base_size_and_hypothetical_main_size(FlexItem&); | 
					
						
							| 
									
										
										
										
											2021-10-13 21:49:28 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-27 15:29:17 +02:00
										 |  |  |     void determine_main_size_of_flex_container(); | 
					
						
							| 
									
										
										
										
											2021-10-13 22:03:39 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-03-12 14:40:13 +01:00
										 |  |  |     void collect_flex_items_into_flex_lines(); | 
					
						
							| 
									
										
										
										
											2021-10-13 22:07:55 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-03-12 14:40:13 +01:00
										 |  |  |     void resolve_flexible_lengths(); | 
					
						
							| 
									
										
										
										
											2023-03-08 17:36:32 +01:00
										 |  |  |     void resolve_flexible_lengths_for_line(FlexLine&); | 
					
						
							| 
									
										
										
										
											2021-10-13 22:11:50 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-28 17:23:22 +02:00
										 |  |  |     void resolve_cross_axis_auto_margins(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-22 22:02:02 +02:00
										 |  |  |     void determine_hypothetical_cross_size_of_item(FlexItem&, bool resolve_percentage_min_max_sizes); | 
					
						
							| 
									
										
										
										
											2021-10-13 22:15:16 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-07 13:58:18 +02:00
										 |  |  |     void calculate_cross_size_of_each_flex_line(); | 
					
						
							| 
									
										
										
										
											2021-10-13 22:17:33 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-14 13:50:40 +02:00
										 |  |  |     void handle_align_content_stretch(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-24 23:17:36 +02:00
										 |  |  |     CSS::AlignItems alignment_for_item(Box const&) const; | 
					
						
							| 
									
										
										
										
											2022-07-11 23:52:36 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-13 22:52:50 +02:00
										 |  |  |     void determine_used_cross_size_of_each_flex_item(); | 
					
						
							| 
									
										
										
										
											2021-10-13 22:19:17 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-03-12 14:40:13 +01:00
										 |  |  |     void distribute_any_remaining_free_space(); | 
					
						
							| 
									
										
										
										
											2021-10-13 22:20:55 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-13 22:52:50 +02:00
										 |  |  |     void align_all_flex_items_along_the_cross_axis(); | 
					
						
							| 
									
										
										
										
											2021-10-13 22:22:30 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-07 13:58:18 +02:00
										 |  |  |     void determine_flex_container_used_cross_size(); | 
					
						
							| 
									
										
										
										
											2021-10-13 22:24:09 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-13 22:44:54 +02:00
										 |  |  |     void align_all_flex_lines(); | 
					
						
							| 
									
										
										
										
											2021-10-13 22:25:39 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-13 19:57:26 +02:00
										 |  |  |     bool is_row_layout() const { return m_flex_direction == CSS::FlexDirection::Row || m_flex_direction == CSS::FlexDirection::RowReverse; } | 
					
						
							| 
									
										
										
										
											2021-10-13 23:38:04 +02:00
										 |  |  |     bool is_single_line() const { return flex_container().computed_values().flex_wrap() == CSS::FlexWrap::Nowrap; } | 
					
						
							| 
									
										
										
										
											2022-04-02 11:29:55 +02:00
										 |  |  |     bool is_direction_reverse() const { return m_flex_direction == CSS::FlexDirection::ColumnReverse || m_flex_direction == CSS::FlexDirection::RowReverse; } | 
					
						
							| 
									
										
										
										
											2021-10-13 22:44:54 +02:00
										 |  |  |     void populate_specified_margins(FlexItem&, CSS::FlexDirection) const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-27 15:29:17 +02:00
										 |  |  |     void determine_intrinsic_size_of_flex_container(); | 
					
						
							| 
									
										
										
										
											2022-11-03 17:10:17 +00:00
										 |  |  |     [[nodiscard]] CSSPixels calculate_intrinsic_main_size_of_flex_container(); | 
					
						
							|  |  |  |     [[nodiscard]] CSSPixels calculate_intrinsic_cross_size_of_flex_container(); | 
					
						
							| 
									
										
										
										
											2022-04-06 01:20:20 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-03 17:10:17 +00:00
										 |  |  |     [[nodiscard]] CSSPixels calculate_cross_min_content_contribution(FlexItem const&, bool resolve_percentage_min_max_sizes) const; | 
					
						
							|  |  |  |     [[nodiscard]] CSSPixels calculate_cross_max_content_contribution(FlexItem const&, bool resolve_percentage_min_max_sizes) const; | 
					
						
							|  |  |  |     [[nodiscard]] CSSPixels calculate_main_min_content_contribution(FlexItem const&) const; | 
					
						
							|  |  |  |     [[nodiscard]] CSSPixels calculate_main_max_content_contribution(FlexItem const&) const; | 
					
						
							| 
									
										
										
										
											2022-04-06 01:20:20 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-03 17:10:17 +00:00
										 |  |  |     [[nodiscard]] CSSPixels calculate_min_content_main_size(FlexItem const&) const; | 
					
						
							|  |  |  |     [[nodiscard]] CSSPixels calculate_max_content_main_size(FlexItem const&) const; | 
					
						
							|  |  |  |     [[nodiscard]] CSSPixels calculate_min_content_cross_size(FlexItem const&) const; | 
					
						
							|  |  |  |     [[nodiscard]] CSSPixels calculate_max_content_cross_size(FlexItem const&) const; | 
					
						
							| 
									
										
										
										
											2022-07-08 12:50:04 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-03 17:10:17 +00:00
										 |  |  |     [[nodiscard]] CSSPixels calculate_fit_content_main_size(FlexItem const&) const; | 
					
						
							|  |  |  |     [[nodiscard]] CSSPixels calculate_fit_content_cross_size(FlexItem const&) const; | 
					
						
							| 
									
										
										
										
											2022-07-09 15:17:47 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-28 18:29:12 +02:00
										 |  |  |     CSSPixels calculate_clamped_fit_content_width(Box const&, AvailableSpace const&) const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-22 16:36:17 +02:00
										 |  |  |     virtual void parent_context_did_dimension_child_root_box() override; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-21 19:39:07 +02:00
										 |  |  |     CSS::FlexBasis used_flex_basis_for_item(FlexItem const&) const; | 
					
						
							| 
									
										
										
										
											2022-07-07 12:39:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-07-16 23:43:48 +02:00
										 |  |  |     LayoutState::UsedValues& m_flex_container_state; | 
					
						
							| 
									
										
										
										
											2022-02-20 15:51:24 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-10-13 22:44:54 +02:00
										 |  |  |     Vector<FlexLine> m_flex_lines; | 
					
						
							|  |  |  |     Vector<FlexItem> m_flex_items; | 
					
						
							| 
									
										
										
										
											2021-10-13 19:57:26 +02:00
										 |  |  |     CSS::FlexDirection m_flex_direction {}; | 
					
						
							| 
									
										
										
										
											2022-02-27 12:19:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-27 15:29:17 +02:00
										 |  |  |     struct AxisAgnosticAvailableSpace { | 
					
						
							|  |  |  |         AvailableSize main; | 
					
						
							|  |  |  |         AvailableSize cross; | 
					
						
							| 
									
										
										
										
											2022-10-03 23:37:38 +02:00
										 |  |  |         AvailableSpace space; | 
					
						
							| 
									
										
										
										
											2022-02-27 12:19:58 +01:00
										 |  |  |     }; | 
					
						
							| 
									
										
										
										
											2022-09-27 15:29:17 +02:00
										 |  |  |     Optional<AxisAgnosticAvailableSpace> m_available_space_for_items; | 
					
						
							|  |  |  |     Optional<AxisAgnosticAvailableSpace> m_available_space_for_flex_container; | 
					
						
							| 
									
										
										
										
											2021-01-18 17:33:46 +01:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |