mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 09:22:44 +00:00 
			
		
		
		
	LibWeb: Create "empty" line box fragments for inline elements
In order for inline elements (e.g <span>) to contribute padding etc. to line boxes, we now create special "leading" and "trailing" fragments for Layout::InlineNode and size them according to the horizontal padding values. The height of these fragments is taken from the tallest fragment on the line. (Perhaps we should stop having per-fragment heights and just keep a single height per line box, but that's a separate issue.) In order to make things look nice, we now also adjust the height of all fragments on a line so that nobody is shorter than the CSS line-height.
This commit is contained in:
		
							parent
							
								
									311e1039b5
								
							
						
					
					
						commit
						d59ec3ab85
					
				
					 7 changed files with 56 additions and 4 deletions
				
			
		|  | @ -112,6 +112,12 @@ void InlineFormattingContext::run(LayoutMode layout_mode) | |||
|         for (size_t i = 0; i < line_box.fragments().size(); ++i) { | ||||
|             auto& fragment = line_box.fragments()[i]; | ||||
| 
 | ||||
|             if (fragment.type() == LineBoxFragment::Type::Leading || fragment.type() == LineBoxFragment::Type::Trailing) { | ||||
|                 fragment.set_height(max_height); | ||||
|             } else { | ||||
|                 fragment.set_height(max(min_line_height, fragment.height())); | ||||
|             } | ||||
| 
 | ||||
|             // Vertically align everyone's bottom to the line.
 | ||||
|             // FIXME: Support other kinds of vertical alignment.
 | ||||
|             fragment.set_offset({ roundf(x_offset + fragment.offset().x()), content_height + (max_height - fragment.height()) - (line_spacing / 2) }); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Andreas Kling
						Andreas Kling