mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-30 23:52:43 +00:00 
			
		
		
		
	 0c14103025
			
		
	
	
		0c14103025
		
	
	
	
	
		
			
			This solves an awkward dependency cycle, where CalculatedStyleValue needs the definition of Percentage, but including that would also pull in PercentageOr, which in turn needs CalculatedStyleValue. Many places that previously included StyleValue.h no longer need to. :^)
		
			
				
	
	
		
			208 lines
		
	
	
	
		
			4.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			208 lines
		
	
	
	
		
			4.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2022, Martin Falisse <mfalisse@outlook.com>
 | |
|  *
 | |
|  * SPDX-License-Identifier: BSD-2-Clause
 | |
|  */
 | |
| 
 | |
| #include "GridTrackSize.h"
 | |
| #include <AK/String.h>
 | |
| 
 | |
| namespace Web::CSS {
 | |
| 
 | |
| GridSize::GridSize(Length length)
 | |
|     : m_type(Type::Length)
 | |
|     , m_length(length)
 | |
| {
 | |
| }
 | |
| 
 | |
| GridSize::GridSize(Percentage percentage)
 | |
|     : m_type(Type::Percentage)
 | |
|     , m_length { Length::make_px(0) }
 | |
|     , m_percentage(percentage)
 | |
| {
 | |
| }
 | |
| 
 | |
| GridSize::GridSize(float flexible_length)
 | |
|     : m_type(Type::FlexibleLength)
 | |
|     , m_length { Length::make_px(0) }
 | |
|     , m_flexible_length(flexible_length)
 | |
| {
 | |
| }
 | |
| 
 | |
| GridSize::GridSize(Type type)
 | |
|     : m_length { Length::make_auto() }
 | |
| {
 | |
|     VERIFY(type == Type::MinContent || type == Type::MaxContent);
 | |
|     m_type = type;
 | |
| }
 | |
| 
 | |
| GridSize::GridSize()
 | |
|     : m_length { Length::make_auto() }
 | |
| {
 | |
| }
 | |
| 
 | |
| GridSize::~GridSize() = default;
 | |
| 
 | |
| GridSize GridSize::make_auto()
 | |
| {
 | |
|     return GridSize(CSS::Length::make_auto());
 | |
| }
 | |
| 
 | |
| ErrorOr<String> GridSize::to_string() const
 | |
| {
 | |
|     switch (m_type) {
 | |
|     case Type::Length:
 | |
|         return m_length.to_string();
 | |
|     case Type::Percentage:
 | |
|         return m_percentage.to_string();
 | |
|     case Type::FlexibleLength:
 | |
|         return String::formatted("{}fr", m_flexible_length);
 | |
|     case Type::MaxContent:
 | |
|         return "max-content"_string;
 | |
|     case Type::MinContent:
 | |
|         return "min-content"_string;
 | |
|     }
 | |
|     VERIFY_NOT_REACHED();
 | |
| }
 | |
| 
 | |
| Length GridSize::length() const
 | |
| {
 | |
|     return m_length;
 | |
| }
 | |
| 
 | |
| GridMinMax::GridMinMax(GridSize min_grid_size, GridSize max_grid_size)
 | |
|     : m_min_grid_size(min_grid_size)
 | |
|     , m_max_grid_size(max_grid_size)
 | |
| {
 | |
| }
 | |
| 
 | |
| ErrorOr<String> GridMinMax::to_string() const
 | |
| {
 | |
|     StringBuilder builder;
 | |
|     builder.append("minmax("sv);
 | |
|     builder.appendff("{}", TRY(m_min_grid_size.to_string()));
 | |
|     builder.append(", "sv);
 | |
|     builder.appendff("{}", TRY(m_max_grid_size.to_string()));
 | |
|     builder.append(")"sv);
 | |
|     return builder.to_string();
 | |
| }
 | |
| 
 | |
| 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)
 | |
| {
 | |
| }
 | |
| 
 | |
| GridRepeat::GridRepeat(GridTrackSizeList grid_track_size_list, Type type)
 | |
|     : m_type(type)
 | |
|     , m_grid_track_size_list(grid_track_size_list)
 | |
| {
 | |
| }
 | |
| 
 | |
| GridRepeat::GridRepeat()
 | |
| {
 | |
| }
 | |
| 
 | |
| ErrorOr<String> GridRepeat::to_string() const
 | |
| {
 | |
|     StringBuilder builder;
 | |
|     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();
 | |
|     }
 | |
|     builder.append(", "sv);
 | |
|     builder.appendff("{}", TRY(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)
 | |
| {
 | |
| }
 | |
| 
 | |
| ErrorOr<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, Vector<Vector<String>> line_names)
 | |
|     : m_track_list(track_list)
 | |
|     , m_line_names(line_names)
 | |
| {
 | |
| }
 | |
| 
 | |
| GridTrackSizeList::GridTrackSizeList()
 | |
|     : m_track_list({})
 | |
|     , m_line_names({})
 | |
| {
 | |
| }
 | |
| 
 | |
| GridTrackSizeList GridTrackSizeList::make_auto()
 | |
| {
 | |
|     return GridTrackSizeList();
 | |
| }
 | |
| 
 | |
| ErrorOr<String> GridTrackSizeList::to_string() const
 | |
| {
 | |
|     StringBuilder builder;
 | |
|     auto print_line_names = [&](size_t index) -> void {
 | |
|         builder.append("["sv);
 | |
|         for (size_t y = 0; y < m_line_names[index].size(); ++y) {
 | |
|             builder.append(m_line_names[index][y]);
 | |
|             if (y != m_line_names[index].size() - 1)
 | |
|                 builder.append(" "sv);
 | |
|         }
 | |
|         builder.append("]"sv);
 | |
|     };
 | |
| 
 | |
|     for (size_t i = 0; i < m_track_list.size(); ++i) {
 | |
|         if (m_line_names[i].size() > 0) {
 | |
|             print_line_names(i);
 | |
|             builder.append(" "sv);
 | |
|         }
 | |
|         builder.append(TRY(m_track_list[i].to_string()));
 | |
|         if (i < m_track_list.size() - 1)
 | |
|             builder.append(" "sv);
 | |
|     }
 | |
|     if (m_line_names[m_track_list.size()].size() > 0) {
 | |
|         builder.append(" "sv);
 | |
|         print_line_names(m_track_list.size());
 | |
|     }
 | |
|     return builder.to_string();
 | |
| }
 | |
| 
 | |
| }
 |