/src/serenity/Userland/Libraries/LibWeb/CSS/Frequency.cpp
Line | Count | Source |
1 | | /* |
2 | | * Copyright (c) 2022-2023, Sam Atkins <atkinssj@serenityos.org> |
3 | | * |
4 | | * SPDX-License-Identifier: BSD-2-Clause |
5 | | */ |
6 | | |
7 | | #include "Frequency.h" |
8 | | #include <LibWeb/CSS/Percentage.h> |
9 | | #include <LibWeb/CSS/StyleValues/CSSMathValue.h> |
10 | | |
11 | | namespace Web::CSS { |
12 | | |
13 | | Frequency::Frequency(double value, Type type) |
14 | 0 | : m_type(type) |
15 | 0 | , m_value(value) |
16 | 0 | { |
17 | 0 | } |
18 | | |
19 | | Frequency Frequency::make_hertz(double value) |
20 | 0 | { |
21 | 0 | return { value, Type::Hz }; |
22 | 0 | } |
23 | | |
24 | | Frequency Frequency::percentage_of(Percentage const& percentage) const |
25 | 0 | { |
26 | 0 | return Frequency { percentage.as_fraction() * m_value, m_type }; |
27 | 0 | } |
28 | | |
29 | | String Frequency::to_string() const |
30 | 0 | { |
31 | 0 | return MUST(String::formatted("{}hz", to_hertz())); |
32 | 0 | } |
33 | | |
34 | | double Frequency::to_hertz() const |
35 | 0 | { |
36 | 0 | switch (m_type) { |
37 | 0 | case Type::Hz: |
38 | 0 | return m_value; |
39 | 0 | case Type::kHz: |
40 | 0 | return m_value * 1000; |
41 | 0 | } |
42 | 0 | VERIFY_NOT_REACHED(); |
43 | 0 | } |
44 | | |
45 | | StringView Frequency::unit_name() const |
46 | 0 | { |
47 | 0 | switch (m_type) { |
48 | 0 | case Type::Hz: |
49 | 0 | return "hz"sv; |
50 | 0 | case Type::kHz: |
51 | 0 | return "khz"sv; |
52 | 0 | } |
53 | 0 | VERIFY_NOT_REACHED(); |
54 | 0 | } |
55 | | |
56 | | Optional<Frequency::Type> Frequency::unit_from_name(StringView name) |
57 | 0 | { |
58 | 0 | if (name.equals_ignoring_ascii_case("hz"sv)) { |
59 | 0 | return Type::Hz; |
60 | 0 | } else if (name.equals_ignoring_ascii_case("khz"sv)) { |
61 | 0 | return Type::kHz; |
62 | 0 | } |
63 | 0 | return {}; |
64 | 0 | } |
65 | | |
66 | | Frequency Frequency::resolve_calculated(NonnullRefPtr<CSSMathValue> const& calculated, Layout::Node const&, Frequency const& reference_value) |
67 | 0 | { |
68 | 0 | return calculated->resolve_frequency_percentage(reference_value).value(); |
69 | 0 | } |
70 | | |
71 | | } |