mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2026-04-18 18:00:31 +00:00
This was added in Level 2 of the Web Animations spec In this level of the spec, all time values associated with animations (including this duration property) are no longer simple numbers but are instead either percentages or numbers for progress- and time-based timelines respectively. These values are represented internally by a new `TimeValue` wrapper struct, and externally (i.e. in JS) as `CSSNumberish`.
77 lines
2.3 KiB
C++
77 lines
2.3 KiB
C++
/*
|
|
* Copyright (c) 2025, Sam Atkins <sam@ladybird.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/FlyString.h>
|
|
#include <LibWeb/Bindings/CSSNumericValuePrototype.h>
|
|
#include <LibWeb/CSS/CSSStyleValue.h>
|
|
#include <LibWeb/CSS/NumericType.h>
|
|
#include <LibWeb/WebIDL/ExceptionOr.h>
|
|
#include <LibWeb/WebIDL/Types.h>
|
|
|
|
namespace Web::CSS {
|
|
|
|
struct CSSNumericType {
|
|
Optional<WebIDL::Long> length;
|
|
Optional<WebIDL::Long> angle;
|
|
Optional<WebIDL::Long> time;
|
|
Optional<WebIDL::Long> frequency;
|
|
Optional<WebIDL::Long> resolution;
|
|
Optional<WebIDL::Long> flex;
|
|
Optional<WebIDL::Long> percent;
|
|
Optional<Bindings::CSSNumericBaseType> percent_hint;
|
|
};
|
|
|
|
// https://drafts.css-houdini.org/css-typed-om-1/#cssnumericvalue-sum-value
|
|
struct SumValueItem {
|
|
double value;
|
|
UnitMap unit_map;
|
|
};
|
|
using SumValue = Vector<SumValueItem>;
|
|
|
|
// https://drafts.css-houdini.org/css-typed-om-1/#cssnumericvalue
|
|
class CSSNumericValue : public CSSStyleValue {
|
|
WEB_PLATFORM_OBJECT(CSSNumericValue, CSSStyleValue);
|
|
GC_DECLARE_ALLOCATOR(CSSNumericValue);
|
|
|
|
public:
|
|
struct SerializationParams {
|
|
Optional<double> minimum {};
|
|
Optional<double> maximum {};
|
|
bool nested { false };
|
|
bool parenless { false };
|
|
};
|
|
virtual ~CSSNumericValue() override = default;
|
|
|
|
bool equals_for_bindings(Vector<CSSNumberish>) const;
|
|
virtual bool is_equal_numeric_value(GC::Ref<CSSNumericValue> other) const = 0;
|
|
|
|
WebIDL::ExceptionOr<GC::Ref<CSSUnitValue>> to(FlyString const& unit) const;
|
|
|
|
virtual Optional<SumValue> create_a_sum_value() const = 0;
|
|
|
|
CSSNumericType type_for_bindings() const;
|
|
NumericType const& type() const { return m_type; }
|
|
|
|
virtual WebIDL::ExceptionOr<String> to_string() const final override { return to_string({}); }
|
|
String to_string(SerializationParams const&) const;
|
|
|
|
static WebIDL::ExceptionOr<GC::Ref<CSSNumericValue>> parse(JS::VM&, String const& css_text);
|
|
|
|
virtual WebIDL::ExceptionOr<NonnullRefPtr<CalculationNode const>> create_calculation_node(CalculationContext const&) const = 0;
|
|
|
|
protected:
|
|
explicit CSSNumericValue(JS::Realm&, NumericType);
|
|
|
|
virtual void initialize(JS::Realm&) override;
|
|
|
|
NumericType m_type;
|
|
};
|
|
|
|
GC::Ref<CSSNumericValue> rectify_a_numberish_value(JS::Realm&, CSSNumberish const&, Optional<FlyString> unit = {});
|
|
|
|
}
|