/* * Copyright (c) 2025, Callum Law * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include namespace Web::CSS { struct LinearEasingFunction { struct ControlPoint { Optional input; double output; }; Vector control_points; String stringified; double evaluate_at(double input_progress, bool before_flag) const; }; struct CubicBezierEasingFunction { double x1; double y1; double x2; double y2; String stringified; struct CachedSample { double x; double y; double t; }; mutable Vector m_cached_x_samples {}; double evaluate_at(double input_progress, bool before_flag) const; }; struct StepsEasingFunction { long interval_count; StepPosition position; String stringified; double evaluate_at(double input_progress, bool before_flag) const; }; struct EasingFunction : public Variant { using Variant::Variant; static EasingFunction linear(); static EasingFunction ease_in(); static EasingFunction ease_out(); static EasingFunction ease_in_out(); static EasingFunction ease(); static EasingFunction from_style_value(StyleValue const&); double evaluate_at(double input_progress, bool before_flag) const; String to_string() const; }; }