1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 08:47:34 +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 { 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) GridFormattingContext::GridFormattingContext(LayoutState& state, Box const& grid_container, FormattingContext* parent)
: FormattingContext(Type::Grid, state, grid_container, 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; _++) { for (auto _ = 0; _ < repeat_count; _++) {
switch (track_definition.type()) { switch (track_definition.type()) {
case CSS::ExplicitGridTrack::Type::Default:
case CSS::ExplicitGridTrack::Type::MinMax: 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; break;
case CSS::ExplicitGridTrack::Type::Repeat: case CSS::ExplicitGridTrack::Type::Repeat:
for (auto& explicit_grid_track : track_definition.repeat().grid_track_size_list().track_list()) { for (auto& explicit_grid_track : track_definition.repeat().grid_track_size_list().track_list()) {
auto track_sizing_function = explicit_grid_track; tracks.append(GridTrack::create_from_definition(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()));
} }
break; break;
case CSS::ExplicitGridTrack::Type::Default:
tracks.append(GridTrack(track_definition.grid_size()));
break;
default: default:
VERIFY_NOT_REACHED(); VERIFY_NOT_REACHED();
} }

View file

@ -148,6 +148,8 @@ private:
bool is_gap { false }; bool is_gap { false };
static GridTrack create_from_definition(CSS::ExplicitGridTrack const& definition);
GridTrack(CSS::GridSize min_track_sizing_function, CSS::GridSize max_track_sizing_function) GridTrack(CSS::GridSize min_track_sizing_function, CSS::GridSize max_track_sizing_function)
: min_track_sizing_function(min_track_sizing_function) : min_track_sizing_function(min_track_sizing_function)
, max_track_sizing_function(max_track_sizing_function) , max_track_sizing_function(max_track_sizing_function)