mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 11:38:11 +00:00
LibWeb: Refactor GridTrackSize classes
Refactor various classes in the GridTrackSize file for the incoming named_tracks feature. Previously the ExplicitTrackSizing had mixed responsiblities with the newly-named GridRepeat class. This made it so it was not possible to have multiple repeats within a single 'GridTrackSizeList' definition. The MetaGridTrackSize class had both the responsibilities of being a container for minmax values as well as for simple GridSizes. By uniting the different possible values (repeat, minmax, default) into the ExplicitGridTrack class are able to be more expressive as to the different grid size modalities. The GridTrackSizeList will be useful as compared to a Vector<ExplicitGridTrack> since this way can keep track of the declared line names. These same line names are able to be declared within the values of a repeat function, hence the presence of a GridTrackSizeList inside the GridRepeat class.
This commit is contained in:
parent
9441515312
commit
b2b677e984
12 changed files with 639 additions and 380 deletions
|
@ -12,34 +12,39 @@
|
|||
|
||||
namespace Web::CSS {
|
||||
|
||||
GridTrackSize::GridTrackSize(Length length)
|
||||
GridSize::GridSize(Length length)
|
||||
: m_type(Type::Length)
|
||||
, m_length(length)
|
||||
{
|
||||
}
|
||||
|
||||
GridTrackSize::GridTrackSize(Percentage percentage)
|
||||
GridSize::GridSize(Percentage percentage)
|
||||
: m_type(Type::Percentage)
|
||||
, m_length { Length::make_px(0) }
|
||||
, m_percentage(percentage)
|
||||
{
|
||||
}
|
||||
|
||||
GridTrackSize::GridTrackSize(float flexible_length)
|
||||
GridSize::GridSize(float flexible_length)
|
||||
: m_type(Type::FlexibleLength)
|
||||
, m_length { Length::make_px(0) }
|
||||
, m_flexible_length(flexible_length)
|
||||
{
|
||||
}
|
||||
|
||||
GridTrackSize::~GridTrackSize() = default;
|
||||
|
||||
GridTrackSize GridTrackSize::make_auto()
|
||||
GridSize::GridSize()
|
||||
: m_length { Length::make_auto() }
|
||||
{
|
||||
return GridTrackSize(CSS::Length::make_auto());
|
||||
}
|
||||
|
||||
String GridTrackSize::to_string() const
|
||||
GridSize::~GridSize() = default;
|
||||
|
||||
GridSize GridSize::make_auto()
|
||||
{
|
||||
return GridSize(CSS::Length::make_auto());
|
||||
}
|
||||
|
||||
String GridSize::to_string() const
|
||||
{
|
||||
switch (m_type) {
|
||||
case Type::Length:
|
||||
|
@ -52,78 +57,123 @@ String GridTrackSize::to_string() const
|
|||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
|
||||
Length GridTrackSize::length() const
|
||||
Length GridSize::length() const
|
||||
{
|
||||
return m_length;
|
||||
}
|
||||
|
||||
MetaGridTrackSize::MetaGridTrackSize(GridTrackSize grid_track_size)
|
||||
: m_min_grid_track_size(grid_track_size)
|
||||
, m_max_grid_track_size(grid_track_size)
|
||||
GridMinMax::GridMinMax(GridSize min_grid_size, GridSize max_grid_size)
|
||||
: m_min_grid_size(min_grid_size)
|
||||
, m_max_grid_size(max_grid_size)
|
||||
{
|
||||
}
|
||||
|
||||
MetaGridTrackSize::MetaGridTrackSize(GridTrackSize min_grid_track_size, GridTrackSize max_grid_track_size)
|
||||
: m_min_grid_track_size(min_grid_track_size)
|
||||
, m_max_grid_track_size(max_grid_track_size)
|
||||
, m_is_min_max(true)
|
||||
String GridMinMax::to_string() const
|
||||
{
|
||||
StringBuilder builder;
|
||||
builder.append("minmax("sv);
|
||||
builder.appendff("{}", m_min_grid_size.to_string());
|
||||
builder.append(", "sv);
|
||||
builder.appendff("{}", m_max_grid_size.to_string());
|
||||
builder.append(")"sv);
|
||||
return builder.to_string();
|
||||
}
|
||||
|
||||
String MetaGridTrackSize::to_string() const
|
||||
{
|
||||
if (m_is_min_max) {
|
||||
StringBuilder builder;
|
||||
builder.append("minmax("sv);
|
||||
builder.appendff("{}", m_min_grid_track_size.to_string());
|
||||
builder.append(", "sv);
|
||||
builder.appendff("{}", m_max_grid_track_size.to_string());
|
||||
builder.append(")"sv);
|
||||
return builder.to_string();
|
||||
}
|
||||
return String::formatted("{}", m_min_grid_track_size.to_string());
|
||||
}
|
||||
|
||||
ExplicitTrackSizing::ExplicitTrackSizing()
|
||||
{
|
||||
}
|
||||
|
||||
ExplicitTrackSizing::ExplicitTrackSizing(Vector<CSS::MetaGridTrackSize> meta_grid_track_sizes)
|
||||
: m_meta_grid_track_sizes(meta_grid_track_sizes)
|
||||
{
|
||||
}
|
||||
|
||||
ExplicitTrackSizing::ExplicitTrackSizing(Vector<CSS::MetaGridTrackSize> meta_grid_track_sizes, int repeat_count)
|
||||
: m_meta_grid_track_sizes(meta_grid_track_sizes)
|
||||
, m_is_repeat(true)
|
||||
GridRepeat::GridRepeat(GridTrackSizeList grid_track_size_list, int repeat_count)
|
||||
: m_type(Type::Default)
|
||||
, m_grid_track_size_list(grid_track_size_list)
|
||||
, m_repeat_count(repeat_count)
|
||||
{
|
||||
}
|
||||
|
||||
ExplicitTrackSizing::ExplicitTrackSizing(Vector<CSS::MetaGridTrackSize> meta_grid_track_sizes, Type type)
|
||||
: m_meta_grid_track_sizes(meta_grid_track_sizes)
|
||||
, m_is_auto_fill(type == Type::AutoFill)
|
||||
, m_is_auto_fit(type == Type::AutoFit)
|
||||
GridRepeat::GridRepeat(GridTrackSizeList grid_track_size_list, Type type)
|
||||
: m_type(type)
|
||||
, m_grid_track_size_list(grid_track_size_list)
|
||||
{
|
||||
}
|
||||
|
||||
String ExplicitTrackSizing::to_string() const
|
||||
GridRepeat::GridRepeat()
|
||||
{
|
||||
}
|
||||
|
||||
String GridRepeat::to_string() const
|
||||
{
|
||||
StringBuilder builder;
|
||||
if (m_is_repeat) {
|
||||
builder.append("repeat("sv);
|
||||
builder.append(m_repeat_count);
|
||||
builder.append(", "sv);
|
||||
builder.append("repeat("sv);
|
||||
switch (m_type) {
|
||||
case Type::AutoFit:
|
||||
builder.append("auto-fill"sv);
|
||||
break;
|
||||
case Type::AutoFill:
|
||||
builder.append("auto-fit"sv);
|
||||
break;
|
||||
case Type::Default:
|
||||
builder.appendff("{}", m_repeat_count);
|
||||
break;
|
||||
default:
|
||||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
for (int _ = 0; _ < m_repeat_count; ++_) {
|
||||
for (size_t y = 0; y < m_meta_grid_track_sizes.size(); ++y) {
|
||||
builder.append(m_meta_grid_track_sizes[y].to_string());
|
||||
if (y != m_meta_grid_track_sizes.size() - 1)
|
||||
builder.append(" "sv);
|
||||
}
|
||||
builder.append(", "sv);
|
||||
builder.appendff("{}", m_grid_track_size_list.to_string());
|
||||
builder.append(")"sv);
|
||||
return builder.to_string();
|
||||
}
|
||||
|
||||
ExplicitGridTrack::ExplicitGridTrack(CSS::GridMinMax grid_minmax)
|
||||
: m_type(Type::MinMax)
|
||||
, m_grid_minmax(grid_minmax)
|
||||
{
|
||||
}
|
||||
|
||||
ExplicitGridTrack::ExplicitGridTrack(CSS::GridRepeat grid_repeat)
|
||||
: m_type(Type::Repeat)
|
||||
, m_grid_repeat(grid_repeat)
|
||||
{
|
||||
}
|
||||
|
||||
ExplicitGridTrack::ExplicitGridTrack(CSS::GridSize grid_size)
|
||||
: m_type(Type::Default)
|
||||
, m_grid_size(grid_size)
|
||||
{
|
||||
}
|
||||
|
||||
String ExplicitGridTrack::to_string() const
|
||||
{
|
||||
switch (m_type) {
|
||||
case Type::MinMax:
|
||||
return m_grid_minmax.to_string();
|
||||
case Type::Repeat:
|
||||
return m_grid_repeat.to_string();
|
||||
case Type::Default:
|
||||
return m_grid_size.to_string();
|
||||
default:
|
||||
VERIFY_NOT_REACHED();
|
||||
}
|
||||
}
|
||||
|
||||
GridTrackSizeList::GridTrackSizeList(Vector<CSS::ExplicitGridTrack> track_list)
|
||||
: m_track_list(track_list)
|
||||
{
|
||||
}
|
||||
|
||||
GridTrackSizeList::GridTrackSizeList()
|
||||
: m_track_list({})
|
||||
{
|
||||
}
|
||||
|
||||
GridTrackSizeList GridTrackSizeList::make_auto()
|
||||
{
|
||||
return GridTrackSizeList();
|
||||
}
|
||||
|
||||
String GridTrackSizeList::to_string() const
|
||||
{
|
||||
StringBuilder builder;
|
||||
for (size_t i = 0; i < m_track_list.size(); ++i) {
|
||||
builder.append(m_track_list[i].to_string());
|
||||
if (i < m_track_list.size() - 1)
|
||||
builder.append(" "sv);
|
||||
}
|
||||
if (m_is_repeat)
|
||||
builder.append(")"sv);
|
||||
return builder.to_string();
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue