mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 00:27:45 +00:00
LibWeb: Implement and use FlexStyleValue
This is not just moving the code from StyleResolver to Parser. The logic has changed to allow for the `flex-basis` to come before or after the `flex-grow/shrink` values, as well as handle the special one-value cases. Also added test cases to flex.html to check the parsing. It does parse correctly, but elements with `flex-basis: auto` do not calculate their width correctly.
This commit is contained in:
parent
44a082391b
commit
2644d2c221
5 changed files with 208 additions and 77 deletions
|
@ -231,6 +231,7 @@ public:
|
|||
Calculated,
|
||||
Background,
|
||||
BoxShadow,
|
||||
Flex,
|
||||
Font,
|
||||
ListStyle,
|
||||
TextDecoration,
|
||||
|
@ -252,6 +253,7 @@ public:
|
|||
bool is_calculated() const { return type() == Type::Calculated; }
|
||||
bool is_background() const { return type() == Type::Background; }
|
||||
bool is_box_shadow() const { return type() == Type::BoxShadow; }
|
||||
bool is_flex() const { return type() == Type::Flex; }
|
||||
bool is_font() const { return type() == Type::Font; }
|
||||
bool is_list_style() const { return type() == Type::ListStyle; }
|
||||
bool is_text_decoration() const { return type() == Type::TextDecoration; }
|
||||
|
@ -677,6 +679,43 @@ private:
|
|||
// FIXME: background-origin
|
||||
};
|
||||
|
||||
class FlexStyleValue final : public StyleValue {
|
||||
public:
|
||||
static NonnullRefPtr<FlexStyleValue> create(
|
||||
NonnullRefPtr<StyleValue> grow,
|
||||
NonnullRefPtr<StyleValue> shrink,
|
||||
NonnullRefPtr<StyleValue> basis)
|
||||
{
|
||||
return adopt_ref(*new FlexStyleValue(grow, shrink, basis));
|
||||
}
|
||||
virtual ~FlexStyleValue() override { }
|
||||
|
||||
NonnullRefPtr<StyleValue> grow() const { return m_grow; }
|
||||
NonnullRefPtr<StyleValue> shrink() const { return m_shrink; }
|
||||
NonnullRefPtr<StyleValue> basis() const { return m_basis; }
|
||||
|
||||
virtual String to_string() const override
|
||||
{
|
||||
return String::formatted("Flex grow: {}, shrink: {}, basis: {}", m_grow->to_string(), m_shrink->to_string(), m_basis->to_string());
|
||||
}
|
||||
|
||||
private:
|
||||
FlexStyleValue(
|
||||
NonnullRefPtr<StyleValue> grow,
|
||||
NonnullRefPtr<StyleValue> shrink,
|
||||
NonnullRefPtr<StyleValue> basis)
|
||||
: StyleValue(Type::Flex)
|
||||
, m_grow(grow)
|
||||
, m_shrink(shrink)
|
||||
, m_basis(basis)
|
||||
{
|
||||
}
|
||||
|
||||
NonnullRefPtr<StyleValue> m_grow;
|
||||
NonnullRefPtr<StyleValue> m_shrink;
|
||||
NonnullRefPtr<StyleValue> m_basis;
|
||||
};
|
||||
|
||||
class FontStyleValue final : public StyleValue {
|
||||
public:
|
||||
static NonnullRefPtr<FontStyleValue> create(NonnullRefPtr<StyleValue> font_style, NonnullRefPtr<StyleValue> font_weight, NonnullRefPtr<StyleValue> font_size, NonnullRefPtr<StyleValue> line_height, NonnullRefPtrVector<StyleValue>&& font_families) { return adopt_ref(*new FontStyleValue(font_style, font_weight, font_size, line_height, move(font_families))); }
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue