mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 10:58:12 +00:00
LibWeb: Parse CSS background-position
property
This is done a bit differently from other properties: using a TokenStream instead of just a Vector of ComponentValues. The reason for this is, we can then use call the same function when parsing the `background` shorthand. Otherwise, we would have to know in advance how many values to pass down, which basically would involve duplicating the `background-position` parsing code inside `background`. The StyleValue is PositionStyleValue, since it represents a `<position>`: https://www.w3.org/TR/css-values-4/#typedef-position Unfortunately, background-position's parsing is a bit different from `<position>`'s, (background-position allows 3-value syntax and `<position>` doesn't) so we'll need to come back and write a different parsing function for that later.
This commit is contained in:
parent
5594a492f0
commit
988a8ed3d8
6 changed files with 260 additions and 2 deletions
|
@ -139,6 +139,12 @@ OverflowStyleValue const& StyleValue::as_overflow() const
|
|||
return static_cast<OverflowStyleValue const&>(*this);
|
||||
}
|
||||
|
||||
PositionStyleValue const& StyleValue::as_position() const
|
||||
{
|
||||
VERIFY(is_position());
|
||||
return static_cast<PositionStyleValue const&>(*this);
|
||||
}
|
||||
|
||||
StringStyleValue const& StyleValue::as_string() const
|
||||
{
|
||||
VERIFY(is_string());
|
||||
|
@ -401,4 +407,23 @@ String ColorStyleValue::to_string() const
|
|||
return String::formatted("rgba({}, {}, {}, {})", m_color.red(), m_color.green(), m_color.blue(), (float)(m_color.alpha()) / 255.0f);
|
||||
}
|
||||
|
||||
String PositionStyleValue::to_string() const
|
||||
{
|
||||
auto to_string = [](PositionEdge edge) {
|
||||
switch (edge) {
|
||||
case PositionEdge::Left:
|
||||
return "left";
|
||||
case PositionEdge::Right:
|
||||
return "right";
|
||||
case PositionEdge::Top:
|
||||
return "top";
|
||||
case PositionEdge::Bottom:
|
||||
return "bottom";
|
||||
}
|
||||
VERIFY_NOT_REACHED();
|
||||
};
|
||||
|
||||
return String::formatted("{} {} {} {}", to_string(m_edge_x), m_offset_x.to_string(), to_string(m_edge_y), m_offset_y.to_string());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue