ladybird/Libraries/LibWeb/CSS/CSSMathValue.h
Sam Atkins 5178d1ebe3 LibWeb/CSS: Add flag to disable create-internal-rep type checking
CSSTransformComponents hold other CSSStyleValues as their parameters. We
want to be able to create internal representations from those parameters
without them caring if they would be valid when directly assigned to the
property.

This is a temporary solution to make transform functions work. To be
completely correct, we need to know what is allowed in that context,
along with value ranges - a combination of the contexts we create when
parsing, and when computing calculations. For transform functions, this
doesn't matter, as there's no limit to the range of allowed values.
2025-10-14 13:41:47 +01:00

45 lines
1.1 KiB
C++

/*
* Copyright (c) 2025, Sam Atkins <sam@ladybird.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <LibWeb/Bindings/CSSMathValuePrototype.h>
#include <LibWeb/CSS/CSSNumericValue.h>
#include <LibWeb/Forward.h>
namespace Web::CSS {
// https://drafts.css-houdini.org/css-typed-om-1/#cssmathvalue
class CSSMathValue : public CSSNumericValue {
WEB_PLATFORM_OBJECT(CSSMathValue, CSSNumericValue);
GC_DECLARE_ALLOCATOR(CSSMathValue);
public:
virtual ~CSSMathValue() override = default;
Bindings::CSSMathOperator operator_() const { return m_operator; }
enum class Nested : u8 {
No,
Yes,
};
enum class Parens : u8 {
With,
Without,
};
virtual String serialize_math_value(Nested, Parens) const = 0;
virtual WebIDL::ExceptionOr<NonnullRefPtr<StyleValue const>> create_an_internal_representation(PropertyNameAndID const&, PerformTypeCheck) const final override;
protected:
explicit CSSMathValue(JS::Realm&, Bindings::CSSMathOperator, NumericType);
virtual void initialize(JS::Realm&) override;
Bindings::CSSMathOperator m_operator;
};
}