mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-05-18 17:12:54 +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:
parent
1160d8186b
commit
8889635ba7
Notes:
sideshowbarker
2024-07-17 02:38:39 +09:00
Author: https://github.com/AtkinsSJ
Commit: 8889635ba7
Pull-request: https://github.com/SerenityOS/serenity/pull/19208
5 changed files with 28 additions and 40 deletions
|
@ -3828,7 +3828,7 @@ ErrorOr<RefPtr<StyleValue>> Parser::parse_number_value(TokenStream<ComponentValu
|
||||||
auto peek_token = tokens.peek_token();
|
auto peek_token = tokens.peek_token();
|
||||||
if (peek_token.is(Token::Type::Number)) {
|
if (peek_token.is(Token::Type::Number)) {
|
||||||
(void)tokens.next_token();
|
(void)tokens.next_token();
|
||||||
return NumberStyleValue::create_float(peek_token.token().number().value());
|
return NumberStyleValue::create(peek_token.token().number().value());
|
||||||
}
|
}
|
||||||
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@ -5511,16 +5511,16 @@ ErrorOr<RefPtr<StyleValue>> Parser::parse_flex_value(Vector<ComponentValue> cons
|
||||||
// https://github.com/w3c/csswg-drafts/issues/5742
|
// https://github.com/w3c/csswg-drafts/issues/5742
|
||||||
// (flex-basis takes `<length>`, not `<number>`, so the 0 is a Length.)
|
// (flex-basis takes `<length>`, not `<number>`, so the 0 is a Length.)
|
||||||
auto flex_basis = TRY(LengthStyleValue::create(Length::make_px(0)));
|
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);
|
return FlexStyleValue::create(*value, one, flex_basis);
|
||||||
}
|
}
|
||||||
case PropertyID::FlexBasis: {
|
case PropertyID::FlexBasis: {
|
||||||
auto one = TRY(NumberStyleValue::create_integer(1));
|
auto one = TRY(NumberStyleValue::create(1));
|
||||||
return FlexStyleValue::create(one, one, *value);
|
return FlexStyleValue::create(one, one, *value);
|
||||||
}
|
}
|
||||||
case PropertyID::Flex: {
|
case PropertyID::Flex: {
|
||||||
if (value->is_identifier() && value->to_identifier() == ValueID::None) {
|
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)));
|
return FlexStyleValue::create(zero, zero, TRY(IdentifierStyleValue::create(ValueID::Auto)));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#include <LibWeb/CSS/StyleValues/GridTrackSizeListStyleValue.h>
|
#include <LibWeb/CSS/StyleValues/GridTrackSizeListStyleValue.h>
|
||||||
#include <LibWeb/CSS/StyleValues/IdentifierStyleValue.h>
|
#include <LibWeb/CSS/StyleValues/IdentifierStyleValue.h>
|
||||||
#include <LibWeb/CSS/StyleValues/InitialStyleValue.h>
|
#include <LibWeb/CSS/StyleValues/InitialStyleValue.h>
|
||||||
|
#include <LibWeb/CSS/StyleValues/IntegerStyleValue.h>
|
||||||
#include <LibWeb/CSS/StyleValues/LengthStyleValue.h>
|
#include <LibWeb/CSS/StyleValues/LengthStyleValue.h>
|
||||||
#include <LibWeb/CSS/StyleValues/NumberStyleValue.h>
|
#include <LibWeb/CSS/StyleValues/NumberStyleValue.h>
|
||||||
#include <LibWeb/CSS/StyleValues/PercentageStyleValue.h>
|
#include <LibWeb/CSS/StyleValues/PercentageStyleValue.h>
|
||||||
|
@ -534,9 +535,9 @@ ErrorOr<RefPtr<StyleValue const>> ResolvedCSSStyleDeclaration::style_value_for_p
|
||||||
case PropertyID::FlexDirection:
|
case PropertyID::FlexDirection:
|
||||||
return IdentifierStyleValue::create(to_value_id(layout_node.computed_values().flex_direction()));
|
return IdentifierStyleValue::create(to_value_id(layout_node.computed_values().flex_direction()));
|
||||||
case PropertyID::FlexGrow:
|
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:
|
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:
|
case PropertyID::FlexWrap:
|
||||||
return IdentifierStyleValue::create(to_value_id(layout_node.computed_values().flex_wrap()));
|
return IdentifierStyleValue::create(to_value_id(layout_node.computed_values().flex_wrap()));
|
||||||
case PropertyID::Float:
|
case PropertyID::Float:
|
||||||
|
@ -554,7 +555,7 @@ ErrorOr<RefPtr<StyleValue const>> ResolvedCSSStyleDeclaration::style_value_for_p
|
||||||
VERIFY_NOT_REACHED();
|
VERIFY_NOT_REACHED();
|
||||||
}
|
}
|
||||||
case PropertyID::FontWeight:
|
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: {
|
case PropertyID::GridArea: {
|
||||||
auto maybe_grid_row_start = property(PropertyID::GridRowStart);
|
auto maybe_grid_row_start = property(PropertyID::GridRowStart);
|
||||||
auto maybe_grid_column_start = property(PropertyID::GridColumnStart);
|
auto maybe_grid_column_start = property(PropertyID::GridColumnStart);
|
||||||
|
@ -682,9 +683,9 @@ ErrorOr<RefPtr<StyleValue const>> ResolvedCSSStyleDeclaration::style_value_for_p
|
||||||
case PropertyID::MinWidth:
|
case PropertyID::MinWidth:
|
||||||
return style_value_for_size(layout_node.computed_values().min_width());
|
return style_value_for_size(layout_node.computed_values().min_width());
|
||||||
case PropertyID::Opacity:
|
case PropertyID::Opacity:
|
||||||
return NumberStyleValue::create_float(layout_node.computed_values().opacity());
|
return NumberStyleValue::create(layout_node.computed_values().opacity());
|
||||||
case PropertyID::Order:
|
case PropertyID::Order:
|
||||||
return NumberStyleValue::create_integer(layout_node.computed_values().order());
|
return IntegerStyleValue::create(layout_node.computed_values().order());
|
||||||
case PropertyID::OverflowX:
|
case PropertyID::OverflowX:
|
||||||
return IdentifierStyleValue::create(to_value_id(layout_node.computed_values().overflow_x()));
|
return IdentifierStyleValue::create(to_value_id(layout_node.computed_values().overflow_x()));
|
||||||
case PropertyID::OverflowY:
|
case PropertyID::OverflowY:
|
||||||
|
@ -753,12 +754,12 @@ ErrorOr<RefPtr<StyleValue const>> ResolvedCSSStyleDeclaration::style_value_for_p
|
||||||
|
|
||||||
StyleValueVector parameters;
|
StyleValueVector parameters;
|
||||||
TRY(parameters.try_ensure_capacity(6));
|
TRY(parameters.try_ensure_capacity(6));
|
||||||
parameters.unchecked_append(TRY(NumberStyleValue::create_float(affine_matrix.a())));
|
parameters.unchecked_append(TRY(NumberStyleValue::create(affine_matrix.a())));
|
||||||
parameters.unchecked_append(TRY(NumberStyleValue::create_float(affine_matrix.b())));
|
parameters.unchecked_append(TRY(NumberStyleValue::create(affine_matrix.b())));
|
||||||
parameters.unchecked_append(TRY(NumberStyleValue::create_float(affine_matrix.c())));
|
parameters.unchecked_append(TRY(NumberStyleValue::create(affine_matrix.c())));
|
||||||
parameters.unchecked_append(TRY(NumberStyleValue::create_float(affine_matrix.d())));
|
parameters.unchecked_append(TRY(NumberStyleValue::create(affine_matrix.d())));
|
||||||
parameters.unchecked_append(TRY(NumberStyleValue::create_float(affine_matrix.e())));
|
parameters.unchecked_append(TRY(NumberStyleValue::create(affine_matrix.e())));
|
||||||
parameters.unchecked_append(TRY(NumberStyleValue::create_float(affine_matrix.f())));
|
parameters.unchecked_append(TRY(NumberStyleValue::create(affine_matrix.f())));
|
||||||
|
|
||||||
NonnullRefPtr<StyleValue> matrix_function = TRY(TransformationStyleValue::create(TransformFunction::Matrix, move(parameters)));
|
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,
|
// 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();
|
auto maybe_z_index = layout_node.computed_values().z_index();
|
||||||
if (!maybe_z_index.has_value())
|
if (!maybe_z_index.has_value())
|
||||||
return nullptr;
|
return nullptr;
|
||||||
return NumberStyleValue::create_integer(maybe_z_index.release_value());
|
return IntegerStyleValue::create(maybe_z_index.release_value());
|
||||||
}
|
}
|
||||||
case PropertyID::Invalid:
|
case PropertyID::Invalid:
|
||||||
return IdentifierStyleValue::create(ValueID::Invalid);
|
return IdentifierStyleValue::create(ValueID::Invalid);
|
||||||
|
|
|
@ -45,6 +45,7 @@
|
||||||
#include <LibWeb/CSS/StyleValues/GridTrackSizeListShorthandStyleValue.h>
|
#include <LibWeb/CSS/StyleValues/GridTrackSizeListShorthandStyleValue.h>
|
||||||
#include <LibWeb/CSS/StyleValues/GridTrackSizeListStyleValue.h>
|
#include <LibWeb/CSS/StyleValues/GridTrackSizeListStyleValue.h>
|
||||||
#include <LibWeb/CSS/StyleValues/IdentifierStyleValue.h>
|
#include <LibWeb/CSS/StyleValues/IdentifierStyleValue.h>
|
||||||
|
#include <LibWeb/CSS/StyleValues/IntegerStyleValue.h>
|
||||||
#include <LibWeb/CSS/StyleValues/LengthStyleValue.h>
|
#include <LibWeb/CSS/StyleValues/LengthStyleValue.h>
|
||||||
#include <LibWeb/CSS/StyleValues/ListStyleStyleValue.h>
|
#include <LibWeb/CSS/StyleValues/ListStyleStyleValue.h>
|
||||||
#include <LibWeb/CSS/StyleValues/NumberStyleValue.h>
|
#include <LibWeb/CSS/StyleValues/NumberStyleValue.h>
|
||||||
|
@ -1081,13 +1082,15 @@ static ErrorOr<NonnullRefPtr<StyleValue>> interpolate_property(StyleValue const&
|
||||||
|
|
||||||
return ColorStyleValue::create(color);
|
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: {
|
case StyleValue::Type::Length: {
|
||||||
auto& from_length = from.as_length().length();
|
auto& from_length = from.as_length().length();
|
||||||
auto& to_length = to.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()));
|
return LengthStyleValue::create(Length(interpolate_raw(from_length.raw_value(), to_length.raw_value()), from_length.type()));
|
||||||
}
|
}
|
||||||
case StyleValue::Type::Number:
|
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:
|
case StyleValue::Type::Percentage:
|
||||||
return PercentageStyleValue::create(Percentage(interpolate_raw(from.as_percentage().percentage().value(), to.as_percentage().percentage().value())));
|
return PercentageStyleValue::create(Percentage(interpolate_raw(from.as_percentage().percentage().value(), to.as_percentage().percentage().value())));
|
||||||
case StyleValue::Type::Position: {
|
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);
|
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::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());
|
style.set_computed_font(found_font.release_nonnull());
|
||||||
|
|
||||||
|
|
|
@ -13,10 +13,7 @@ namespace Web::CSS {
|
||||||
|
|
||||||
ErrorOr<String> NumberStyleValue::to_string() const
|
ErrorOr<String> NumberStyleValue::to_string() const
|
||||||
{
|
{
|
||||||
return m_value.visit(
|
return String::number(m_value);
|
||||||
[](auto value) {
|
|
||||||
return String::formatted("{}", value);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,38 +15,25 @@ namespace Web::CSS {
|
||||||
|
|
||||||
class NumberStyleValue : public StyleValueWithDefaultOperators<NumberStyleValue> {
|
class NumberStyleValue : public StyleValueWithDefaultOperators<NumberStyleValue> {
|
||||||
public:
|
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));
|
return adopt_nonnull_ref_or_enomem(new (nothrow) NumberStyleValue(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
static ErrorOr<ValueComparingNonnullRefPtr<NumberStyleValue>> create_integer(i64 value)
|
float number() const { return m_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>(); }
|
|
||||||
|
|
||||||
virtual ErrorOr<String> to_string() const override;
|
virtual ErrorOr<String> to_string() const override;
|
||||||
|
|
||||||
bool properties_equal(NumberStyleValue const& other) const { return m_value == other.m_value; }
|
bool properties_equal(NumberStyleValue const& other) const { return m_value == other.m_value; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit NumberStyleValue(Variant<float, i64> value)
|
explicit NumberStyleValue(float value)
|
||||||
: StyleValueWithDefaultOperators(Type::Number)
|
: StyleValueWithDefaultOperators(Type::Number)
|
||||||
, m_value(move(value))
|
, m_value(value)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
Variant<float, i64> m_value { (i64)0 };
|
float m_value { 0 };
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue