diff --git a/Libraries/LibWeb/CSS/CSSStyleValue.cpp b/Libraries/LibWeb/CSS/CSSStyleValue.cpp index 319018c38b5..77e64044ad3 100644 --- a/Libraries/LibWeb/CSS/CSSStyleValue.cpp +++ b/Libraries/LibWeb/CSS/CSSStyleValue.cpp @@ -40,6 +40,7 @@ #include #include #include +#include #include #include #include @@ -240,6 +241,12 @@ GridTrackSizeListStyleValue const& CSSStyleValue::as_grid_track_size_list() cons return static_cast(*this); } +GuaranteedInvalidStyleValue const& CSSStyleValue::as_guaranteed_invalid() const +{ + VERIFY(is_guaranteed_invalid()); + return static_cast(*this); +} + CSSKeywordValue const& CSSStyleValue::as_keyword() const { VERIFY(is_keyword()); diff --git a/Libraries/LibWeb/CSS/CSSStyleValue.h b/Libraries/LibWeb/CSS/CSSStyleValue.h index ee8fa0a4b93..edb19d674cf 100644 --- a/Libraries/LibWeb/CSS/CSSStyleValue.h +++ b/Libraries/LibWeb/CSS/CSSStyleValue.h @@ -113,6 +113,7 @@ public: GridTemplateArea, GridTrackPlacement, GridTrackSizeList, + GuaranteedInvalid, Image, Integer, Keyword, @@ -258,6 +259,10 @@ public: GridTrackSizeListStyleValue const& as_grid_track_size_list() const; GridTrackSizeListStyleValue& as_grid_track_size_list() { return const_cast(const_cast(*this).as_grid_track_size_list()); } + bool is_guaranteed_invalid() const { return type() == Type::GuaranteedInvalid; } + GuaranteedInvalidStyleValue const& as_guaranteed_invalid() const; + GuaranteedInvalidStyleValue& as_guaranteed_invalid() { return const_cast(const_cast(*this).as_guaranteed_invalid()); } + bool is_image() const { return type() == Type::Image; } ImageStyleValue const& as_image() const; ImageStyleValue& as_image() { return const_cast(const_cast(*this).as_image()); } diff --git a/Libraries/LibWeb/CSS/StyleValues/GuaranteedInvalidStyleValue.h b/Libraries/LibWeb/CSS/StyleValues/GuaranteedInvalidStyleValue.h new file mode 100644 index 00000000000..71df96ae515 --- /dev/null +++ b/Libraries/LibWeb/CSS/StyleValues/GuaranteedInvalidStyleValue.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2025, Sam Atkins + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include + +namespace Web::CSS { + +// https://drafts.csswg.org/css-variables/#guaranteed-invalid-value +class GuaranteedInvalidStyleValue final : public StyleValueWithDefaultOperators { +public: + static ValueComparingNonnullRefPtr create() + { + static ValueComparingNonnullRefPtr instance = adopt_ref(*new (nothrow) GuaranteedInvalidStyleValue()); + return instance; + } + virtual ~GuaranteedInvalidStyleValue() override = default; + virtual String to_string(SerializationMode) const override { return {}; } + + bool properties_equal(GuaranteedInvalidStyleValue const&) const { return true; } + +private: + GuaranteedInvalidStyleValue() + : StyleValueWithDefaultOperators(Type::GuaranteedInvalid) + { + } +}; + +} diff --git a/Libraries/LibWeb/Forward.h b/Libraries/LibWeb/Forward.h index 308dedf76ca..683cb3e96ef 100644 --- a/Libraries/LibWeb/Forward.h +++ b/Libraries/LibWeb/Forward.h @@ -245,6 +245,7 @@ class GridTrackPlacement; class GridTrackPlacementStyleValue; class GridTrackSizeList; class GridTrackSizeListStyleValue; +class GuaranteedInvalidStyleValue; class ImageStyleValue; class IntegerOrCalculated; class IntegerStyleValue;