Serenity Operating System
at master 97 lines 2.1 kB view raw
1/* 2 * Copyright (c) 2022, Andreas Kling <kling@serenityos.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#include <LibWeb/CSS/Length.h> 8#include <LibWeb/CSS/Size.h> 9#include <LibWeb/CSS/StyleValue.h> 10 11namespace Web::CSS { 12 13Size::Size(Type type, LengthPercentage length_percentage) 14 : m_type(type) 15 , m_length_percentage(move(length_percentage)) 16{ 17} 18 19CSS::Length Size::resolved(Layout::Node const& node, Length const& reference_value) const 20{ 21 return m_length_percentage.resolved(node, reference_value); 22} 23 24Size Size::make_auto() 25{ 26 return Size { Type::Auto, Length::make_auto() }; 27} 28 29Size Size::make_px(CSSPixels px) 30{ 31 return make_length(CSS::Length::make_px(px)); 32} 33 34Size Size::make_length(Length length) 35{ 36 return Size { Type::Length, move(length) }; 37} 38 39Size Size::make_percentage(Percentage percentage) 40{ 41 return Size { Type::Percentage, move(percentage) }; 42} 43 44Size Size::make_min_content() 45{ 46 return Size { Type::MinContent, Length::make_auto() }; 47} 48 49Size Size::make_max_content() 50{ 51 return Size { Type::MaxContent, Length::make_auto() }; 52} 53 54Size Size::make_fit_content(Length available_space) 55{ 56 return Size { Type::FitContent, move(available_space) }; 57} 58 59Size Size::make_none() 60{ 61 return Size { Type::None, Length::make_auto() }; 62} 63 64bool Size::contains_percentage() const 65{ 66 switch (m_type) { 67 case Type::Auto: 68 case Type::MinContent: 69 case Type::MaxContent: 70 case Type::None: 71 return false; 72 default: 73 return m_length_percentage.contains_percentage(); 74 } 75} 76 77ErrorOr<String> Size::to_string() const 78{ 79 switch (m_type) { 80 case Type::Auto: 81 return "auto"_string; 82 case Type::Length: 83 case Type::Percentage: 84 return m_length_percentage.to_string(); 85 case Type::MinContent: 86 return "min-content"_string; 87 case Type::MaxContent: 88 return "max-content"_string; 89 case Type::FitContent: 90 return String::formatted("fit-content({})", TRY(m_length_percentage.to_string())); 91 case Type::None: 92 return "none"_string; 93 } 94 VERIFY_NOT_REACHED(); 95} 96 97}