mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2026-04-20 02:40:27 +00:00
The Transformation class wasn't really accomplishing anything. It still had to store StyleValues, so it was basically the same as TransformationStyleValue, with extra steps to convert from one to the other. So... let's just use TransformationStyleValue instead! Apart from moving code around, the behavior has changed a bit. We now actually acknowledge unresolvable parameters and return an error when we try to produce a matrix from them. Previously we just skipped over them, which was pretty wrong. This gets us an extra pass in the typed-om test. We also get some slightly different results with our transform serialization, because we're not converting to CSSPixels and back.
55 lines
2.2 KiB
C++
55 lines
2.2 KiB
C++
/*
|
|
* Copyright (c) 2018-2020, Andreas Kling <andreas@ladybird.org>
|
|
* Copyright (c) 2021, Tobias Christiansen <tobyase@serenityos.org>
|
|
* Copyright (c) 2021-2025, Sam Atkins <sam@ladybird.org>
|
|
* Copyright (c) 2022-2023, MacDue <macdue@dueutil.tech>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <LibGfx/Matrix4x4.h>
|
|
#include <LibWeb/CSS/StyleValues/StyleValue.h>
|
|
#include <LibWeb/CSS/TransformFunctions.h>
|
|
|
|
namespace Web::CSS {
|
|
|
|
class TransformationStyleValue final : public StyleValueWithDefaultOperators<TransformationStyleValue> {
|
|
public:
|
|
static ValueComparingNonnullRefPtr<TransformationStyleValue const> create(PropertyID property, TransformFunction transform_function, StyleValueVector&& values)
|
|
{
|
|
return adopt_ref(*new (nothrow) TransformationStyleValue(property, transform_function, move(values)));
|
|
}
|
|
virtual ~TransformationStyleValue() override = default;
|
|
|
|
static ValueComparingNonnullRefPtr<TransformationStyleValue const> identity_transformation(TransformFunction);
|
|
|
|
TransformFunction transform_function() const { return m_properties.transform_function; }
|
|
StyleValueVector const& values() const { return m_properties.values; }
|
|
|
|
ErrorOr<FloatMatrix4x4> to_matrix(Optional<Painting::PaintableBox const&>) const;
|
|
|
|
virtual String to_string(SerializationMode) const override;
|
|
ErrorOr<GC::Ref<CSSTransformComponent>> reify_a_transform_function(JS::Realm&) const;
|
|
|
|
virtual ValueComparingNonnullRefPtr<StyleValue const> absolutized(ComputationContext const&) const override;
|
|
|
|
bool properties_equal(TransformationStyleValue const& other) const { return m_properties == other.m_properties; }
|
|
|
|
private:
|
|
TransformationStyleValue(PropertyID property, TransformFunction transform_function, StyleValueVector&& values)
|
|
: StyleValueWithDefaultOperators(Type::Transformation)
|
|
, m_properties { .property = property, .transform_function = transform_function, .values = move(values) }
|
|
{
|
|
}
|
|
|
|
struct Properties {
|
|
PropertyID property;
|
|
TransformFunction transform_function;
|
|
StyleValueVector values;
|
|
bool operator==(Properties const& other) const;
|
|
} m_properties;
|
|
};
|
|
|
|
}
|