mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-10-15 04:29:27 +00:00
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.
50 lines
1.9 KiB
C++
50 lines
1.9 KiB
C++
/*
|
||
* Copyright (c) 2025, Sam Atkins <sam@ladybird.org>
|
||
*
|
||
* SPDX-License-Identifier: BSD-2-Clause
|
||
*/
|
||
|
||
#pragma once
|
||
|
||
#include <LibWeb/CSS/CSSStyleValue.h>
|
||
#include <LibWeb/WebIDL/Types.h>
|
||
|
||
namespace Web::CSS {
|
||
|
||
using CSSUnparsedSegment = Variant<String, GC::Ref<CSSVariableReferenceValue>>;
|
||
using GCRootCSSUnparsedSegment = Variant<String, GC::Root<CSSVariableReferenceValue>>;
|
||
|
||
// https://drafts.css-houdini.org/css-typed-om-1/#cssunparsedvalue
|
||
class CSSUnparsedValue final : public CSSStyleValue {
|
||
WEB_PLATFORM_OBJECT(CSSUnparsedValue, CSSStyleValue);
|
||
GC_DECLARE_ALLOCATOR(CSSUnparsedValue);
|
||
|
||
public:
|
||
[[nodiscard]] static GC::Ref<CSSUnparsedValue> create(JS::Realm&, Vector<GCRootCSSUnparsedSegment>);
|
||
static WebIDL::ExceptionOr<GC::Ref<CSSUnparsedValue>> construct_impl(JS::Realm&, Vector<GCRootCSSUnparsedSegment>);
|
||
|
||
virtual ~CSSUnparsedValue() override;
|
||
|
||
WebIDL::UnsignedLong length() const;
|
||
virtual Optional<JS::Value> item_value(size_t index) const override;
|
||
virtual WebIDL::ExceptionOr<void> set_value_of_existing_indexed_property(u32, JS::Value) override;
|
||
virtual WebIDL::ExceptionOr<void> set_value_of_new_indexed_property(u32, JS::Value) override;
|
||
|
||
virtual WebIDL::ExceptionOr<String> to_string() const override;
|
||
virtual WebIDL::ExceptionOr<NonnullRefPtr<StyleValue const>> create_an_internal_representation(PropertyNameAndID const&, PerformTypeCheck) const override;
|
||
|
||
private:
|
||
explicit CSSUnparsedValue(JS::Realm&, Vector<CSSUnparsedSegment>);
|
||
|
||
virtual void initialize(JS::Realm&) override;
|
||
virtual void visit_edges(Visitor&) override;
|
||
|
||
bool contains_unparsed_value(CSSUnparsedValue const&) const;
|
||
|
||
// https://drafts.css-houdini.org/css-typed-om-1/#dom-cssunparsedvalue-tokens-slot
|
||
// They have a [[tokens]] internal slot, which is a list of USVStrings and CSSVariableReferenceValue objects.
|
||
// This list is the object’s values to iterate over.
|
||
Vector<CSSUnparsedSegment> m_tokens;
|
||
};
|
||
|
||
}
|