diff --git a/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp b/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp index aa277b061b..4856b1bbbe 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp +++ b/Userland/Libraries/LibWeb/CSS/StyleComputer.cpp @@ -825,11 +825,13 @@ static ErrorOr> interpolate_property(StyleValue const& case StyleValue::Type::Percentage: return PercentageStyleValue::create(Percentage(interpolate_raw(from.as_percentage().percentage().value(), to.as_percentage().percentage().value()))); case StyleValue::Type::Position: { + // https://www.w3.org/TR/css-values-4/#combine-positions + // FIXME: Interpolation of is defined as the independent interpolation of each component (x, y) normalized as an offset from the top left corner as a . auto& from_position = from.as_position(); auto& to_position = to.as_position(); return PositionStyleValue::create( - TRY(interpolate_property(from_position.edge_x(), to_position.edge_x(), delta)), - TRY(interpolate_property(from_position.edge_y(), to_position.edge_y(), delta))); + TRY(interpolate_property(from_position.edge_x(), to_position.edge_x(), delta))->as_edge(), + TRY(interpolate_property(from_position.edge_y(), to_position.edge_y(), delta))->as_edge()); } case StyleValue::Type::Rect: { auto from_rect = from.as_rect().rect(); diff --git a/Userland/Libraries/LibWeb/CSS/StyleValues/PositionStyleValue.h b/Userland/Libraries/LibWeb/CSS/StyleValues/PositionStyleValue.h index 442d82f37d..24e73abf38 100644 --- a/Userland/Libraries/LibWeb/CSS/StyleValues/PositionStyleValue.h +++ b/Userland/Libraries/LibWeb/CSS/StyleValues/PositionStyleValue.h @@ -12,34 +12,35 @@ #include #include #include +#include namespace Web::CSS { class PositionStyleValue final : public StyleValueWithDefaultOperators { public: - static ValueComparingNonnullRefPtr create(ValueComparingNonnullRefPtr edge_x, ValueComparingNonnullRefPtr edge_y) + static ValueComparingNonnullRefPtr create(ValueComparingNonnullRefPtr edge_x, ValueComparingNonnullRefPtr edge_y) { return adopt_ref(*new (nothrow) PositionStyleValue(move(edge_x), move(edge_y))); } virtual ~PositionStyleValue() override = default; - ValueComparingNonnullRefPtr edge_x() const { return m_properties.edge_x; } - ValueComparingNonnullRefPtr edge_y() const { return m_properties.edge_y; } + ValueComparingNonnullRefPtr edge_x() const { return m_properties.edge_x; } + ValueComparingNonnullRefPtr edge_y() const { return m_properties.edge_y; } virtual String to_string() const override; bool properties_equal(PositionStyleValue const& other) const { return m_properties == other.m_properties; } private: - PositionStyleValue(ValueComparingNonnullRefPtr edge_x, ValueComparingNonnullRefPtr edge_y) + PositionStyleValue(ValueComparingNonnullRefPtr edge_x, ValueComparingNonnullRefPtr edge_y) : StyleValueWithDefaultOperators(Type::Position) , m_properties { .edge_x = edge_x, .edge_y = edge_y } { } struct Properties { - ValueComparingNonnullRefPtr edge_x; - ValueComparingNonnullRefPtr edge_y; + ValueComparingNonnullRefPtr edge_x; + ValueComparingNonnullRefPtr edge_y; bool operator==(Properties const&) const = default; } m_properties; };