mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-04-26 01:35:08 +02:00
Previously, the LibWeb bindings generator would output multiple per interface files like Prototype/Constructor/Namespace/GlobalMixin depending on the contents of that IDL file. This complicates the build system as it means that it does not know what files will be generated without knowledge of the contents of that IDL file. Instead, for each IDL file only generate a single Bindings/<IDLFile>.h and Bindings/<IDLFile>.cpp.
89 lines
2.9 KiB
C++
89 lines
2.9 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/CSSNumericValue.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;
|
|
|
|
WebIDL::ExceptionOr<GC::Ref<CSSNumericValue>> add(Vector<CSSNumberish> const&);
|
|
WebIDL::ExceptionOr<GC::Ref<CSSNumericValue>> sub(Vector<CSSNumberish> const&);
|
|
WebIDL::ExceptionOr<GC::Ref<CSSNumericValue>> mul(Vector<CSSNumberish> const&);
|
|
WebIDL::ExceptionOr<GC::Ref<CSSNumericValue>> div(Vector<CSSNumberish> const&);
|
|
WebIDL::ExceptionOr<GC::Ref<CSSNumericValue>> min(Vector<CSSNumberish> const&);
|
|
WebIDL::ExceptionOr<GC::Ref<CSSNumericValue>> max(Vector<CSSNumberish> const&);
|
|
|
|
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;
|
|
|
|
CSSNumberish negate();
|
|
WebIDL::ExceptionOr<CSSNumberish> invert();
|
|
|
|
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({}); }
|
|
void serialize(StringBuilder&, SerializationParams const&) const;
|
|
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 = {});
|
|
|
|
}
|