mirror of
https://github.com/RGBCube/serenity
synced 2025-05-29 04:45:08 +00:00

Instead of formatting contexts flailing around to figure out from the "inside" how much space is available on the "outside", we should provide the amount of available space in both axes as an input to run(). This basically means that when something creates a nested formatting context, the parent context is responsible for telling the nested context how much space is available for layout. This information is provided immediately when invoking run(). Note that this commit doesn't pass accurate values in all cases yet. This first step just makes it build, and passes available values in some cases where getting them was trivial.
36 lines
999 B
C++
36 lines
999 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& available_width, AvailableSpace const& available_height) 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);
|
|
void layout_row(Box const& row, Vector<ColumnWidth>& column_widths);
|
|
|
|
float m_automatic_content_height { 0 };
|
|
};
|
|
|
|
}
|