1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-18 21:25:07 +00:00

LibWeb: Remove int usage of NumberStyleValues

Use IntegerStyleValue where we should; remove the ability of
NumberStyleValue to hold integers, and add integer interpolation for
animations.
This commit is contained in:
Sam Atkins 2023-06-01 17:10:28 +01:00 committed by Andreas Kling
parent 1160d8186b
commit 8889635ba7
5 changed files with 28 additions and 40 deletions

View file

@ -3828,7 +3828,7 @@ ErrorOr<RefPtr<StyleValue>> Parser::parse_number_value(TokenStream<ComponentValu
auto peek_token = tokens.peek_token();
if (peek_token.is(Token::Type::Number)) {
(void)tokens.next_token();
return NumberStyleValue::create_float(peek_token.token().number().value());
return NumberStyleValue::create(peek_token.token().number().value());
}
return nullptr;
@ -5511,16 +5511,16 @@ ErrorOr<RefPtr<StyleValue>> Parser::parse_flex_value(Vector<ComponentValue> cons
// https://github.com/w3c/csswg-drafts/issues/5742
// (flex-basis takes `<length>`, not `<number>`, so the 0 is a Length.)
auto flex_basis = TRY(LengthStyleValue::create(Length::make_px(0)));
auto one = TRY(NumberStyleValue::create_integer(1));
auto one = TRY(NumberStyleValue::create(1));
return FlexStyleValue::create(*value, one, flex_basis);
}
case PropertyID::FlexBasis: {
auto one = TRY(NumberStyleValue::create_integer(1));
auto one = TRY(NumberStyleValue::create(1));
return FlexStyleValue::create(one, one, *value);
}
case PropertyID::Flex: {
if (value->is_identifier() && value->to_identifier() == ValueID::None) {
auto zero = TRY(NumberStyleValue::create_integer(0));
auto zero = TRY(NumberStyleValue::create(0));
return FlexStyleValue::create(zero, zero, TRY(IdentifierStyleValue::create(ValueID::Auto)));
}
break;

View file

@ -28,6 +28,7 @@
#include <LibWeb/CSS/StyleValues/GridTrackSizeListStyleValue.h>
#include <LibWeb/CSS/StyleValues/IdentifierStyleValue.h>
#include <LibWeb/CSS/StyleValues/InitialStyleValue.h>
#include <LibWeb/CSS/StyleValues/IntegerStyleValue.h>
#include <LibWeb/CSS/StyleValues/LengthStyleValue.h>
#include <LibWeb/CSS/StyleValues/NumberStyleValue.h>
#include <LibWeb/CSS/StyleValues/PercentageStyleValue.h>
@ -534,9 +535,9 @@ ErrorOr<RefPtr<StyleValue const>> ResolvedCSSStyleDeclaration::style_value_for_p
case PropertyID::FlexDirection:
return IdentifierStyleValue::create(to_value_id(layout_node.computed_values().flex_direction()));
case PropertyID::FlexGrow:
return NumberStyleValue::create_float(layout_node.computed_values().flex_grow());
return NumberStyleValue::create(layout_node.computed_values().flex_grow());
case PropertyID::FlexShrink:
return NumberStyleValue::create_float(layout_node.computed_values().flex_shrink());
return NumberStyleValue::create(layout_node.computed_values().flex_shrink());
case PropertyID::FlexWrap:
return IdentifierStyleValue::create(to_value_id(layout_node.computed_values().flex_wrap()));
case PropertyID::Float:
@ -554,7 +555,7 @@ ErrorOr<RefPtr<StyleValue const>> ResolvedCSSStyleDeclaration::style_value_for_p
VERIFY_NOT_REACHED();
}
case PropertyID::FontWeight:
return NumberStyleValue::create_integer(layout_node.computed_values().font_weight());
return NumberStyleValue::create(layout_node.computed_values().font_weight());
case PropertyID::GridArea: {
auto maybe_grid_row_start = property(PropertyID::GridRowStart);
auto maybe_grid_column_start = property(PropertyID::GridColumnStart);
@ -682,9 +683,9 @@ ErrorOr<RefPtr<StyleValue const>> ResolvedCSSStyleDeclaration::style_value_for_p
case PropertyID::MinWidth:
return style_value_for_size(layout_node.computed_values().min_width());
case PropertyID::Opacity:
return NumberStyleValue::create_float(layout_node.computed_values().opacity());
return NumberStyleValue::create(layout_node.computed_values().opacity());
case PropertyID::Order:
return NumberStyleValue::create_integer(layout_node.computed_values().order());
return IntegerStyleValue::create(layout_node.computed_values().order());
case PropertyID::OverflowX:
return IdentifierStyleValue::create(to_value_id(layout_node.computed_values().overflow_x()));
case PropertyID::OverflowY:
@ -753,12 +754,12 @@ ErrorOr<RefPtr<StyleValue const>> ResolvedCSSStyleDeclaration::style_value_for_p
StyleValueVector parameters;
TRY(parameters.try_ensure_capacity(6));
parameters.unchecked_append(TRY(NumberStyleValue::create_float(affine_matrix.a())));
parameters.unchecked_append(TRY(NumberStyleValue::create_float(affine_matrix.b())));
parameters.unchecked_append(TRY(NumberStyleValue::create_float(affine_matrix.c())));
parameters.unchecked_append(TRY(NumberStyleValue::create_float(affine_matrix.d())));
parameters.unchecked_append(TRY(NumberStyleValue::create_float(affine_matrix.e())));
parameters.unchecked_append(TRY(NumberStyleValue::create_float(affine_matrix.f())));
parameters.unchecked_append(TRY(NumberStyleValue::create(affine_matrix.a())));
parameters.unchecked_append(TRY(NumberStyleValue::create(affine_matrix.b())));
parameters.unchecked_append(TRY(NumberStyleValue::create(affine_matrix.c())));
parameters.unchecked_append(TRY(NumberStyleValue::create(affine_matrix.d())));
parameters.unchecked_append(TRY(NumberStyleValue::create(affine_matrix.e())));
parameters.unchecked_append(TRY(NumberStyleValue::create(affine_matrix.f())));
NonnullRefPtr<StyleValue> matrix_function = TRY(TransformationStyleValue::create(TransformFunction::Matrix, move(parameters)));
// Elsewhere we always store the transform property's value as a StyleValueList of TransformationStyleValues,
@ -779,7 +780,7 @@ ErrorOr<RefPtr<StyleValue const>> ResolvedCSSStyleDeclaration::style_value_for_p
auto maybe_z_index = layout_node.computed_values().z_index();
if (!maybe_z_index.has_value())
return nullptr;
return NumberStyleValue::create_integer(maybe_z_index.release_value());
return IntegerStyleValue::create(maybe_z_index.release_value());
}
case PropertyID::Invalid:
return IdentifierStyleValue::create(ValueID::Invalid);

View file

@ -45,6 +45,7 @@
#include <LibWeb/CSS/StyleValues/GridTrackSizeListShorthandStyleValue.h>
#include <LibWeb/CSS/StyleValues/GridTrackSizeListStyleValue.h>
#include <LibWeb/CSS/StyleValues/IdentifierStyleValue.h>
#include <LibWeb/CSS/StyleValues/IntegerStyleValue.h>
#include <LibWeb/CSS/StyleValues/LengthStyleValue.h>
#include <LibWeb/CSS/StyleValues/ListStyleStyleValue.h>
#include <LibWeb/CSS/StyleValues/NumberStyleValue.h>
@ -1081,13 +1082,15 @@ static ErrorOr<NonnullRefPtr<StyleValue>> interpolate_property(StyleValue const&
return ColorStyleValue::create(color);
}
case StyleValue::Type::Integer:
return IntegerStyleValue::create(interpolate_raw(from.as_integer().integer(), to.as_integer().integer()));
case StyleValue::Type::Length: {
auto& from_length = from.as_length().length();
auto& to_length = to.as_length().length();
return LengthStyleValue::create(Length(interpolate_raw(from_length.raw_value(), to_length.raw_value()), from_length.type()));
}
case StyleValue::Type::Number:
return NumberStyleValue::create_float(interpolate_raw(from.as_number().number(), to.as_number().number()));
return NumberStyleValue::create(interpolate_raw(from.as_number().number(), to.as_number().number()));
case StyleValue::Type::Percentage:
return PercentageStyleValue::create(Percentage(interpolate_raw(from.as_percentage().percentage().value(), to.as_percentage().percentage().value())));
case StyleValue::Type::Position: {
@ -1929,7 +1932,7 @@ void StyleComputer::compute_font(StyleProperties& style, DOM::Element const* ele
FontCache::the().set(font_selector, *found_font);
style.set_property(CSS::PropertyID::FontSize, LengthStyleValue::create(CSS::Length::make_px(font_size_in_px)).release_value_but_fixme_should_propagate_errors(), nullptr);
style.set_property(CSS::PropertyID::FontWeight, NumberStyleValue::create_integer(weight).release_value_but_fixme_should_propagate_errors(), nullptr);
style.set_property(CSS::PropertyID::FontWeight, NumberStyleValue::create(weight).release_value_but_fixme_should_propagate_errors(), nullptr);
style.set_computed_font(found_font.release_nonnull());

View file

@ -13,10 +13,7 @@ namespace Web::CSS {
ErrorOr<String> NumberStyleValue::to_string() const
{
return m_value.visit(
[](auto value) {
return String::formatted("{}", value);
});
return String::number(m_value);
}
}

View file

@ -15,38 +15,25 @@ namespace Web::CSS {
class NumberStyleValue : public StyleValueWithDefaultOperators<NumberStyleValue> {
public:
static ErrorOr<ValueComparingNonnullRefPtr<NumberStyleValue>> create_float(float value)
static ErrorOr<ValueComparingNonnullRefPtr<NumberStyleValue>> create(float value)
{
return adopt_nonnull_ref_or_enomem(new (nothrow) NumberStyleValue(value));
}
static ErrorOr<ValueComparingNonnullRefPtr<NumberStyleValue>> create_integer(i64 value)
{
return adopt_nonnull_ref_or_enomem(new (nothrow) NumberStyleValue(value));
}
float number() const
{
return m_value.visit(
[](float value) { return value; },
[](i64 value) { return (float)value; });
}
bool has_integer() const { return m_value.has<i64>(); }
float integer() const { return m_value.get<i64>(); }
float number() const { return m_value; }
virtual ErrorOr<String> to_string() const override;
bool properties_equal(NumberStyleValue const& other) const { return m_value == other.m_value; }
private:
explicit NumberStyleValue(Variant<float, i64> value)
explicit NumberStyleValue(float value)
: StyleValueWithDefaultOperators(Type::Number)
, m_value(move(value))
, m_value(value)
{
}
Variant<float, i64> m_value { (i64)0 };
float m_value { 0 };
};
}