/* * Copyright (c) 2024, Lucas Chollet * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include namespace Web::CSS { // https://drafts.css-houdini.org/css-typed-om-1/#csscolor class CSSColor final : public CSSColorValue { public: virtual ~CSSColor() override = default; static ValueComparingNonnullRefPtr create(StringView color_space, ValueComparingNonnullRefPtr c1, ValueComparingNonnullRefPtr c2, ValueComparingNonnullRefPtr c3, ValueComparingRefPtr alpha = {}); virtual bool equals(CSSStyleValue const&) const override; virtual Color to_color(Optional) const override; virtual String to_string(SerializationMode) const override; static constexpr Array s_supported_color_space = { "a98-rgb"sv, "display-p3"sv, "srgb"sv, "srgb-linear"sv, "prophoto-rgb"sv, "rec2020"sv, "xyz"sv, "xyz-d50"sv, "xyz-d65"sv }; private: CSSColor(ColorType color_type, ValueComparingNonnullRefPtr c1, ValueComparingNonnullRefPtr c2, ValueComparingNonnullRefPtr c3, ValueComparingNonnullRefPtr alpha) : CSSColorValue(color_type) , m_properties { .channels = { move(c1), move(c2), move(c3) }, .alpha = move(alpha) } { } struct Properties { Array, 3> channels; ValueComparingNonnullRefPtr alpha; bool operator==(Properties const&) const = default; }; struct Resolved { Array channels {}; float alpha {}; }; Resolved resolve_properties() const; Properties m_properties; }; } // Web::CSS