1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 15:27:35 +00:00

LibWeb: Add GridTrack::create_from_definition() in GFC

Introducing method to construct grid track from definition allows to
reduce duplication in layout code.
This commit is contained in:
Aliaksandr Kalenik 2023-06-11 21:58:19 +03:00 committed by Andreas Kling
parent 2ebb3639aa
commit 57581735b7
2 changed files with 17 additions and 9 deletions

View file

@ -10,6 +10,18 @@
namespace Web::Layout {
GridFormattingContext::GridTrack GridFormattingContext::GridTrack::create_from_definition(CSS::ExplicitGridTrack const& definition)
{
// NOTE: repeat() is expected to be expanded beforehand.
VERIFY(!definition.is_repeat());
if (definition.is_minmax()) {
return GridTrack(definition.minmax().min_grid_size(), definition.minmax().max_grid_size());
}
return GridTrack(definition.grid_size());
}
GridFormattingContext::GridFormattingContext(LayoutState& state, Box const& grid_container, FormattingContext* parent)
: FormattingContext(Type::Grid, state, grid_container, parent)
{
@ -542,21 +554,15 @@ void GridFormattingContext::initialize_grid_tracks_from_definition(AvailableSpac
}
for (auto _ = 0; _ < repeat_count; _++) {
switch (track_definition.type()) {
case CSS::ExplicitGridTrack::Type::Default:
case CSS::ExplicitGridTrack::Type::MinMax:
tracks.append(GridTrack(track_definition.minmax().min_grid_size(), track_definition.minmax().max_grid_size()));
tracks.append(GridTrack::create_from_definition(track_definition));
break;
case CSS::ExplicitGridTrack::Type::Repeat:
for (auto& explicit_grid_track : track_definition.repeat().grid_track_size_list().track_list()) {
auto track_sizing_function = explicit_grid_track;
if (track_sizing_function.is_minmax())
tracks.append(GridTrack(track_sizing_function.minmax().min_grid_size(), track_sizing_function.minmax().max_grid_size()));
else
tracks.append(GridTrack(track_sizing_function.grid_size()));
tracks.append(GridTrack::create_from_definition(explicit_grid_track));
}
break;
case CSS::ExplicitGridTrack::Type::Default:
tracks.append(GridTrack(track_definition.grid_size()));
break;
default:
VERIFY_NOT_REACHED();
}