mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 22:12:44 +00:00 
			
		
		
		
	 9c44634ca5
			
		
	
	
		9c44634ca5
		
	
	
	
	
		
			
			This is a big and messy change, and here's the gist: - AvaliableSpace is now 2x AvailableSize (width and height) - Layout algorithms are redesigned around the idea of available space - When doing layout across nested formatting contexts, the parent context tells the child context how much space is available for the child's root box in both axes. - "Available space" replaces "containing block width" in most places. - The width and height in a box's UsedValues are considered to be definite after they're assigned to. Marking something as having definite size is no longer a separate step, This probably introduces various regressions, but the big win here is that our layout system now works with available space, just like the specs are written. Fixing issues will be much easier going forward, since you don't need to do nearly as much conversion from "spec logic" to "LibWeb logic" as you previously did.
		
			
				
	
	
		
			36 lines
		
	
	
	
		
			989 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
	
		
			989 B
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
 | |
|  *
 | |
|  * SPDX-License-Identifier: BSD-2-Clause
 | |
|  */
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include <AK/Forward.h>
 | |
| #include <LibWeb/Layout/BlockFormattingContext.h>
 | |
| 
 | |
| namespace Web::Layout {
 | |
| 
 | |
| struct ColumnWidth {
 | |
|     float min { 0 };
 | |
|     float max { 0 };
 | |
|     float used { 0 };
 | |
|     bool is_auto { true };
 | |
| };
 | |
| 
 | |
| class TableFormattingContext final : public BlockFormattingContext {
 | |
| public:
 | |
|     explicit TableFormattingContext(LayoutState&, BlockContainer const&, FormattingContext* parent);
 | |
|     ~TableFormattingContext();
 | |
| 
 | |
|     virtual void run(Box const&, LayoutMode, AvailableSpace const&) override;
 | |
|     virtual float automatic_content_height() const override;
 | |
| 
 | |
| private:
 | |
|     void calculate_column_widths(Box const& row, CSS::Length const& table_width, Vector<ColumnWidth>& column_widths, AvailableSpace const&);
 | |
|     void layout_row(Box const& row, Vector<ColumnWidth>& column_widths, AvailableSpace const&);
 | |
| 
 | |
|     float m_automatic_content_height { 0 };
 | |
| };
 | |
| 
 | |
| }
 |