/* * Copyright (c) 2018-2020, Andreas Kling * Copyright (c) 2021, Tobias Christiansen * Copyright (c) 2021-2023, Sam Atkins * Copyright (c) 2022-2023, MacDue * Copyright (c) 2023, Ali Mohammad Pur * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace Web::CSS { class EasingStyleValue final : public StyleValueWithDefaultOperators { public: struct Linear { struct Stop { ValueComparingNonnullRefPtr output; ValueComparingRefPtr input; bool operator==(Stop const&) const = default; }; Vector stops; bool operator==(Linear const&) const = default; String to_string(SerializationMode) const; }; struct CubicBezier { ValueComparingNonnullRefPtr x1; ValueComparingNonnullRefPtr y1; ValueComparingNonnullRefPtr x2; ValueComparingNonnullRefPtr y2; struct CachedSample { double x; double y; double t; }; mutable Vector m_cached_x_samples {}; bool operator==(CubicBezier const& other) const { return x1 == other.x1 && y1 == other.y1 && x2 == other.x2 && y2 == other.y2; } String to_string(SerializationMode) const; }; struct Steps { ValueComparingNonnullRefPtr number_of_intervals; StepPosition position; bool operator==(Steps const&) const = default; String to_string(SerializationMode) const; }; struct WEB_API Function : public Variant { using Variant::Variant; String to_string(SerializationMode) const; }; static ValueComparingNonnullRefPtr create(Function const& function) { return adopt_ref(*new (nothrow) EasingStyleValue(function)); } virtual ~EasingStyleValue() override = default; Function const& function() const { return m_function; } virtual String to_string(SerializationMode mode) const override { return m_function.to_string(mode); } virtual ValueComparingNonnullRefPtr absolutized(ComputationContext const&) const override; bool properties_equal(EasingStyleValue const& other) const { return m_function == other.m_function; } private: EasingStyleValue(Function const& function) : StyleValueWithDefaultOperators(Type::Easing) , m_function(function) { } Function m_function; }; }