/src/serenity/Userland/Libraries/LibWeb/CSS/StyleValues/CSSLCHLike.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * Copyright (c) 2024, Sam Atkins <sam@ladybird.org> |
3 | | * |
4 | | * SPDX-License-Identifier: BSD-2-Clause |
5 | | */ |
6 | | |
7 | | #pragma once |
8 | | |
9 | | #include <LibWeb/CSS/StyleValues/CSSColorValue.h> |
10 | | #include <LibWeb/CSS/StyleValues/NumberStyleValue.h> |
11 | | |
12 | | namespace Web::CSS { |
13 | | |
14 | | class CSSLCHLike : public CSSColorValue { |
15 | | public: |
16 | | template<DerivedFrom<CSSLCHLike> T> |
17 | | static ValueComparingNonnullRefPtr<T> create(ValueComparingNonnullRefPtr<CSSStyleValue> l, ValueComparingNonnullRefPtr<CSSStyleValue> c, ValueComparingNonnullRefPtr<CSSStyleValue> h, ValueComparingRefPtr<CSSStyleValue> alpha = {}) |
18 | 0 | { |
19 | | // alpha defaults to 1 |
20 | 0 | if (!alpha) |
21 | 0 | alpha = NumberStyleValue::create(1); |
22 | |
|
23 | 0 | return adopt_ref(*new (nothrow) T({}, move(l), move(c), move(h), alpha.release_nonnull())); |
24 | 0 | } Unexecuted instantiation: _ZN3Web3CSS10CSSLCHLike6createITkN2AK8Concepts11DerivedFromIS1_EENS0_6CSSLCHEEENS0_27ValueComparingNonnullRefPtrIT_EENS7_INS0_13CSSStyleValueEEESB_SB_NS0_20ValueComparingRefPtrISA_EE Unexecuted instantiation: _ZN3Web3CSS10CSSLCHLike6createITkN2AK8Concepts11DerivedFromIS1_EENS0_8CSSOKLCHEEENS0_27ValueComparingNonnullRefPtrIT_EENS7_INS0_13CSSStyleValueEEESB_SB_NS0_20ValueComparingRefPtrISA_EE |
25 | 0 | virtual ~CSSLCHLike() override = default; |
26 | | |
27 | 0 | CSSStyleValue const& l() const { return *m_properties.l; } |
28 | 0 | CSSStyleValue const& c() const { return *m_properties.c; } |
29 | 0 | CSSStyleValue const& h() const { return *m_properties.h; } |
30 | 0 | CSSStyleValue const& alpha() const { return *m_properties.alpha; } |
31 | | |
32 | | virtual bool equals(CSSStyleValue const& other) const override; |
33 | | |
34 | | protected: |
35 | | CSSLCHLike(ColorType color_type, ValueComparingNonnullRefPtr<CSSStyleValue> l, ValueComparingNonnullRefPtr<CSSStyleValue> c, ValueComparingNonnullRefPtr<CSSStyleValue> h, ValueComparingNonnullRefPtr<CSSStyleValue> alpha) |
36 | 0 | : CSSColorValue(color_type) |
37 | 0 | , m_properties { .l = move(l), .c = move(c), .h = move(h), .alpha = move(alpha) } |
38 | 0 | { |
39 | 0 | } |
40 | | |
41 | | struct Properties { |
42 | | ValueComparingNonnullRefPtr<CSSStyleValue> l; |
43 | | ValueComparingNonnullRefPtr<CSSStyleValue> c; |
44 | | ValueComparingNonnullRefPtr<CSSStyleValue> h; |
45 | | ValueComparingNonnullRefPtr<CSSStyleValue> alpha; |
46 | 0 | bool operator==(Properties const&) const = default; |
47 | | } m_properties; |
48 | | }; |
49 | | |
50 | | // https://drafts.css-houdini.org/css-typed-om-1/#csslch |
51 | | class CSSLCH final : public CSSLCHLike { |
52 | | public: |
53 | | CSSLCH(Badge<CSSLCHLike>, ValueComparingNonnullRefPtr<CSSStyleValue> l, ValueComparingNonnullRefPtr<CSSStyleValue> c, ValueComparingNonnullRefPtr<CSSStyleValue> h, ValueComparingNonnullRefPtr<CSSStyleValue> alpha) |
54 | 0 | : CSSLCHLike(ColorType::LCH, move(l), move(c), move(h), move(alpha)) |
55 | 0 | { |
56 | 0 | } |
57 | | virtual ~CSSLCH() override = default; |
58 | | |
59 | | virtual Color to_color(Optional<Layout::NodeWithStyle const&>) const override; |
60 | | |
61 | | virtual String to_string() const override; |
62 | | }; |
63 | | |
64 | | // https://drafts.css-houdini.org/css-typed-om-1/#cssoklch |
65 | | class CSSOKLCH final : public CSSLCHLike { |
66 | | public: |
67 | | CSSOKLCH(Badge<CSSLCHLike>, ValueComparingNonnullRefPtr<CSSStyleValue> l, ValueComparingNonnullRefPtr<CSSStyleValue> c, ValueComparingNonnullRefPtr<CSSStyleValue> h, ValueComparingNonnullRefPtr<CSSStyleValue> alpha) |
68 | 0 | : CSSLCHLike(ColorType::OKLCH, move(l), move(c), move(h), move(alpha)) |
69 | 0 | { |
70 | 0 | } |
71 | | virtual ~CSSOKLCH() override = default; |
72 | | |
73 | | virtual Color to_color(Optional<Layout::NodeWithStyle const&>) const override; |
74 | | |
75 | | String to_string() const override; |
76 | | }; |
77 | | |
78 | | } |