summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibWeb/CSS/StyleProperties.cpp
diff options
context:
space:
mode:
authorSam Atkins <atkinssj@serenityos.org>2021-09-23 21:20:02 +0100
committerAndreas Kling <kling@serenityos.org>2021-09-24 15:01:43 +0200
commitb0324b72012b2990321d787d5bcda1bd3f64120b (patch)
treed448669688b9d7711b3b0cb748174e56e0fd031e /Userland/Libraries/LibWeb/CSS/StyleProperties.cpp
parent48ef5c8e846cda216efe561da457ea534f5bdf99 (diff)
downloadserenity-b0324b72012b2990321d787d5bcda1bd3f64120b.zip
LibWeb: Use new StyleValue API in StyleProperties.cpp
This replaces a bunch of casts with `.as_foo()` calls, and adjusts calls to the old `is_foo()` methods that now are better as `has_foo()`. Also tidied up some whitespace to be more consistent.
Diffstat (limited to 'Userland/Libraries/LibWeb/CSS/StyleProperties.cpp')
-rw-r--r--Userland/Libraries/LibWeb/CSS/StyleProperties.cpp93
1 files changed, 40 insertions, 53 deletions
diff --git a/Userland/Libraries/LibWeb/CSS/StyleProperties.cpp b/Userland/Libraries/LibWeb/CSS/StyleProperties.cpp
index 6338ca22f8..4d548aa293 100644
--- a/Userland/Libraries/LibWeb/CSS/StyleProperties.cpp
+++ b/Userland/Libraries/LibWeb/CSS/StyleProperties.cpp
@@ -60,7 +60,7 @@ Length StyleProperties::length_or_fallback(CSS::PropertyID id, const Length& fal
if (value.value()->is_calculated()) {
Length length = Length(0, Length::Type::Calculated);
- length.set_calculated_style(verify_cast<CalculatedStyleValue>(value.value().ptr()));
+ length.set_calculated_style(&value.value()->as_calculated());
return length;
}
@@ -80,7 +80,7 @@ LengthBox StyleProperties::length_box(CSS::PropertyID left_id, CSS::PropertyID t
Color StyleProperties::color_or_fallback(CSS::PropertyID id, Layout::NodeWithStyle const& node, Color fallback) const
{
auto value = property(id);
- if (!value.has_value())
+ if (!value.has_value() || !value.value()->has_color())
return fallback;
return value.value()->to_color(node);
}
@@ -91,8 +91,8 @@ void StyleProperties::load_font(Layout::Node const& node) const
auto font_weight = property(CSS::PropertyID::FontWeight).value_or(IdentifierStyleValue::create(CSS::ValueID::Normal));
int weight = Gfx::FontWeight::Regular;
- if (font_weight->is_identifier()) {
- switch (static_cast<const IdentifierStyleValue&>(*font_weight).id()) {
+ if (font_weight->has_identifier()) {
+ switch (font_weight->to_identifier()) {
case CSS::ValueID::Normal:
weight = Gfx::FontWeight::Regular;
break;
@@ -111,7 +111,7 @@ void StyleProperties::load_font(Layout::Node const& node) const
break;
}
} else if (font_weight->is_numeric()) {
- int font_weight_integer = roundf(static_cast<NumericStyleValue const&>(*font_weight).value());
+ int font_weight_integer = font_weight->as_numeric().int_value();
if (font_weight_integer <= Gfx::FontWeight::Regular)
weight = Gfx::FontWeight::Regular;
else if (font_weight_integer <= Gfx::FontWeight::Bold)
@@ -127,8 +127,8 @@ void StyleProperties::load_font(Layout::Node const& node) const
auto parent_font_size = node.parent() == nullptr ? size : node.parent()->font_size();
constexpr float font_size_ratio = 1.2f;
- if (font_size->is_identifier()) {
- switch (static_cast<const IdentifierStyleValue&>(*font_size).id()) {
+ if (font_size->has_identifier()) {
+ switch (font_size->to_identifier()) {
case CSS::ValueID::XxSmall:
case CSS::ValueID::XSmall:
case CSS::ValueID::Small:
@@ -159,7 +159,7 @@ void StyleProperties::load_font(Layout::Node const& node) const
maybe_length = font_size->to_length();
} else if (font_size->is_calculated()) {
Length length = Length(0, Length::Type::Calculated);
- length.set_calculated_style(verify_cast<CalculatedStyleValue>(font_size.ptr()));
+ length.set_calculated_style(&font_size->as_calculated());
maybe_length = length;
}
if (maybe_length.has_value()) {
@@ -214,7 +214,7 @@ void StyleProperties::load_font(Layout::Node const& node) const
auto family_value = property(PropertyID::FontFamily).value_or(StringStyleValue::create("Katica"));
if (family_value->is_value_list()) {
- auto& family_list = static_cast<StyleValueList const&>(*family_value).values();
+ auto& family_list = family_value->as_value_list().values();
for (auto& family : family_list) {
if (family.is_identifier()) {
found_font = find_generic_font(family.to_identifier());
@@ -271,7 +271,7 @@ Optional<int> StyleProperties::z_index() const
if (value->has_auto())
return 0;
if (value->is_numeric())
- return static_cast<int>(static_cast<NumericStyleValue&>(*value).value());
+ return value->as_numeric().int_value();
return {};
}
@@ -282,10 +282,10 @@ Optional<float> StyleProperties::opacity() const
return {};
auto& value = maybe_value.value();
- if (value->is_numeric())
- return clamp(static_cast<NumericStyleValue&>(*value).value(), 0.0f, 1.0f);
+ if (value->has_number())
+ return clamp(value->to_number(), 0.0f, 1.0f);
- if (value->is_length()) {
+ if (value->has_length()) {
auto length = value->to_length();
if (length.is_percentage())
return clamp(length.raw_value() / 100.0f, 0.0f, 1.0f);
@@ -342,7 +342,7 @@ Optional<CSS::FlexBasisData> StyleProperties::flex_basis() const
if (value.value()->has_auto())
return { { CSS::FlexBasis::Auto, {} } };
- if (value.value()->is_length())
+ if (value.value()->has_length())
return { { CSS::FlexBasis::Length, value.value()->to_length() } };
return {};
@@ -353,12 +353,8 @@ Optional<float> StyleProperties::flex_grow_factor() const
auto value = property(CSS::PropertyID::FlexGrow);
if (!value.has_value())
return {};
- if (value.value()->is_numeric()) {
- auto numeric = verify_cast<CSS::NumericStyleValue>(value.value().ptr());
- return numeric->value();
- }
- if (value.value()->is_length() && value.value()->to_length().raw_value() == 0)
- return { 0 };
+ if (value.value()->has_number())
+ return value.value()->to_number();
return {};
}
@@ -367,12 +363,8 @@ Optional<float> StyleProperties::flex_shrink_factor() const
auto value = property(CSS::PropertyID::FlexShrink);
if (!value.has_value())
return {};
- if (value.value()->is_numeric()) {
- auto numeric = verify_cast<CSS::NumericStyleValue>(value.value().ptr());
- return numeric->value();
- }
- if (value.value()->is_length() && value.value()->to_length().raw_value() == 0)
- return { 0 };
+ if (value.value()->has_number())
+ return value.value()->to_number();
return {};
}
Optional<CSS::JustifyContent> StyleProperties::justify_content() const
@@ -408,14 +400,14 @@ Vector<CSS::Transformation> StyleProperties::transformations() const
if (!value.value()->is_value_list())
return {};
- auto& list = static_cast<const StyleValueList&>(*value.value());
+ auto& list = value.value()->as_value_list();
Vector<CSS::Transformation> transformations;
for (auto& it : list.values()) {
if (!it.is_transformation())
return {};
- auto& transformation_style_value = static_cast<TransformationStyleValue const&>(it);
+ auto& transformation_style_value = it.as_transformation();
CSS::Transformation transformation;
transformation.function = transformation_style_value.transform_function();
Vector<Variant<CSS::Length, float>> values;
@@ -423,7 +415,7 @@ Vector<CSS::Transformation> StyleProperties::transformations() const
if (transformation_value.is_length()) {
values.append({ transformation_value.to_length() });
} else if (transformation_value.is_numeric()) {
- values.append({ static_cast<NumericStyleValue const&>(transformation_value).value() });
+ values.append({ transformation_value.to_number() });
} else {
dbgln("FIXME: Unsupported value in transform!");
}
@@ -458,9 +450,9 @@ Optional<CSS::AlignItems> StyleProperties::align_items() const
Optional<CSS::Position> StyleProperties::position() const
{
auto value = property(CSS::PropertyID::Position);
- if (!value.has_value() || !value.value()->is_identifier())
+ if (!value.has_value())
return {};
- switch (static_cast<const IdentifierStyleValue&>(*value.value()).id()) {
+ switch (value.value()->to_identifier()) {
case CSS::ValueID::Static:
return CSS::Position::Static;
case CSS::ValueID::Relative:
@@ -499,10 +491,9 @@ bool StyleProperties::operator==(const StyleProperties& other) const
Optional<CSS::TextAlign> StyleProperties::text_align() const
{
auto value = property(CSS::PropertyID::TextAlign);
- if (!value.has_value() || !value.value()->is_identifier())
+ if (!value.has_value())
return {};
-
- switch (static_cast<const IdentifierStyleValue&>(*value.value()).id()) {
+ switch (value.value()->to_identifier()) {
case CSS::ValueID::Left:
return CSS::TextAlign::Left;
case CSS::ValueID::Center:
@@ -521,9 +512,9 @@ Optional<CSS::TextAlign> StyleProperties::text_align() const
Optional<CSS::WhiteSpace> StyleProperties::white_space() const
{
auto value = property(CSS::PropertyID::WhiteSpace);
- if (!value.has_value() || !value.value()->is_identifier())
+ if (!value.has_value())
return {};
- switch (static_cast<const IdentifierStyleValue&>(*value.value()).id()) {
+ switch (value.value()->to_identifier()) {
case CSS::ValueID::Normal:
return CSS::WhiteSpace::Normal;
case CSS::ValueID::Nowrap:
@@ -542,9 +533,9 @@ Optional<CSS::WhiteSpace> StyleProperties::white_space() const
Optional<CSS::LineStyle> StyleProperties::line_style(CSS::PropertyID property_id) const
{
auto value = property(property_id);
- if (!value.has_value() || !value.value()->is_identifier())
+ if (!value.has_value())
return {};
- switch (static_cast<const IdentifierStyleValue&>(*value.value()).id()) {
+ switch (value.value()->to_identifier()) {
case CSS::ValueID::None:
return CSS::LineStyle::None;
case CSS::ValueID::Hidden:
@@ -573,9 +564,9 @@ Optional<CSS::LineStyle> StyleProperties::line_style(CSS::PropertyID property_id
Optional<CSS::Float> StyleProperties::float_() const
{
auto value = property(CSS::PropertyID::Float);
- if (!value.has_value() || !value.value()->is_identifier())
+ if (!value.has_value())
return {};
- switch (static_cast<const IdentifierStyleValue&>(*value.value()).id()) {
+ switch (value.value()->to_identifier()) {
case CSS::ValueID::None:
return CSS::Float::None;
case CSS::ValueID::Left:
@@ -590,9 +581,9 @@ Optional<CSS::Float> StyleProperties::float_() const
Optional<CSS::Clear> StyleProperties::clear() const
{
auto value = property(CSS::PropertyID::Clear);
- if (!value.has_value() || !value.value()->is_identifier())
+ if (!value.has_value())
return {};
- switch (static_cast<const IdentifierStyleValue&>(*value.value()).id()) {
+ switch (value.value()->to_identifier()) {
case CSS::ValueID::None:
return CSS::Clear::None;
case CSS::ValueID::Left:
@@ -609,9 +600,9 @@ Optional<CSS::Clear> StyleProperties::clear() const
Optional<CSS::Cursor> StyleProperties::cursor() const
{
auto value = property(CSS::PropertyID::Cursor);
- if (!value.has_value() || !value.value()->is_identifier())
+ if (!value.has_value())
return {};
- switch (static_cast<const IdentifierStyleValue&>(*value.value()).id()) {
+ switch (value.value()->to_identifier()) {
case CSS::ValueID::Auto:
return CSS::Cursor::Auto;
case CSS::ValueID::Default:
@@ -694,7 +685,7 @@ CSS::Display StyleProperties::display() const
auto value = property(CSS::PropertyID::Display);
if (!value.has_value() || !value.value()->is_identifier())
return CSS::Display::Inline;
- switch (static_cast<const IdentifierStyleValue&>(*value.value()).id()) {
+ switch (value.value()->to_identifier()) {
case CSS::ValueID::None:
return CSS::Display::None;
case CSS::ValueID::Block:
@@ -733,9 +724,9 @@ CSS::Display StyleProperties::display() const
Optional<CSS::TextDecorationLine> StyleProperties::text_decoration_line() const
{
auto value = property(CSS::PropertyID::TextDecorationLine);
- if (!value.has_value() || !value.value()->is_identifier())
+ if (!value.has_value())
return {};
- switch (static_cast<const IdentifierStyleValue&>(*value.value()).id()) {
+ switch (value.value()->to_identifier()) {
case CSS::ValueID::None:
return CSS::TextDecorationLine::None;
case CSS::ValueID::Underline:
@@ -779,7 +770,6 @@ Optional<CSS::ListStyleType> StyleProperties::list_style_type() const
auto value = property(CSS::PropertyID::ListStyleType);
if (!value.has_value())
return {};
-
switch (value.value()->to_identifier()) {
case CSS::ValueID::None:
return CSS::ListStyleType::None;
@@ -825,7 +815,6 @@ Optional<CSS::Overflow> StyleProperties::overflow(CSS::PropertyID property_id) c
auto value = property(property_id);
if (!value.has_value())
return {};
-
switch (value.value()->to_identifier()) {
case CSS::ValueID::Auto:
return CSS::Overflow::Auto;
@@ -847,7 +836,6 @@ Optional<CSS::Repeat> StyleProperties::background_repeat_x() const
auto value = property(CSS::PropertyID::BackgroundRepeatX);
if (!value.has_value())
return {};
-
switch (value.value()->to_identifier()) {
case CSS::ValueID::NoRepeat:
return CSS::Repeat::NoRepeat;
@@ -867,7 +855,6 @@ Optional<CSS::Repeat> StyleProperties::background_repeat_y() const
auto value = property(CSS::PropertyID::BackgroundRepeatY);
if (!value.has_value())
return {};
-
switch (value.value()->to_identifier()) {
case CSS::ValueID::NoRepeat:
return CSS::Repeat::NoRepeat;
@@ -892,7 +879,7 @@ Optional<CSS::BoxShadowData> StyleProperties::box_shadow() const
if (!value->is_box_shadow())
return {};
- auto box = verify_cast<CSS::BoxShadowStyleValue>(value.ptr());
- return { { box->offset_x(), box->offset_y(), box->blur_radius(), box->color() } };
+ auto& box = value->as_box_shadow();
+ return { { box.offset_x(), box.offset_y(), box.blur_radius(), box.color() } };
}
}