
Just FormattingContext and AvailableSpace, and the minor adjustments to make everything else work.
58 lines
1.4 KiB
C++
58 lines
1.4 KiB
C++
/*
|
|
* Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/Forward.h>
|
|
#include <LibWeb/Layout/FormattingContext.h>
|
|
|
|
namespace Web::Layout {
|
|
|
|
class TableFormattingContext final : public FormattingContext {
|
|
public:
|
|
explicit TableFormattingContext(LayoutState&, BlockContainer const&, FormattingContext* parent);
|
|
~TableFormattingContext();
|
|
|
|
virtual void run(Box const&, LayoutMode, AvailableSpace const&) override;
|
|
virtual CSSPixels automatic_content_height() const override;
|
|
|
|
private:
|
|
void calculate_row_column_grid(Box const&);
|
|
void compute_table_measures();
|
|
void compute_table_width(float&);
|
|
void distribute_width_to_columns(float extra_width);
|
|
void determine_intrisic_size_of_table_container(AvailableSpace const& available_space);
|
|
|
|
float m_automatic_content_height { 0 };
|
|
|
|
struct Column {
|
|
float left_offset { 0 };
|
|
float min_width { 0 };
|
|
float max_width { 0 };
|
|
float used_width { 0 };
|
|
};
|
|
|
|
struct Row {
|
|
Box& box;
|
|
float used_width { 0 };
|
|
float baseline { 0 };
|
|
};
|
|
|
|
struct Cell {
|
|
Box& box;
|
|
size_t column_index;
|
|
size_t row_index;
|
|
size_t column_span;
|
|
size_t row_span;
|
|
float baseline { 0 };
|
|
};
|
|
|
|
Vector<Cell> m_cells;
|
|
Vector<Column> m_columns;
|
|
Vector<Row> m_rows;
|
|
};
|
|
|
|
}
|