mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 19:52:45 +00:00 
			
		
		
		
	LibWeb: Set up both containing block sizes before intrinsic sizing
When calculating e.g the min-content height of some box, we would only set its containing block's height to 0 in the temporary formatting state. The containing block width was not touched at all. This patch aims to do a bit better by resolving indefinite containing block sizes to INFINITY before performing intrinsic sizing. We should probably also find a way to resolve definite containing block sizes, but I'll leave that for our future selves.
This commit is contained in:
		
							parent
							
								
									c81e5c9d82
								
							
						
					
					
						commit
						31fc1990fa
					
				
					 1 changed files with 20 additions and 0 deletions
				
			
		|  | @ -30,6 +30,14 @@ FormattingContext::~FormattingContext() = default; | |||
| 
 | ||||
| void FormattingContext::run_intrinsic_size_determination(Box const& box) | ||||
| { | ||||
|     auto& box_state = m_state.get_mutable(box); | ||||
| 
 | ||||
|     if (box.has_definite_width()) | ||||
|         box_state.content_width = box.computed_values().width().resolved(box, CSS::Length::make_px(containing_block_width_for(box))).to_px(box); | ||||
| 
 | ||||
|     if (box.has_definite_height()) | ||||
|         box_state.content_height = box.computed_values().height().resolved(box, CSS::Length::make_px(containing_block_height_for(box))).to_px(box); | ||||
| 
 | ||||
|     run(box, LayoutMode::IntrinsicSizeDetermination); | ||||
| } | ||||
| 
 | ||||
|  | @ -862,6 +870,9 @@ float FormattingContext::calculate_min_content_width(Layout::Box const& box) con | |||
|     auto& containing_block_state = throwaway_state.get_mutable(containing_block); | ||||
|     containing_block_state.content_width = 0; | ||||
| 
 | ||||
|     if (!containing_block.has_definite_height()) | ||||
|         containing_block_state.content_height = INFINITY; | ||||
| 
 | ||||
|     auto& box_state = throwaway_state.get_mutable(box); | ||||
|     box_state.width_constraint = SizeConstraint::MinContent; | ||||
| 
 | ||||
|  | @ -899,6 +910,9 @@ float FormattingContext::calculate_max_content_width(Layout::Box const& box) con | |||
|     auto& containing_block_state = throwaway_state.get_mutable(containing_block); | ||||
|     containing_block_state.content_width = INFINITY; | ||||
| 
 | ||||
|     if (!containing_block.has_definite_height()) | ||||
|         containing_block_state.content_height = INFINITY; | ||||
| 
 | ||||
|     auto& box_state = throwaway_state.get_mutable(box); | ||||
|     box_state.width_constraint = SizeConstraint::MaxContent; | ||||
| 
 | ||||
|  | @ -936,6 +950,9 @@ float FormattingContext::calculate_min_content_height(Layout::Box const& box) co | |||
|     auto& containing_block_state = throwaway_state.get_mutable(containing_block); | ||||
|     containing_block_state.content_height = 0; | ||||
| 
 | ||||
|     if (!containing_block.has_definite_width()) | ||||
|         containing_block_state.content_width = INFINITY; | ||||
| 
 | ||||
|     auto& box_state = throwaway_state.get_mutable(box); | ||||
|     box_state.height_constraint = SizeConstraint::MinContent; | ||||
| 
 | ||||
|  | @ -973,6 +990,9 @@ float FormattingContext::calculate_max_content_height(Layout::Box const& box) co | |||
|     auto& containing_block_state = throwaway_state.get_mutable(containing_block); | ||||
|     containing_block_state.content_height = INFINITY; | ||||
| 
 | ||||
|     if (!containing_block.has_definite_width()) | ||||
|         containing_block_state.content_width = INFINITY; | ||||
| 
 | ||||
|     auto& box_state = throwaway_state.get_mutable(box); | ||||
|     box_state.height_constraint = SizeConstraint::MaxContent; | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Andreas Kling
						Andreas Kling